tx · CQHpWgLXHhbF7n1UbEFkMwfTZSchzGzbZtiduEP2unkh

3Mp3uUKsY4LnTo3j4N7dJAfqRfMJ6Rgr35Q:  -0.07500000 Waves

2022.12.27 16:59 [2378778] smart account 3Mp3uUKsY4LnTo3j4N7dJAfqRfMJ6Rgr35Q > SELF 0.00000000 Waves

{ "type": 13, "id": "CQHpWgLXHhbF7n1UbEFkMwfTZSchzGzbZtiduEP2unkh", "fee": 7500000, "feeAssetId": null, "timestamp": 1672149565472, "version": 2, "chainId": 84, "sender": "3Mp3uUKsY4LnTo3j4N7dJAfqRfMJ6Rgr35Q", "senderPublicKey": "EiYReiiFX6CXEuz35wibBnvZ8LjJHZrgFwR73fomjgzy", "proofs": [ "4cDzMKLmUPSTCeU56qqKUyxR1W5dVSG26w9BSWskcTDzeirUPc3bVfiWxh5pQbUuSf8v7qiWGnWB5TGkjVjgfzkY" ], "script": "base64:BgJ6CAISABIAEgASABIDCgEBEgMKAQESDgoMAQEBAQEBAQEBAQEBEhQKEgEBAQEBAQEICAgIAQEBAQEBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESBAoCAQESAwoBCBIAEgASAwoBCBIDCgEBEgASABIDCgEIEgASBAoCCAjDAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AA5rX29yYV9vcGVuX2tleQIOa19vcmFfb3Blbl9rZXkABWtfb3JhAgVrX29yYQAJa19iYWxhbmNlAglrX2JhbGFuY2UACmtfc2VxdWVuY2UCCmtfc2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19wb3NpdGlvbk1hcmdpbgIQa19wb3NpdGlvbk1hcmdpbgAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAIWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgISa19wb3NpdGlvbkZyYWN0aW9uABJrX3Bvc2l0aW9uU2VxdWVuY2UCEmtfcG9zaXRpb25TZXF1ZW5jZQAPa19wb3NpdGlvbkFzc2V0Ag9rX3Bvc2l0aW9uQXNzZXQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwIFa19tbXIAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwIVa19saXF1aWRhdGlvbkZlZVJhdGlvABlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAhZrX3BhcnRMaXF1aWRhdGlvblJhdGlvAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0ABBrX21heFByaWNlSW1wYWN0AhBrX21heFByaWNlSW1wYWN0ABBrX21heFByaWNlU3ByZWFkAhBrX21heFByaWNlU3ByZWFkABFrX21heE9wZW5Ob3Rpb25hbAIRa19tYXhPcGVuTm90aW9uYWwAFWtfZmVlVG9TdGFrZXJzUGVyY2VudAIVa19mZWVUb1N0YWtlcnNQZXJjZW50ABBrX21heE9yYWNsZURlbGF5AhBrX21heE9yYWNsZURlbGF5AA1rX2xhc3REYXRhU3RyAg1rX2xhc3REYXRhU3RyAA5rX2xhc3RNaW51dGVJZAIOa19sYXN0TWludXRlSWQAHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAh1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQATa190d2FwRGF0YUxhc3RQcmljZQITa190d2FwRGF0YUxhc3RQcmljZQAaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQCGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAEmtfcXVvdGVBc3NldFdlaWdodAIIa19xdEFzdFcAEWtfYmFzZUFzc2V0V2VpZ2h0AghrX2JzQXN0VwATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAATa19vcGVuSW50ZXJlc3RTaG9ydAITa19vcGVuSW50ZXJlc3RTaG9ydAASa19vcGVuSW50ZXJlc3RMb25nAhJrX29wZW5JbnRlcmVzdExvbmcAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABRrX2NvbGxhdGVyYWxfYWRkcmVzcwIUa19jb2xsYXRlcmFsX2FkZHJlc3MAEmtfZXhjaGFuZ2VfYWRkcmVzcwISa19leGNoYW5nZV9hZGRyZXNzABVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwAga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwCIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzAQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEMYWRtaW5BZGRyZXNzAAkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX2FkbWluX2FkZHJlc3MBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBEXF1b3RlQXNzZXRTdGFraW5nAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfcXVvdGVfc3Rha2luZwIbUXVvdGUgYXNzZXQgc3Rha2luZyBub3Qgc2V0AQ5zdGFraW5nQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX3N0YWtpbmdfYWRkcmVzcwIPU3Rha2luZyBub3Qgc2V0AQx2YXVsdEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa192YXVsdF9hZGRyZXNzAg1WYXVsdCBub3Qgc2V0AQxtaW5lckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19taW5lcl9hZGRyZXNzAg1NaW5lciBub3Qgc2V0AQ1vcmRlcnNBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEGtfb3JkZXJzX2FkZHJlc3MCDk9yZGVycyBub3Qgc2V0AQ9yZWZlcnJhbEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19yZWZlcnJhbF9hZGRyZXNzAhBSZWZlcnJhbCBub3Qgc2V0ARFuZnRNYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCE05GVCBNYW5hZ2VyIG5vdCBzZXQBEWNvbGxhdGVyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFGtfY29sbGF0ZXJhbF9hZGRyZXNzAhpDb2xsYXRlcmFsIE1hbmFnZXIgbm90IHNldAELc3dhcEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEmtfZXhjaGFuZ2VfYWRkcmVzcwIPTm8gc3dhcCBhZGRyZXNzAhRJbnZhbGlkIHN3YXAgYWRkcmVzcwARa193aGl0ZWxpc3RfYXNzZXQCEWtfd2hpdGVsaXN0X2Fzc2V0ARBpc1doaXRlbGlzdEFzc2V0AQhfYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERY29sbGF0ZXJhbEFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBRFrX3doaXRlbGlzdF9hc3NldAUIX2Fzc2V0SWQHAA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgANVFdBUF9JTlRFUlZBTAAPAA9PUkFDTEVfSU5URVJWQUwADwAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAIQUxMX0ZFRVMAZAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFc3FydGQBAl94CQEEc3FydAQFAl94BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBHBvd2QCAl94Al95CQBsBgUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUCX3kFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBmJzcXJ0ZAECX3gJAQpzcXJ0QmlnSW50BAUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEFYnBvd2QCAl94Al95CQB2BgUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUCX3kFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEdm1heAICX3gCX3kDCQBnAgUCX3gFAl95BQJfeAUCX3kBCWxpc3RUb1N0cgEFX2xpc3QKAQVfam9pbgILYWNjdW11bGF0b3IDdmFsCQCsAgIJAKwCAgULYWNjdW11bGF0b3IFA3ZhbAIBLAQKbmV3TGlzdFN0cgoAAiRsBQVfbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFX2pvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQLbmV3TGlzdFN0clUJALMCAgUKbmV3TGlzdFN0cgABBAtuZXdMaXN0U3RyUgMJAAACCQCvAgIFC25ld0xpc3RTdHJVAAECASwJALACAgULbmV3TGlzdFN0clUAAQULbmV3TGlzdFN0clUFC25ld0xpc3RTdHJSAQlzdHJUb0xpc3QBBF9zdHIJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9pbml0TWFyZ2luUmF0aW8ACQEDaW50AQURa19pbml0TWFyZ2luUmF0aW8BBnF0QXN0UgAJAQNpbnQBBRNrX3F1b3RlQXNzZXRSZXNlcnZlAQZic0FzdFIACQEDaW50AQUSa19iYXNlQXNzZXRSZXNlcnZlAQZxdEFzdFcACQEFaW50T3ICBRJrX3F1b3RlQXNzZXRXZWlnaHQFDERFQ0lNQUxfVU5JVAEGYnNBc3RXAAkBBWludE9yAgURa19iYXNlQXNzZXRXZWlnaHQFDERFQ0lNQUxfVU5JVAERdG90YWxQb3NpdGlvblNpemUACQEDaW50AQUTa190b3RhbFBvc2l0aW9uU2l6ZQEUb3BlbkludGVyZXN0Tm90aW9uYWwACQEDaW50AQUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAERb3BlbkludGVyZXN0U2hvcnQACQEDaW50AQUTa19vcGVuSW50ZXJlc3RTaG9ydAEQb3BlbkludGVyZXN0TG9uZwAJAQNpbnQBBRJrX29wZW5JbnRlcmVzdExvbmcBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAACQEDaW50AQUSa19uZXh0RnVuZGluZ0Jsb2NrARBmdW5kaW5nUGVyaW9kUmF3AAkBA2ludAEFD2tfZnVuZGluZ1BlcmlvZAEUZnVuZGluZ1BlcmlvZERlY2ltYWwACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQxERUNJTUFMX1VOSVQBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUHU0VDT05EUwEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJAQNpbnQBBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8BE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEDaW50AQUVa19saXF1aWRhdGlvbkZlZVJhdGlvARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAQNpbnQBBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAQtzcHJlYWRMaW1pdAAJAQNpbnQBBQ1rX3NwcmVhZExpbWl0AQ5tYXhQcmljZUltcGFjdAAJAQNpbnQBBRBrX21heFByaWNlSW1wYWN0AQ5tYXhQcmljZVNwcmVhZAAJAQNpbnQBBRBrX21heFByaWNlU3ByZWFkAQ9tYXhPcGVuTm90aW9uYWwACQEDaW50AQURa19tYXhPcGVuTm90aW9uYWwBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAQNpbnQBBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQEMbGFzdFNlcXVlbmNlAAkBBWludE9yAgUKa19zZXF1ZW5jZQAAARNmZWVUb1N0YWtlcnNQZXJjZW50AAkBA2ludAEFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAEObWF4T3JhY2xlRGVsYXkACQEDaW50AQUQa19tYXhPcmFjbGVEZWxheQEPZ2V0QWN0dWFsQ2FsbGVyAQFpCQELdmFsdWVPckVsc2UCCQCdCAIJAQ1vcmRlcnNBZGRyZXNzAAIIa19zZW5kZXIJAKUIAQgFAWkGY2FsbGVyARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgECDkludmFsaWQgbWFyZ2luAwMJAQEhAQUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGcCBRRyZW1haW5pbmdNYXJnaW5SYXRpbwAABwkAAgECDkludmFsaWQgbWFyZ2luBgEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAixTaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIF9wb3NpdGlvblNpemUgPT0gMAMJAGYCBQ1fcG9zaXRpb25TaXplAAAJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAQtnZXRQb3NpdGlvbgEHX3RyYWRlcgQPcG9zaXRpb25TaXplT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyBAckbWF0Y2gwBQ9wb3NpdGlvblNpemVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAxwb3NpdGlvblNpemUFByRtYXRjaDAJAJYKBAUMcG9zaXRpb25TaXplCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyCQCWCgQAAAAAAAAAAAEQZ2V0UG9zaXRpb25Bc3NldAEHX3RyYWRlcgQQcG9zaXRpb25Bc3NldE9wdAkAnQgCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFB190cmFkZXIEByRtYXRjaDAFEHBvc2l0aW9uQXNzZXRPcHQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBA1wb3NpdGlvbkFzc2V0BQckbWF0Y2gwBQ1wb3NpdGlvbkFzc2V0CQDYBAEJAQpxdW90ZUFzc2V0AAETcmVxdWlyZU9wZW5Qb3NpdGlvbgEHX3RyYWRlcgMJAAACCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEGcGF1c2VkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQhrX3BhdXNlZAcBCWNsb3NlT25seQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwULa19jbG9zZU9ubHkHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDCQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAENY2FsY0ludmFyaWFudAQHX3F0QXN0UgdfcXRBc3RXB19ic0FzdFIHX2JzQXN0VwQHYnF0QXN0UgkAtgIBBQdfcXRBc3RSBAdicXRBc3RXCQC2AgEFB19xdEFzdFcEB2Jic0FzdFIJALYCAQUHX2JzQXN0UgQHYmJzQXN0VwkAtgIBBQdfYnNBc3RXCQEFYm11bGQCCQEFYm11bGQCBQdicXRBc3RSBQdicXRBc3RXCQEFYm11bGQCBQdiYnNBc3RSBQdiYnNBc3RXAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEAWsJAQ1jYWxjSW52YXJpYW50BAUHX3F0QXN0UgUHX3F0QXN0VwUHX2JzQXN0UgUHX2JzQXN0VwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50CQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEJAQRtdWxkAgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUHX3F0QXN0VwQYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEEZGl2ZAIJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBQdfcXRBc3RXBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE2ODA1MTY5NjgJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE2ODA1MTY5NjgCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjgwNTE2OTY4Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE2ODA1MTY5NjgCXzMEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAttYXJrZXRQcmljZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAADCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBQdfcXRBc3RSAhQgYmVmb3JlIGJhc2UgYXNzZXQ6IAkApAMBBQdfYnNBc3RSAiEgcXVvdGUgYXNzZXQgYW1vdW50IHRvIGV4Y2hhbmdlOiAJAKQDAQURX3F1b3RlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIOIG1hcmtldFByaWNlOiAJAKQDAQULbWFya2V0UHJpY2UJAJYKBAUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24MX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQMc2lnbmVkTWFyZ2luCQBkAgkAZQIFDF9tYXJnaW5EZWx0YQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTg0NTUxODU4MgMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxODQ1NTE4NTgyAl8xBAdiYWREZWJ0CAUNJHQwMTg0NTUxODU4MgJfMgkAlQoDBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50ARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQLcHJpY2VCZWZvcmUJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0AwkAAAIFEF9iYXNlQXNzZXRBbW91bnQAAAkAAgECGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAWsJAQ1jYWxjSW52YXJpYW50BAUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEJAQRtdWxkAgUYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBRBfYmFzZUFzc2V0V2VpZ2h0BA5xdW90ZUFzc2V0U29sZAkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMTk3NzAxOTkzMQkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTk3NzAxOTkzMQJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5NzcwMTk5MzECXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTk3NzAxOTkzMQJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABDmdldE9yYWNsZVByaWNlAAQGb3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUFa19vcmECAAQIcHJpY2VLZXkJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFCWtfb3JhX2tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkECGJsb2NrS2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFD2tfb3JhX2Jsb2NrX2tleQIAAwkBAiE9AgUIYmxvY2tLZXkCAAQMY3VycmVudEJsb2NrCAUJbGFzdEJsb2NrBmhlaWdodAQPbGFzdE9yYWNsZUJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhibG9ja0tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBDmlzTWFya2V0Q2xvc2VkAAQGb3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUFa19vcmECAAQHb3BlbktleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ5rX29yYV9vcGVuX2tleQIAAwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDI0ODgyMjUxMDIJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQTb3V0UG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI0ODgyMjUxMDICXzEEAngxCAUNJHQwMjQ4ODIyNTEwMgJfMgQCeDIIBQ0kdDAyNDg4MjI1MTAyAl8zBAJ4MwgFDSR0MDI0ODgyMjUxMDICXzQFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjY1MjMyNjY1MQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjY1MjMyNjY1MQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNjUyMzI2NjUxAl8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI2NTIzMjY2NTECXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjY1MjMyNjY1MQJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjcxNjQyNzI3NQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjcxNjQyNzI3NQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNzE2NDI3Mjc1Al8yBANwb24IBQ0kdDAyNzE2NDI3Mjc1Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI3MTY0MjcyNzUCXzQEDSR0MDI3MjgxMjczNzQJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyNzI4MTI3Mzc0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjcyODEyNzM3NAJfMgQNJHQwMjczNzkyNzU0NQkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjczNzkyNzU0NQJfMQQHYmFkRGVidAgFDSR0MDI3Mzc5Mjc1NDUCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfNwMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRVleGNoYW5nZWRQb3NpdGlvblNpemUHAl8xBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50ARVpbnRlcm5hbENsb3NlUG9zaXRpb24CB190cmFkZXIUX2NoZWNrTWF4UHJpY2VJbXBhY3QEDSR0MDI4Nzg1Mjg5MTMJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI4Nzg1Mjg5MTMCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg3ODUyODkxMwJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyODc4NTI4OTEzAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI4Nzg1Mjg5MTMCXzQEDXVucmVhbGl6ZWRQbmwICQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QCXzIEDSR0MDI5MDA4MjkxNzYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI5MDA4MjkxNzYCXzEEB2JhZERlYnQIBQ0kdDAyOTAwODI5MTc2Al8yBBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQEtAQUMcG9zaXRpb25TaXplBAtyZWFsaXplZFBubAUNdW5yZWFsaXplZFBubAQNbWFyZ2luVG9WYXVsdAkBAS0BBQxyZW1haW5NYXJnaW4EDSR0MDI5MzAzMjk1NzcJAQpzd2FwT3V0cHV0AwkAZgIFDHBvc2l0aW9uU2l6ZQAACQEDYWJzAQUMcG9zaXRpb25TaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDI5MzAzMjk1NzcCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTMwMzI5NTc3Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTMwMzI5NTc3Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMjkzMDMyOTU3NwJfNAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAyOTMwMzI5NTc3Al81BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAyOTMwMzI5NTc3Al82BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJ8KDQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQdiYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFDHBvc2l0aW9uU2l6ZQAABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwAAAEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbGlzdAAABAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzE3MDAzMTg3OQkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzE3MDAzMTg3OQJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDMxNzAwMzE4NzkCXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDMxNzAwMzE4NzkCXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBANiczIJAQVicG93ZAIJALcCAgUBYgUCc3oJALYCAQkAaAIAAgUMREVDSU1BTF9VTklUBARxYnMyCQEFYm11bGQCBQFxBQNiczIEA3BzNAkAuQICCQC2AgEABAkBBWJtdWxkAgUBcAUCc3oEA3NxcgkBBmJzcXJ0ZAEJAQVibXVsZAIFBHFiczIJALgCAgUBcQUDcHM0BAJicQkBBWJtdWxkAgUBYgUBcQQCcXMJAQVibXVsZAIFAXEFAnN6BAN0b3AJALcCAgkAtwICCQC+AgEFA3NxcgUCYnEFAnFzBANib3QJALkCAgkAtgIBAAIJAQVibXVsZAIFAXEFAnN6BAZyZXN1bHQJAQViZGl2ZAIFA3RvcAUDYm90CQCgAwEFBnJlc3VsdAEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDDl90ZXJtaW5hbFByaWNlB19xdEFzdFIHX2JzQXN0UgQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAECW5ld1F0QXN0VwkBBGRpdmQCCQEEbXVsZAIFDl90ZXJtaW5hbFByaWNlBQdfYnNBc3RSBQdfcXRBc3RSCQCVCgMFCW5ld1F0QXN0VwUMREVDSU1BTF9VTklUAAAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQVY3VycmVudE5ldE1hcmtldFZhbHVlCAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwJfMQQJbmV3UXRBc3RXCQETZ2V0UXVvdGVBc3NldFdlaWdodAQFB19ic0FzdFIFDV9wb3NpdGlvblNpemUFB19xdEFzdFIFDl90ZXJtaW5hbFByaWNlBAluZXdCc0FzdFcFDERFQ0lNQUxfVU5JVAQNbWFyZ2luVG9WYXVsdAgJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUNX3Bvc2l0aW9uU2l6ZQUVY3VycmVudE5ldE1hcmtldFZhbHVlBQdfcXRBc3RSBQluZXdRdEFzdFcFB19ic0FzdFIFCW5ld0JzQXN0VwUPUE5MX09QVElPTl9TUE9UAl8yCQCVCgMFCW5ld1F0QXN0VwUJbmV3QnNBc3RXBQ1tYXJnaW5Ub1ZhdWx0AQpnZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UDAwMJAAACCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAYJAAACCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAAABgkBDmlzTWFya2V0Q2xvc2VkAAkAlAoCAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAQ5nZXRBZGp1c3RlZEZlZQILX2FydGlmYWN0SWQQX2Jhc2VGZWVEaXNjb3VudAQKYmFzZUZlZVJhdwkBA2ZlZQAEB2Jhc2VGZWUJAQRtdWxkAgUKYmFzZUZlZVJhdwUQX2Jhc2VGZWVEaXNjb3VudAQNJHQwMzQ5MjczNTQyMgMJAQIhPQIFC19hcnRpZmFjdElkAgAEDGFydGlmYWN0S2luZAkBBHN0ckECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQxrX3Rva2VuX3R5cGUFC19hcnRpZmFjdElkAwkAAAIFDGFydGlmYWN0S2luZAUYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFBAlyZWR1Y3Rpb24JAQRpbnRBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUNa190b2tlbl9wYXJhbQULX2FydGlmYWN0SWQEC2FkanVzdGVkRmVlCQEEbXVsZAIFB2Jhc2VGZWUFCXJlZHVjdGlvbgkAlAoCBQthZGp1c3RlZEZlZQYJAAIBAhlJbnZhbGlkIGF0dGFjaGVkIGFydGlmYWN0CQCUCgIFB2Jhc2VGZWUHBAthZGp1c3RlZEZlZQgFDSR0MDM0OTI3MzU0MjICXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDM0OTI3MzU0MjICXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CB190cmFkZXIIX2Fzc2V0SWQED29sZFBvc2l0aW9uU2l6ZQgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEDCQAAAgUPb2xkUG9zaXRpb25TaXplAAAGCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAELaXNTYW1lQXNzZXQCB190cmFkZXIIX2Fzc2V0SWQJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDBF9hbW0IX2Fzc2V0SWQHX3RyYWRlcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwCAV8FBF9hbW0CAV8FCF9hc3NldElkAgFfBQdfdHJhZGVyARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQdfdHJhZGVyBA1wb3NpdGlvbkFzc2V0CQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIDCQAAAgUNcG9zaXRpb25Bc3NldAkA2AQBCQEKcXVvdGVBc3NldAAJAJQKAgAABQ1wb3NpdGlvbkFzc2V0BANrZXkJAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDCQClCAEFBHRoaXMFDXBvc2l0aW9uQXNzZXQFB190cmFkZXIEBmJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkAmggCCQERY29sbGF0ZXJhbEFkZHJlc3MABQNrZXkAAAkAlAoCBQZib3Jyb3cFDXBvc2l0aW9uQXNzZXQBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQQZG9HZXRGZWVEaXNjb3VudAkA/AcECQEMbWluZXJBZGRyZXNzAAISY29tcHV0ZUZlZURpc2NvdW50CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFEGRvR2V0RmVlRGlzY291bnQFEGRvR2V0RmVlRGlzY291bnQEC2ZlZURpc2NvdW50BAckbWF0Y2gwBRBkb0dldEZlZURpc2NvdW50AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECIUludmFsaWQgY29tcHV0ZUZlZURpc2NvdW50IHJlc3VsdAQNJHQwMzY2NTMzNjcyNwkBDmdldEFkanVzdGVkRmVlAgULX2FydGlmYWN0SWQFC2ZlZURpc2NvdW50BAthZGp1c3RlZEZlZQgFDSR0MDM2NjUzMzY3MjcCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDM2NjUzMzY3MjcCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0QXJ0aWZhY3RJZAEBaQQKYXJ0aWZhY3RJZAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJANgEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEkludmFsaWQgYXJ0aWZhY3RJZAIABQphcnRpZmFjdElkAQ1kaXN0cmlidXRlRmVlAQpfZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMJAQRtdWxkAgUKX2ZlZUFtb3VudAkBE2ZlZVRvU3Rha2Vyc1BlcmNlbnQABApmZWVUb1ZhdWx0CQBlAgUKX2ZlZUFtb3VudAUMZmVlVG9TdGFrZXJzCQCUCgIFDGZlZVRvU3Rha2VycwUKZmVlVG9WYXVsdAEOdXBkYXRlU2V0dGluZ3MMEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19pbml0TWFyZ2luUmF0aW8FEF9pbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19tYXhPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4T3JhY2xlRGVsYXkFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBE3VwZGF0ZVBvc2l0aW9uQXNzZXQCCF9hZGRyZXNzCF9hc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUIX2FkZHJlc3MFCF9hc3NldElkBQNuaWwBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXICDWlzTmV3UG9zaXRpb24IX2FkZHJlc3MDBQ1pc05ld1Bvc2l0aW9uBA9jdXJyZW50U2VxdWVuY2UJAQxsYXN0U2VxdWVuY2UACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFCF9hZGRyZXNzCQBkAgUPY3VycmVudFNlcXVlbmNlAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtfc2VxdWVuY2UJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBQhfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQNuaWwBCmFwcGVuZFR3YXABBl9wcmljZQQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQZfcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFCXByZXZQcmljZQQEbGlzdAkBC3B1c2hUb1F1ZXVlAwkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABQ1UV0FQX0lOVEVSVkFMCQCkAwEFCG1pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsARB1cGRhdGVBbW1XZWlnaHRzAgdfcXRBc3RXB19ic0FzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwXAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIWSW52YWxpZCB1bnBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhtJbnZhbGlkIHNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BgUDbmlsAWkBDnVuc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIHVuc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkHBQNuaWwBaQEMYWRkTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAhtJbnZhbGlkIGFkZExpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkBA0kdDA0NTc0OTQ1OTAwCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA0NTc0OTQ1OTAwAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA0NTc0OTQ1OTAwAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDU3NDk0NTkwMAJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBlAgUHX2JzQXN0UgUXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ5jaGFuZ2VTZXR0aW5ncwwQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5AwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEOdXBkYXRlU2V0dGluZ3MMBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQFpAQppbml0aWFsaXplEgdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUHX29yYWNsZQpfb3JhY2xlS2V5D19vcmFjbGVCbG9ja0tleQxfY29vcmRpbmF0b3IMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5AwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkAZwIAAAUQX21heE9wZW5Ob3Rpb25hbAYJAGcCAAAFFF9mZWVUb1N0YWtlcnNQZXJjZW50BgkAZgIFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQxERUNJTUFMX1VOSVQGCQBnAgAABQ9fbWF4T3JhY2xlRGVsYXkGCQELaW5pdGlhbGl6ZWQACQACAQIdSW52YWxpZCBpbml0aWFsaXplIHBhcmFtZXRlcnMJAM4IAgkAzggCCQDOCAIJAM4IAgkBCXVwZGF0ZUFtbQgFB19xdEFzdFIFB19ic0FzdFIAAAAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncwwFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5CQENdXBkYXRlRnVuZGluZwUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUOX2Z1bmRpbmdQZXJpb2QAAAAAAAAAAAkBDXVwZGF0ZUJhbGFuY2UBAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtfb3JhBQdfb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtfb3JhX2tleQUKX29yYWNsZUtleQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rX29yYV9ibG9ja19rZXkFD19vcmFjbGVCbG9ja0tleQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yBQNuaWwBaQEQZGVjcmVhc2VQb3NpdGlvbgMHX2Ftb3VudAlfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQMDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA0OTc2NzQ5OTA3CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0OTc2NzQ5OTA3Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQ5NzY3NDk5MDcCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDk3Njc0OTkwNwJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0OTc2NzQ5OTA3Al80BApfZGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQlESVJfU0hPUlQFCERJUl9MT05HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA1MDA4MDUwMTg0CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA1MDA4MDUwMTg0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNTAwODA1MDE4NAJfMgQNJHQwNTAxOTA1Mjg0OAMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwEDSR0MDUwNjA1NTA3ODkJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVleGNoYW5nZWRQb3NpdGlvblNpemUIBQ0kdDA1MDYwNTUwNzg5Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTA2MDU1MDc4OQJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTA2MDU1MDc4OQJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDUwNjA1NTA3ODkCXzQEGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50BRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMHCQACAQkArAICCQCsAgIJAKwCAgIlVG9vIGxpdHRsZSBiYXNlIGFzc2V0IGV4Y2hhbmdlZCwgZ290IAkApAMBBRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMCCiBleHBlY3RlZCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQLcmVhbGl6ZWRQbmwJAQRkaXZkAgkBBG11bGQCBQ11bnJlYWxpemVkUG5sBRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUxMjI2NTE0NzEJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA1MTIyNjUxNDcxAl8xBAdiYWREZWJ0CAUNJHQwNTEyMjY1MTQ3MQJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA1MTIyNjUxNDcxAl8zBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQxvcGVuTm90aW9uYWwEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAJ4KDAUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUMb3Blbk5vdGlvbmFsAAAJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTAxOTA1Mjg0OAJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1MDE5MDUyODQ4Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDUwMTkwNTI4NDgCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTAxOTA1Mjg0OAJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTAxOTA1Mjg0OAJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDUwMTkwNTI4NDgCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1MDE5MDUyODQ4Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTAxOTA1Mjg0OAJfOAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1MDE5MDUyODQ4Al85BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1MDE5MDUyODQ4A18xMAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1MDE5MDUyODQ4A18xMQQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTAxOTA1Mjg0OANfMTIEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGluY3JlYXNlUG9zaXRpb24ECl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAQRaXNDb2xsYXRlcmFsQXNzZXQJARBpc1doaXRlbGlzdEFzc2V0AQULX2Fzc2V0SWRTdHIDAwMDAwMDAwMDCQECIT0CBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkBAiE9AgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBwYJAGcCAAAFCl9yYXdBbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGAwkBASEBBQxpc1F1b3RlQXNzZXQJAQEhAQURaXNDb2xsYXRlcmFsQXNzZXQHBgkBASEBCQEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA1NDMxMDU0Mzk1CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDU0MzEwNTQzOTUCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDU0MzEwNTQzOTUCXzIEDHJhd0ZlZUFtb3VudAkBBG11bGQCBQpfcmF3QW1vdW50BQthZGp1c3RlZEZlZQQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFDHJhd0ZlZUFtb3VudAQTZGlzdHJpYnV0ZUZlZUFtb3VudAMFEWlzQ29sbGF0ZXJhbEFzc2V0BAhkb0JvcnJvdwkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgZib3Jyb3cJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUHX2Ftb3VudAUDbmlsAwkAAAIFCGRvQm9ycm93BQhkb0JvcnJvdwQNYmFsYW5jZUJlZm9yZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCF9hc3NldElkBQxyYXdGZWVBbW91bnQFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQMYmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQxiYWxhbmNlQWZ0ZXIFDGJhbGFuY2VBZnRlcgQPZXhjaGFuZ2VkQW1vdW50CQBlAgUMYmFsYW5jZUFmdGVyBQ1iYWxhbmNlQmVmb3JlAwkAAAIFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50BQ9leGNoYW5nZWRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FDHJhd0ZlZUFtb3VudAMJAAACBRNkaXN0cmlidXRlRmVlQW1vdW50BRNkaXN0cmlidXRlRmVlQW1vdW50BA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAIVYWNjZXB0UGF5bWVudFdpdGhMaW5rCQDMCAIFB190cmFkZXIJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRNkaXN0cmlidXRlRmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDU1NzExNTU4NTEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDU1NzExNTU4NTECXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTU3MTE1NTg1MQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1NTcxMTU1ODUxAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDU1NzExNTU4NTECXzQEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA1NjE0MDU5MTgxAwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTY2MDI1Njc3NQkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDU2NjAyNTY3NzUCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjYwMjU2Nzc1Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjYwMjU2Nzc1Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTY2MDI1Njc3NQJfNAMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAABBlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50CQEEZGl2ZAIFDG9wZW5Ob3Rpb25hbAUJX2xldmVyYWdlBA0kdDA1NzM4MzU3NjIyCQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50BAxyZW1haW5NYXJnaW4IBQ0kdDA1NzM4MzU3NjIyAl8xBAJ4MQgFDSR0MDU3MzgzNTc2MjICXzIEAngyCAUNJHQwNTczODM1NzYyMgJfMwMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQDCQEBIQEJAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAhZPdmVyIG1heCBvcGVuIG5vdGlvbmFsCQCeCgwFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTg4ODE1ODk5NwkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDU4ODgxNTg5OTcCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA1ODg4MTU4OTk3Al8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTYxNDA1OTE4MQJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1NjE0MDU5MTgxAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU2MTQwNTkxODECXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTYxNDA1OTE4MQJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTYxNDA1OTE4MQJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDU2MTQwNTkxODECXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1NjE0MDU5MTgxAl83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTYxNDA1OTE4MQJfOAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1NjE0MDU5MTgxAl85BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1NjE0MDU5MTgxA18xMAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1NjE0MDU5MTgxA18xMQQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTYxNDA1OTE4MQNfMTIEDSR0MDU5MTg3NTkyNDQJAQ1kaXN0cmlidXRlRmVlAQUJZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMIBQ0kdDA1OTE4NzU5MjQ0Al8xBApmZWVUb1ZhdWx0CAUNJHQwNTkxODc1OTI0NAJfMgQFc3Rha2UDBQxpc1F1b3RlQXNzZXQEBXN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIFDWlzTmV3UG9zaXRpb24FB190cmFkZXIJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAQRaXNDb2xsYXRlcmFsQXNzZXQJARBpc1doaXRlbGlzdEFzc2V0AQULX2Fzc2V0SWRTdHIDAwMDAwMDAwkBASEBBQxpc1F1b3RlQXNzZXQJAQEhAQURaXNDb2xsYXRlcmFsQXNzZXQHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaXNTYW1lQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjEyMTY2MTMwMQkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA2MTIxNjYxMzAxAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA2MTIxNjYxMzAxAl8yBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAULYWRqdXN0ZWRGZWUEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQxyYXdGZWVBbW91bnQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQDBRFpc0NvbGxhdGVyYWxBc3NldAQIZG9Cb3Jyb3cJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIGYm9ycm93CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFB19hbW91bnQFA25pbAMJAAACBQhkb0JvcnJvdwUIZG9Cb3Jyb3cEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDWJhbGFuY2VCZWZvcmUFDWJhbGFuY2VCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAEDGJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIED2V4Y2hhbmdlZEFtb3VudAkAZQIFDGJhbGFuY2VBZnRlcgUNYmFsYW5jZUJlZm9yZQMJAAACBQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQxyYXdGZWVBbW91bnQDCQAAAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAUTZGlzdHJpYnV0ZUZlZUFtb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACDWFjY2VwdFBheW1lbnQJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNjI2MDA2Mjc0MAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjI2MDA2Mjc0MAJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2MjYwMDYyNzQwAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDYyNjAwNjI3NDACXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjI2MDA2Mjc0MAJfNAQNJHQwNjI3NDY2MjgwMwkBDWRpc3RyaWJ1dGVGZWUBBQlmZWVBbW91bnQEDGZlZVRvU3Rha2VycwgFDSR0MDYyNzQ2NjI4MDMCXzEECmZlZVRvVmF1bHQIBQ0kdDA2Mjc0NjYyODAzAl8yBAVzdGFrZQMFDGlzUXVvdGVBc3NldAQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCBRFvbGRQb3NpdGlvbk1hcmdpbgUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4BB19hbW91bnQEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjM5Mzk2NDA3OQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjM5Mzk2NDA3OQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2MzkzOTY0MDc5Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDYzOTM5NjQwNzkCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjM5Mzk2NDA3OQJfNAQLbWFyZ2luRGVsdGEJAQEtAQUHX2Ftb3VudAQNJHQwNjQxMTY2NDI5NQkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULbWFyZ2luRGVsdGEEDHJlbWFpbk1hcmdpbggFDSR0MDY0MTE2NjQyOTUCXzEEB2JhZERlYnQIBQ0kdDA2NDExNjY0Mjk1Al8yAwkBAiE9AgUHYmFkRGVidAAACQACAQIdSW52YWxpZCByZW1vdmVkIG1hcmdpbiBhbW91bnQEC21hcmdpblJhdGlvCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBD2luaXRNYXJnaW5SYXRpbwAGCQACAQkArAICCQCsAgIJAKwCAgIZVG9vIG11Y2ggbWFyZ2luIHJlbW92ZWQ6IAkApAMBBQttYXJnaW5SYXRpbwIDIDwgCQCkAwEJAQ9pbml0TWFyZ2luUmF0aW8ABA1xdW90ZUFzc2V0U3RyCQDYBAEJAQpxdW90ZUFzc2V0AAQNJHQwNjQ3Mzk2NDc5MwkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDY0NzM5NjQ3OTMCXzEEB2Fzc2V0SWQIBQ0kdDA2NDczOTY0NzkzAl8yBAd0b1JlcGF5AwkAZgIFB19hbW91bnQFCGJvcnJvd2VkBQhib3Jyb3dlZAUHX2Ftb3VudAQKdG9XaXRoZHJhdwMJAGYCBQhib3Jyb3dlZAUHX2Ftb3VudAAACQBlAgUHX2Ftb3VudAUIYm9ycm93ZWQEC2ZpbmFsQm9ycm93CQBlAgUIYm9ycm93ZWQFB3RvUmVwYXkEFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQMJAGYCBQtmaW5hbEJvcnJvdwAABQNuaWwJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgUNcXVvdGVBc3NldFN0cgQNZG9TYW5pdHlDaGVjawMJAQIhPQIJAGQCBQd0b1JlcGF5BQp0b1dpdGhkcmF3BQdfYW1vdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCHRvUmVwYXk9CQCkAwEFB3RvUmVwYXkCDiArIHRvV2l0aGRyYXc9CQCkAwEFCnRvV2l0aGRyYXcCBCAhPSAJAKQDAQUHX2Ftb3VudAUDbmlsAwkAAAIFDWRvU2FuaXR5Q2hlY2sFDWRvU2FuaXR5Q2hlY2sECWRvVW5zdGFrZQMJAGYCBQp0b1dpdGhkcmF3AAAECWRvVW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUKdG9XaXRoZHJhdwUDbmlsBQNuaWwDCQAAAgUJZG9VbnN0YWtlBQlkb1Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCWRvVW5zdGFrZQUJZG9VbnN0YWtlBBZyZXR1cm5Db2xsYXRlcmFsQWN0aW9uAwkAZgIFB3RvUmVwYXkAAAQHZG9SZXBheQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgVyZXBheQkAzAgCBQdfdHJhZGVyCQDMCAIFB3RvUmVwYXkJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUHZG9SZXBheQUHZG9SZXBheQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvUmVwYXkJANkEAQUHYXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplAwkAZgIFCnRvV2l0aGRyYXcAAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQp0b1dpdGhkcmF3BQNuaWwJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQFFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uAgVfc2l6ZRRfbWluUXVvdGVBc3NldEFtb3VudAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQOX3RyYWRlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdfdHJhZGVyAg5JbnZhbGlkIGNhbGxlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDY2OTc3NjcxMTcJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY2OTc3NjcxMTcCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjY5Nzc2NzExNwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2Njk3NzY3MTE3Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY2OTc3NjcxMTcCXzQEDSR0MDY3MTIzNzE3NjkDCQBmAgkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQUFX3NpemUECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDY3NzE0Njc5MzYJAQpzd2FwT3V0cHV0AwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQVfc2l6ZQYEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA2NzcxNDY3OTM2Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjc3MTQ2NzkzNgJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjc3MTQ2NzkzNgJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDY3NzE0Njc5MzYCXzQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkBAS0BBQVfc2l6ZQUFX3NpemUEDSR0MDY4MDI3NjgxODEJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDY4MDI3NjgxODECXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2ODAyNzY4MTgxAl8yBAJtcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEDXJlYWxpemVkUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUNcmVhbGl6ZWRSYXRpbwQScmVtYWluTWFyZ2luQmVmb3JlCAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAJfMQQNJHQwNjg2ODI2ODkyMAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDY4NjgyNjg5MjACXzEED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDY4NjgyNjg5MjACXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNjg2ODI2ODkyMAJfMwQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAQRbmV3UG9zaXRpb25NYXJnaW4JAQRtdWxkAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFAm1yBA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKEKDwUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sCQBlAgUScmVtYWluTWFyZ2luQmVmb3JlBRFuZXdQb3NpdGlvbk1hcmdpbgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAADCQBmAgUFX3NpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNzA3MTA3MTEyOQkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIGBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwNzA3MTA3MTEyOQJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNzA3MTA3MTEyOQJfMgQLcmVhbGl6ZWRQbmwIBQ0kdDA3MDcxMDcxMTI5Al8zBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNzA3MTA3MTEyOQJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwNzEwNzExMjkCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwNzEwNzExMjkCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MDcxMDcxMTI5Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNzA3MTA3MTEyOQJfOAQCeDIIBQ0kdDA3MDcxMDcxMTI5Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDcwNzEwNzExMjkDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MDcxMDcxMTI5A18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MDcxMDcxMTI5A18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzA3MTA3MTEyOQNfMTMDAwkBAiE9AgUUX21pblF1b3RlQXNzZXRBbW91bnQAAAkAZgIFFF9taW5RdW90ZUFzc2V0QW1vdW50BRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAIDIDwgCQCkAwEFFF9taW5RdW90ZUFzc2V0QW1vdW50CQChCg8AAAAAAAAAAAUPcG9zaXRpb25CYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA2NzEyMzcxNzY5Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDY3MTIzNzE3NjkCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjcxMjM3MTc2OQJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2NzEyMzcxNzY5Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA2NzEyMzcxNzY5Al81BAtyZWFsaXplZFBubAgFDSR0MDY3MTIzNzE3NjkCXzYEDW1hcmdpblRvVmF1bHQIBQ0kdDA2NzEyMzcxNzY5Al83BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjcxMjM3MTc2OQJfOAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjcxMjM3MTc2OQJfOQQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDY3MTIzNzE3NjkDXzEwBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNjcxMjM3MTc2OQNfMTEEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNjcxMjM3MTc2OQNfMTIED3RvdGFsU2hvcnRBZnRlcggFDSR0MDY3MTIzNzE3NjkDXzEzBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY3MTIzNzE3NjkDXzE0BBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2NzEyMzcxNzY5A18xNQMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAkAAgECJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BA53aXRoZHJhd0Ftb3VudAkBA2FicwEFDW1hcmdpblRvVmF1bHQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNJHQwNzE5Nzg3MjE4NQMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDWFtbU5ld0JhbGFuY2UIBQ0kdDA3MTk3ODcyMTg1Al8xBAN4MTEIBQ0kdDA3MTk3ODcyMTg1Al8yBA0kdDA3MjE5MjcyMjQ2CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzIxOTI3MjI0NgJfMQQHYXNzZXRJZAgFDSR0MDcyMTkyNzIyNDYCXzIEDSR0MDcyMjYxNzMxMjADCQBmAgUIYm9ycm93ZWQAAAMJAGcCBQ53aXRoZHJhd0Ftb3VudAUIYm9ycm93ZWQEB2RvUmVwYXkJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIFcmVwYXkJAMwIAgUHX3RyYWRlcgkAzAgCBQhib3Jyb3dlZAkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQdkb1JlcGF5BQdkb1JlcGF5CQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOX3RyYWRlckFkZHJlc3MFCGJvcnJvd2VkCQDZBAEFB2Fzc2V0SWQFA25pbAkAZQIFDndpdGhkcmF3QW1vdW50BQhib3Jyb3dlZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQPcmVhbGl6ZUFuZENsb3NlCQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACGHJlYWxpemVQYXJ0aWFsbHlBbmRDbG9zZQkAzAgCBQdfdHJhZGVyCQDMCAIFDndpdGhkcmF3QW1vdW50CQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOX3RyYWRlckFkZHJlc3MFDndpdGhkcmF3QW1vdW50CQDZBAEFB2Fzc2V0SWQFA25pbAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFA25pbAUOd2l0aGRyYXdBbW91bnQDCQAAAgUNJHQwNzIyNjE3MzEyMAUNJHQwNzIyNjE3MzEyMAQTcXVvdGVXaXRoZHJhd0Ftb3VudAgFDSR0MDcyMjYxNzMxMjACXzIEFHNlbmRDb2xsYXRlcmFsQWN0aW9uCAUNJHQwNzIyNjE3MzEyMAJfMQQHdW5zdGFrZQMJAGYCBRNxdW90ZVdpdGhkcmF3QW1vdW50AAAEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFE3F1b3RlV2l0aGRyYXdBbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIDCQAAAgUPbmV3UG9zaXRpb25TaXplAAAJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgMJAGYCBRNxdW90ZVdpdGhkcmF3QW1vdW50AAAJAQh3aXRoZHJhdwIFDl90cmFkZXJBZGRyZXNzBRNxdW90ZVdpdGhkcmF3QW1vdW50BQNuaWwJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQUUc2VuZENvbGxhdGVyYWxBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAQdfdHJhZGVyBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEC21hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhNVbmFibGUgdG8gbGlxdWlkYXRlAwMDCQBmAgUPc3BvdE1hcmdpblJhdGlvCQETbGlxdWlkYXRpb25GZWVSYXRpbwAJAGYCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AAAAHCQBmAgUMREVDSU1BTF9VTklUCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABwQNJHQwNzU0NDE3NTU5MQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNzU0NDE3NTU5MQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA3NTQ0MTc1NTkxAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDc1NDQxNzU1OTECXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNzU0NDE3NTU5MQJfNAQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQQNJHQwNzU4MTY3NTkyMAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNzU4MTY3NTkyMAJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDc1ODE2NzU5MjACXzIEDSR0MDc1OTI4NzYxMTUJAQlzd2FwSW5wdXQCBQVpc0FkZAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCAUNJHQwNzU5Mjg3NjExNQJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc1OTI4NzYxMTUCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc1OTI4NzYxMTUCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3NTkyODc2MTE1Al80BBBsaXF1aWRhdGlvblJhdGlvCQEEZGl2ZAIJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFEGxpcXVpZGF0aW9uUmF0aW8EDSR0MDc2NDA0NzY2MzcJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA3NjQwNDc2NjM3Al8xBAdiYWREZWJ0CAUNJHQwNzY0MDQ3NjYzNwJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA3NjQwNDc2NjM3Al8zBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBApmZWVUb1ZhdWx0CQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IEEW5ld1Bvc2l0aW9uTWFyZ2luCQBlAgUMcmVtYWluTWFyZ2luBRJsaXF1aWRhdGlvblBlbmFsdHkED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAQUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwNzc4MDY3NzkzNQMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA3NzgwNjc3OTM1Al8xBAN4MTEIBQ0kdDA3NzgwNjc3OTM1Al8yBA0kdDA3Nzk0Mzc3OTk3CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzc5NDM3Nzk5NwJfMQQHYXNzZXRJZAgFDSR0MDc3OTQzNzc5OTcCXzIEFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAMJAGYCBQhib3Jyb3dlZAAABBBjb2xsYXRlcmFsVG9TZWxsCQEEbXVsZAIFCGJvcnJvd2VkBRBsaXF1aWRhdGlvblJhdGlvBA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIQcmVhbGl6ZVBhcnRpYWxseQkAzAgCBQdfdHJhZGVyCQDMCAIFB2Fzc2V0SWQJAMwIAgUQY29sbGF0ZXJhbFRvU2VsbAUDbmlsBQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDc5NjkyODAxODcJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBwQCeDEIBQ0kdDA3OTY5MjgwMTg3Al8xBAdiYWREZWJ0CAUNJHQwNzk2OTI4MDE4NwJfMgQCeDIIBQ0kdDA3OTY5MjgwMTg3Al8zBAJ4MwgFDSR0MDc5NjkyODAxODcCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3OTY5MjgwMTg3Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3OTY5MjgwMTg3Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzk2OTI4MDE4NwJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDc5NjkyODAxODcCXzgEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA3OTY5MjgwMTg3Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDc5NjkyODAxODcDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3OTY5MjgwMTg3A18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3OTY5MjgwMTg3A18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzk2OTI4MDE4NwNfMTMEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBApmZWVUb1ZhdWx0CQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDgwNTk1ODA3MjQDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwODA1OTU4MDcyNAJfMQQDeDExCAUNJHQwODA1OTU4MDcyNAJfMgQNJHQwODA3MzI4MDc4NgkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDgwNzMyODA3ODYCXzEEB2Fzc2V0SWQIBQ0kdDA4MDczMjgwNzg2Al8yBBVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwDCQBmAgUIYm9ycm93ZWQAAAQPcmVhbGl6ZUFuZENsb3NlCQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACGHJlYWxpemVQYXJ0aWFsbHlBbmRDbG9zZQkAzAgCBQdfdHJhZGVyCQDMCAIAAAkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQ9yZWFsaXplQW5kQ2xvc2UFD3JlYWxpemVBbmRDbG9zZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwEAXgDCQBmAgUHYmFkRGVidAAABAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFB2JhZERlYnQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnBheUZ1bmRpbmcABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDgyNjU4ODI3MjAJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MjY1ODgyNzIwAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwODI2NTg4MjcyMAJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlAAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABA0kdDA4MzE1MjgzMjg3CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQdfcXRBc3RSBQdfYnNBc3RSBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwODMxNTI4MzI4NwJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwODMxNTI4MzI4NwJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDgzMTUyODMyODcCXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQEKYXBwZW5kVHdhcAEJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBRNuZXdRdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFB19ic0FzdFIFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQNJHQwODM4NTY4Mzk1NwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwODM4NTY4Mzk1NwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA4Mzg1NjgzOTU3Al8yBANwb24IBQ0kdDA4Mzg1NjgzOTU3Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDgzODU2ODM5NTcCXzQEDSR0MDgzOTYwODQwNjEJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDgzOTYwODQwNjECXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA4Mzk2MDg0MDYxAl8yBA0kdDA4NDA2NDg0MjM2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA4NDA2NDg0MjM2Al8xBAdiYWREZWJ0CAUNJHQwODQwNjQ4NDIzNgJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA4NDA2NDg0MjM2Al8zCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0CQEBcwEFEHBvc2l0aW9uTm90aW9uYWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdmlld19nZXRQZWdBZGp1c3RDb3N0AQZfcHJpY2UEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQGcmVzdWx0CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDBQZfcHJpY2UFB19xdEFzdFIFB19ic0FzdFIJAAIBCQCkAwEIBQZyZXN1bHQCXzMBaQEYdmlld19nZXRUZXJtaW5hbEFtbVByaWNlAAQNJHQwODQ2NTI4NDczMwkBE2dldFRlcm1pbmFsQW1tU3RhdGUABBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwODQ2NTI4NDczMwJfMQQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwODQ2NTI4NDczMwJfMgQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RXAAkBBG11bGQCBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUJAQZic0FzdFcACQACAQkApAMBBQVwcmljZQFpAQ92aWV3X2dldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDg0OTQ4ODUwMTAJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4NDk0ODg1MDEwAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwODQ5NDg4NTAxMAJfMgQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJARBnZXRUd2FwU3BvdFByaWNlAAkBAXMBCQEOZ2V0T3JhY2xlUHJpY2UAAWkBGHZpZXdfZ2V0Qm9ycm93ZWRCeVRyYWRlcgEHX3RyYWRlcgQNJHQwODUyOTY4NTM1MAkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDg1Mjk2ODUzNTACXzEEB2Fzc2V0SWQIBQ0kdDA4NTI5Njg1MzUwAl8yCQACAQkArAICCQEBcwEFCGJvcnJvd2VkBQdhc3NldElkAWkBEGNvbXB1dGVTcG90UHJpY2UABAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0AWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5ADckzyo=", "height": 2378778, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 14eaH4cCRPoMQd9nmabMwfKkYe8jcCKKJKaKhsp9a4GR Next: 38aJ71Lvqgo9fcdmRcPQ92bipkM5c6NwyEeotAMjfks6 Diff:
OldNewDifferences
55
66 let b = "k_ora_block_key"
77
8-let c = "k_ora"
9-
10-let d = "k_balance"
11-
12-let e = "k_sequence"
13-
14-let f = "k_positionSize"
15-
16-let g = "k_positionMargin"
17-
18-let h = "k_positionOpenNotional"
19-
20-let i = "k_positionFraction"
21-
22-let j = "k_positionSequence"
23-
24-let k = "k_positionAsset"
25-
26-let l = "k_initialized"
27-
28-let m = "k_paused"
29-
30-let n = "k_closeOnly"
31-
32-let o = "k_fee"
33-
34-let p = "k_fundingPeriod"
35-
36-let q = "k_initMarginRatio"
37-
38-let r = "k_mmr"
39-
40-let s = "k_liquidationFeeRatio"
41-
42-let t = "k_partLiquidationRatio"
43-
44-let u = "k_spreadLimit"
45-
46-let v = "k_maxPriceImpact"
47-
48-let w = "k_maxPriceSpread"
49-
50-let x = "k_maxOpenNotional"
51-
52-let y = "k_feeToStakersPercent"
53-
54-let z = "k_maxOracleDelay"
55-
56-let A = "k_lastDataStr"
57-
58-let B = "k_lastMinuteId"
59-
60-let C = "k_twapDataLastCumulativePrice"
61-
62-let D = "k_twapDataLastPrice"
63-
64-let E = "k_twapDataPreviousMinuteId"
65-
66-let F = "k_latestLongPremiumFraction"
67-
68-let G = "k_latestShortPremiumFraction"
69-
70-let H = "k_nextFundingBlockMinTimestamp"
71-
72-let I = "k_longFundingRate"
73-
74-let J = "k_shortFundingRate"
75-
76-let K = "k_qtAstR"
77-
78-let L = "k_bsAstR"
79-
80-let M = "k_qtAstW"
81-
82-let N = "k_bsAstW"
83-
84-let O = "k_totalPositionSize"
85-
86-let P = "k_totalLongPositionSize"
87-
88-let Q = "k_totalShortPositionSize"
89-
90-let R = "k_openInterestNotional"
91-
92-let S = "k_openInterestShort"
93-
94-let T = "k_openInterestLong"
95-
96-let U = "k_coordinatorAddress"
97-
98-let V = "k_vault_address"
99-
100-let W = "k_admin_address"
101-
102-let X = "k_admin_public_key"
103-
104-let Y = "k_quote_asset"
105-
106-let Z = "k_quote_staking"
107-
108-let aa = "k_staking_address"
109-
110-let ab = "k_miner_address"
111-
112-let ac = "k_orders_address"
113-
114-let ad = "k_referral_address"
115-
116-let ae = "k_collateral_address"
117-
118-let af = "k_exchange_address"
119-
120-let ag = "k_nft_manager_address"
121-
122-let ah = "k_trader_market_asset_collateral"
123-
124-func ai (aj,ak) = ((aj + "_") + ak)
125-
126-
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, U)), "Coordinator not set")
128-
129-
130-func am () = addressFromString(getStringValue(al(), W))
131-
132-
133-func an () = fromBase58String(getStringValue(al(), X))
134-
135-
136-func ao () = fromBase58String(getStringValue(al(), Y))
137-
138-
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), Z)), "Quote asset staking not set")
140-
141-
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), aa)), "Staking not set")
143-
144-
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), V)), "Vault not set")
146-
147-
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Miner not set")
149-
150-
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Orders not set")
152-
153-
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Referral not set")
155-
156-
157-func av () = valueOrErrorMessage(addressFromString(getStringValue(al(), ag)), "NFT Manager not set")
158-
159-
160-func aw () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Collateral Manager not set")
161-
162-
163-func ax () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(al(), af), "No swap address")), "Invalid swap address")
164-
165-
166-let ay = "k_whitelist_asset"
167-
168-func az (aA) = valueOrElse(getBoolean(aw(), ai(ay, aA)), false)
169-
170-
171-let aB = "k_token_param"
172-
173-let aC = "k_token_type"
174-
175-let aD = "fee_reduction"
176-
177-let aE = 1
178-
179-let aF = 2
180-
181-let aG = 15
8+let c = "k_ora_open_key"
9+
10+let d = "k_ora"
11+
12+let e = "k_balance"
13+
14+let f = "k_sequence"
15+
16+let g = "k_positionSize"
17+
18+let h = "k_positionMargin"
19+
20+let i = "k_positionOpenNotional"
21+
22+let j = "k_positionFraction"
23+
24+let k = "k_positionSequence"
25+
26+let l = "k_positionAsset"
27+
28+let m = "k_initialized"
29+
30+let n = "k_paused"
31+
32+let o = "k_closeOnly"
33+
34+let p = "k_fee"
35+
36+let q = "k_fundingPeriod"
37+
38+let r = "k_initMarginRatio"
39+
40+let s = "k_mmr"
41+
42+let t = "k_liquidationFeeRatio"
43+
44+let u = "k_partLiquidationRatio"
45+
46+let v = "k_spreadLimit"
47+
48+let w = "k_maxPriceImpact"
49+
50+let x = "k_maxPriceSpread"
51+
52+let y = "k_maxOpenNotional"
53+
54+let z = "k_feeToStakersPercent"
55+
56+let A = "k_maxOracleDelay"
57+
58+let B = "k_lastDataStr"
59+
60+let C = "k_lastMinuteId"
61+
62+let D = "k_twapDataLastCumulativePrice"
63+
64+let E = "k_twapDataLastPrice"
65+
66+let F = "k_twapDataPreviousMinuteId"
67+
68+let G = "k_latestLongPremiumFraction"
69+
70+let H = "k_latestShortPremiumFraction"
71+
72+let I = "k_nextFundingBlockMinTimestamp"
73+
74+let J = "k_longFundingRate"
75+
76+let K = "k_shortFundingRate"
77+
78+let L = "k_qtAstR"
79+
80+let M = "k_bsAstR"
81+
82+let N = "k_qtAstW"
83+
84+let O = "k_bsAstW"
85+
86+let P = "k_totalPositionSize"
87+
88+let Q = "k_totalLongPositionSize"
89+
90+let R = "k_totalShortPositionSize"
91+
92+let S = "k_openInterestNotional"
93+
94+let T = "k_openInterestShort"
95+
96+let U = "k_openInterestLong"
97+
98+let V = "k_coordinatorAddress"
99+
100+let W = "k_vault_address"
101+
102+let X = "k_admin_address"
103+
104+let Y = "k_admin_public_key"
105+
106+let Z = "k_quote_asset"
107+
108+let aa = "k_quote_staking"
109+
110+let ab = "k_staking_address"
111+
112+let ac = "k_miner_address"
113+
114+let ad = "k_orders_address"
115+
116+let ae = "k_referral_address"
117+
118+let af = "k_collateral_address"
119+
120+let ag = "k_exchange_address"
121+
122+let ah = "k_nft_manager_address"
123+
124+let ai = "k_trader_market_asset_collateral"
125+
126+func aj (ak,al) = ((ak + "_") + al)
127+
128+
129+func am () = valueOrErrorMessage(addressFromString(getStringValue(this, V)), "Coordinator not set")
130+
131+
132+func an () = addressFromString(getStringValue(am(), X))
133+
134+
135+func ao () = fromBase58String(getStringValue(am(), Y))
136+
137+
138+func ap () = fromBase58String(getStringValue(am(), Z))
139+
140+
141+func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), aa)), "Quote asset staking not set")
142+
143+
144+func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), ab)), "Staking not set")
145+
146+
147+func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), W)), "Vault not set")
148+
149+
150+func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Miner not set")
151+
152+
153+func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Orders not set")
154+
155+
156+func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Referral not set")
157+
158+
159+func aw () = valueOrErrorMessage(addressFromString(getStringValue(am(), ah)), "NFT Manager not set")
160+
161+
162+func ax () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Collateral Manager not set")
163+
164+
165+func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(am(), ag), "No swap address")), "Invalid swap address")
166+
167+
168+let az = "k_whitelist_asset"
169+
170+func aA (aB) = valueOrElse(getBoolean(ax(), aj(az, aB)), false)
171+
172+
173+let aC = "k_token_param"
174+
175+let aD = "k_token_type"
176+
177+let aE = "fee_reduction"
178+
179+let aF = 1
180+
181+let aG = 2
182182
183183 let aH = 15
184184
185-let aI = 1000
186-
187-let aJ = 6
188-
189-let aK = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
190-
191-let aL = (86400 * aK)
192-
193-let aM = 100
194-
195-let aN = 1
196-
197-let aO = 2
198-
199-func aP (aQ) = (toString(aQ) + ",")
200-
201-
202-func aR (aQ,aS) = fraction(aQ, aK, aS, HALFEVEN)
203-
204-
205-func aT (aQ,aS) = fraction(aQ, aS, aK, HALFEVEN)
206-
207-
208-func aU (aQ) = sqrt(aQ, aJ, aJ, HALFEVEN)
209-
210-
211-func aV (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
212-
213-
214-func aW (aQ,aS) = fraction(aQ, toBigInt(aK), aS, HALFEVEN)
215-
216-
217-func aX (aQ,aS) = fraction(aQ, aS, toBigInt(aK), HALFEVEN)
218-
219-
220-func aY (aQ) = sqrtBigInt(aQ, aJ, aJ, HALFEVEN)
221-
222-
223-func aZ (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
224-
225-
226-func ba (aQ) = if ((aQ > 0))
227- then aQ
228- else -(aQ)
229-
230-
231-func bb (aQ,aS) = if ((aQ >= aS))
232- then aQ
233- else aS
234-
235-
236-func bc (bd) = {
237- func be (bf,bg) = ((bf + bg) + ",")
238-
239- let bh = {
240- let bi = bd
241- let bj = size(bi)
242- let bk = ""
243- func bl (bm,bn) = if ((bn >= bj))
244- then bm
245- else be(bm, bi[bn])
246-
247- func bo (bm,bn) = if ((bn >= bj))
248- then bm
185+let aI = 15
186+
187+let aJ = 1000
188+
189+let aK = 6
190+
191+let aL = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
192+
193+let aM = (86400 * aL)
194+
195+let aN = 100
196+
197+let aO = 1
198+
199+let aP = 2
200+
201+func aQ (aR) = (toString(aR) + ",")
202+
203+
204+func aS (aR,aT) = fraction(aR, aL, aT, HALFEVEN)
205+
206+
207+func aU (aR,aT) = fraction(aR, aT, aL, HALFEVEN)
208+
209+
210+func aV (aR) = sqrt(aR, aK, aK, HALFEVEN)
211+
212+
213+func aW (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
214+
215+
216+func aX (aR,aT) = fraction(aR, toBigInt(aL), aT, HALFEVEN)
217+
218+
219+func aY (aR,aT) = fraction(aR, aT, toBigInt(aL), HALFEVEN)
220+
221+
222+func aZ (aR) = sqrtBigInt(aR, aK, aK, HALFEVEN)
223+
224+
225+func ba (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
226+
227+
228+func bb (aR) = if ((aR > 0))
229+ then aR
230+ else -(aR)
231+
232+
233+func bc (aR,aT) = if ((aR >= aT))
234+ then aR
235+ else aT
236+
237+
238+func bd (be) = {
239+ func bf (bg,bh) = ((bg + bh) + ",")
240+
241+ let bi = {
242+ let bj = be
243+ let bk = size(bj)
244+ let bl = ""
245+ func bm (bn,bo) = if ((bo >= bk))
246+ then bn
247+ else bf(bn, bj[bo])
248+
249+ func bp (bn,bo) = if ((bo >= bk))
250+ then bn
249251 else throw("List size exceeds 20")
250252
251- bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
253+ bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
252254 }
253- let bp = dropRight(bh, 1)
254- let bq = if ((take(bp, 1) == ","))
255- then drop(bp, 1)
256- else bp
257- bq
258- }
259-
260-
261-func br (bs) = split(bs, ",")
262-
263-
264-func bt (bd,bu,bv) = if ((size(bd) > bu))
265- then (removeByIndex(bd, 0) :+ bv)
266- else (bd :+ bv)
267-
268-
269-func bw (bx) = valueOrErrorMessage(getInteger(this, bx), ("no value for " + bx))
270-
271-
272-func by (bx,bz) = valueOrElse(getInteger(this, bx), bz)
273-
274-
275-func bA (ak,aj) = {
276- let bg = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
277- bg
278- }
279-
280-
281-func bB (ak,aj) = {
282- let bg = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
283- bg
284- }
285-
286-
287-func bC () = bw(d)
288-
289-
290-func bD () = bw(o)
291-
292-
293-func bE () = bw(q)
294-
295-
296-func bF () = bw(K)
297-
298-
299-func bG () = bw(L)
300-
301-
302-func bH () = by(M, aK)
303-
304-
305-func bI () = by(N, aK)
306-
307-
308-func bJ () = bw(O)
309-
310-
311-func bK () = bw(R)
312-
313-
314-func bL () = bw(S)
315-
316-
317-func bM () = bw(T)
318-
319-
320-func bN () = bw(H)
321-
322-
323-func bO () = bw(p)
324-
325-
326-func bP () = (bO() * aK)
327-
328-
329-func bQ () = (bO() * aI)
330-
331-
332-func bR () = bw(r)
333-
334-
335-func bS () = bw(s)
336-
337-
338-func bT () = bw(t)
339-
340-
341-func bU () = bw(u)
342-
343-
344-func bV () = bw(v)
345-
346-
347-func bW () = bw(w)
348-
349-
350-func bX () = bw(x)
351-
352-
353-func bY () = bw(F)
354-
355-
356-func bZ () = bw(G)
357-
358-
359-func ca () = bw(Q)
360-
361-
362-func cb () = bw(P)
363-
364-
365-func cc () = by(e, 0)
366-
367-
368-func cd () = bw(y)
369-
370-
371-func ce () = bw(z)
372-
373-
374-func cf (cg) = valueOrElse(getString(at(), "k_sender"), toString(cg.caller))
375-
376-
377-func ch (ci,cj,ck) = {
378- let cl = (ci - cj)
379- if (if (ck)
380- then (0 > cl)
255+ let bq = dropRight(bi, 1)
256+ let br = if ((take(bq, 1) == ","))
257+ then drop(bq, 1)
258+ else bq
259+ br
260+ }
261+
262+
263+func bs (bt) = split(bt, ",")
264+
265+
266+func bu (be,bv,bw) = if ((size(be) > bv))
267+ then (removeByIndex(be, 0) :+ bw)
268+ else (be :+ bw)
269+
270+
271+func bx (by) = valueOrErrorMessage(getInteger(this, by), ("no value for " + by))
272+
273+
274+func bz (by,bA) = valueOrElse(getInteger(this, by), bA)
275+
276+
277+func bB (al,ak) = {
278+ let bh = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
279+ bh
280+ }
281+
282+
283+func bC (al,ak) = {
284+ let bh = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
285+ bh
286+ }
287+
288+
289+func bD () = bx(e)
290+
291+
292+func bE () = bx(p)
293+
294+
295+func bF () = bx(r)
296+
297+
298+func bG () = bx(L)
299+
300+
301+func bH () = bx(M)
302+
303+
304+func bI () = bz(N, aL)
305+
306+
307+func bJ () = bz(O, aL)
308+
309+
310+func bK () = bx(P)
311+
312+
313+func bL () = bx(S)
314+
315+
316+func bM () = bx(T)
317+
318+
319+func bN () = bx(U)
320+
321+
322+func bO () = bx(I)
323+
324+
325+func bP () = bx(q)
326+
327+
328+func bQ () = (bP() * aL)
329+
330+
331+func bR () = (bP() * aJ)
332+
333+
334+func bS () = bx(s)
335+
336+
337+func bT () = bx(t)
338+
339+
340+func bU () = bx(u)
341+
342+
343+func bV () = bx(v)
344+
345+
346+func bW () = bx(w)
347+
348+
349+func bX () = bx(x)
350+
351+
352+func bY () = bx(y)
353+
354+
355+func bZ () = bx(G)
356+
357+
358+func ca () = bx(H)
359+
360+
361+func cb () = bx(R)
362+
363+
364+func cc () = bx(Q)
365+
366+
367+func cd () = bz(f, 0)
368+
369+
370+func ce () = bx(z)
371+
372+
373+func cf () = bx(A)
374+
375+
376+func cg (ch) = valueOrElse(getString(au(), "k_sender"), toString(ch.caller))
377+
378+
379+func ci (cj,ck,cl) = {
380+ let cm = (cj - ck)
381+ if (if (cl)
382+ then (0 > cm)
381383 else false)
382384 then throw("Invalid margin")
383- else if (if (!(ck))
384- then (cl >= 0)
385+ else if (if (!(cl))
386+ then (cm >= 0)
385387 else false)
386388 then throw("Invalid margin")
387389 else true
388390 }
389391
390392
391-func cm (cn) = if ((cn == 0))
393+func cn (co) = if ((co == 0))
392394 then throw("Should not be called with _positionSize == 0")
393- else if ((cn > 0))
394- then bY()
395- else bZ()
396-
397-
398-func co (cp) = {
399- let cq = getInteger(this, ai(f, cp))
400- let cr = cq
401- if ($isInstanceOf(cr, "Int"))
395+ else if ((co > 0))
396+ then bZ()
397+ else ca()
398+
399+
400+func cp (cq) = {
401+ let cr = getInteger(this, aj(g, cq))
402+ let cs = cr
403+ if ($isInstanceOf(cs, "Int"))
402404 then {
403- let cs = cr
404- $Tuple4(cs, getIntegerValue(this, ai(g, cp)), getIntegerValue(this, ai(h, cp)), getIntegerValue(this, ai(i, cp)))
405+ let ct = cs
406+ $Tuple4(ct, getIntegerValue(this, aj(h, cq)), getIntegerValue(this, aj(i, cq)), getIntegerValue(this, aj(j, cq)))
405407 }
406408 else $Tuple4(0, 0, 0, 0)
407409 }
408410
409411
410-func ct (cp) = {
411- let cu = getString(this, ai(k, cp))
412- let cr = cu
413- if ($isInstanceOf(cr, "String"))
412+func cu (cq) = {
413+ let cv = getString(this, aj(l, cq))
414+ let cs = cv
415+ if ($isInstanceOf(cs, "String"))
414416 then {
415- let cv = cr
416- cv
417- }
418- else toBase58String(ao())
419- }
420-
421-
422-func cw (cp) = if ((co(cp)._1 == 0))
417+ let cw = cs
418+ cw
419+ }
420+ else toBase58String(ap())
421+ }
422+
423+
424+func cx (cq) = if ((cp(cq)._1 == 0))
423425 then throw("No open position")
424426 else true
425427
426428
427-func cx () = valueOrElse(getBoolean(this, l), false)
428-
429-
430429 func cy () = valueOrElse(getBoolean(this, m), false)
431430
432431
433432 func cz () = valueOrElse(getBoolean(this, n), false)
434433
435434
436-func cA (cB,cC,cD) = if (cB)
435+func cA () = valueOrElse(getBoolean(this, o), false)
436+
437+
438+func cB (cC,cD,cE) = if (cC)
437439 then {
438- let cE = (bG() - cD)
439- if ((0 >= cE))
440+ let cF = (bH() - cE)
441+ if ((0 >= cF))
440442 then throw("Tx lead to base asset reserve <= 0, revert")
441- else $Tuple3((bF() + cC), cE, (bJ() + cD))
443+ else $Tuple3((bG() + cD), cF, (bK() + cE))
442444 }
443445 else {
444- let cF = (bF() - cC)
445- if ((0 >= cF))
446+ let cG = (bG() - cD)
447+ if ((0 >= cG))
446448 then throw("Tx lead to base quote reserve <= 0, revert")
447- else $Tuple3(cF, (bG() + cD), (bJ() - cD))
449+ else $Tuple3(cG, (bH() + cE), (bK() - cE))
448450 }
449451
450452
451-func cG (cH,cI,cJ,cK) = {
452- let cL = toBigInt(cH)
453+func cH (cI,cJ,cK,cL) = {
453454 let cM = toBigInt(cI)
454455 let cN = toBigInt(cJ)
455456 let cO = toBigInt(cK)
456- aX(aX(cL, cM), aX(cN, cO))
457- }
458-
459-
460-func cP (cB,cC) = {
461- let cH = bF()
462- let cJ = bG()
463- let cI = bH()
464- let cK = bI()
465- let bx = cG(cH, cI, cJ, cK)
466- let cQ = if (cB)
467- then (cH + cC)
468- else (cH - cC)
469- let cR = toInt(aW(bx, toBigInt(aT(cQ, cI))))
470- let cS = aR(ba((cR - cJ)), cI)
471- let cT = if (cB)
472- then cS
473- else -(cS)
474- let cU = cA(cB, cC, cS)
475- let cV = cU._1
476- let cW = cU._2
477- let cX = cU._3
478- let cY = aR(aT(cH, cI), aT(cJ, cK))
479- let cZ = aR(cC, cS)
480- let da = ba((cY - cZ))
481- let db = (aK - aR(cY, (cY + da)))
482- let dc = bV()
483- if ((db > dc))
484- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(cH)) + " before base asset: ") + toString(cJ)) + " quote asset amount to exchange: ") + toString(cC)) + " price before: ") + toString(cY)) + " marketPrice: ") + toString(cZ)))
485- else $Tuple4(cT, cV, cW, cX)
486- }
487-
488-
489-func dd (de,df,dg,dh) = {
490- let di = if ((de != 0))
457+ let cP = toBigInt(cL)
458+ aY(aY(cM, cN), aY(cO, cP))
459+ }
460+
461+
462+func cQ (cC,cD) = {
463+ let cI = bG()
464+ let cK = bH()
465+ let cJ = bI()
466+ let cL = bJ()
467+ let by = cH(cI, cJ, cK, cL)
468+ let cR = if (cC)
469+ then (cI + cD)
470+ else (cI - cD)
471+ let cS = toInt(aX(by, toBigInt(aU(cR, cJ))))
472+ let cT = aS(bb((cS - cK)), cJ)
473+ let cU = if (cC)
474+ then cT
475+ else -(cT)
476+ let cV = cB(cC, cD, cT)
477+ let cW = cV._1
478+ let cX = cV._2
479+ let cY = cV._3
480+ let cZ = aS(aU(cI, cJ), aU(cK, cL))
481+ let da = aS(cD, cT)
482+ let db = bb((cZ - da))
483+ let dc = (aL - aS(cZ, (cZ + db)))
484+ let dd = bW()
485+ if ((dc > dd))
486+ then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(cI)) + " before base asset: ") + toString(cK)) + " quote asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cZ)) + " marketPrice: ") + toString(da)))
487+ else $Tuple4(cU, cW, cX, cY)
488+ }
489+
490+
491+func de (df,dg,dh,di) = {
492+ let dj = if ((df != 0))
491493 then {
492- let dj = cm(de)
493- aT((dj - dg), de)
494+ let dk = cn(df)
495+ aU((dk - dh), df)
494496 }
495497 else 0
496- let dk = ((dh - di) + df)
497- let dl = if ((0 > dk))
498- then $Tuple2(0, ba(dk))
499- else $Tuple2(ba(dk), 0)
500- let dm = dl._1
501- let dn = dl._2
502- $Tuple3(dm, dn, di)
503- }
504-
505-
506-func do (cB,cD,dp,dq,dr,ds,dt) = {
507- let cY = aR(aT(dq, dr), aT(ds, dt))
508- if ((cD == 0))
498+ let dl = ((di - dj) + dg)
499+ let dm = if ((0 > dl))
500+ then $Tuple2(0, bb(dl))
501+ else $Tuple2(bb(dl), 0)
502+ let dn = dm._1
503+ let do = dm._2
504+ $Tuple3(dn, do, dj)
505+ }
506+
507+
508+func dp (cC,cE,dq,dr,ds,dt,du) = {
509+ let cZ = aS(aU(dr, ds), aU(dt, du))
510+ if ((cE == 0))
509511 then throw("Invalid base asset amount")
510512 else {
511- let bx = cG(dq, dr, ds, dt)
512- let du = if (cB)
513- then (ds + cD)
514- else (ds - cD)
515- let dv = toInt(aW(bx, toBigInt(aT(du, dt))))
516- let dw = ba((dv - aT(dq, dr)))
517- let dc = bV()
518- let dx = cA(!(cB), dw, cD)
519- let cV = dx._1
520- let cW = dx._2
521- let cX = dx._3
522- let cZ = aR(dw, cD)
523- let da = ba((cY - cZ))
524- let db = (aK - aR(cY, (cY + da)))
525- if (if ((db > dc))
526- then dp
513+ let by = cH(dr, ds, dt, du)
514+ let dv = if (cC)
515+ then (dt + cE)
516+ else (dt - cE)
517+ let dw = toInt(aX(by, toBigInt(aU(dv, du))))
518+ let dx = bb((dw - aU(dr, ds)))
519+ let dd = bW()
520+ let dy = cB(!(cC), dx, cE)
521+ let cW = dy._1
522+ let cX = dy._2
523+ let cY = dy._3
524+ let da = aS(dx, cE)
525+ let db = bb((cZ - da))
526+ let dc = (aL - aS(cZ, (cZ + db)))
527+ if (if ((dc > dd))
528+ then dq
527529 else false)
528- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(dq)) + " before base asset: ") + toString(ds)) + " base asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cY)) + " market price: ") + toString(cZ)))
529- else $Tuple7(dw, cV, cW, cX, (cb() - (if (cB)
530- then ba(cD)
531- else 0)), (ca() - (if (!(cB))
532- then ba(cD)
533- else 0)), db)
534- }
535- }
536-
537-
538-func dy (cB,cD,dp) = do(cB, cD, dp, bF(), bH(), bG(), bI())
539-
540-
541-func dz () = {
542- let dA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
543- let dB = getStringValue(this, a)
544- let dC = valueOrErrorMessage(getInteger(dA, dB), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + dB))
545- let dD = valueOrElse(getString(this, b), "")
546- if ((dD != ""))
530+ then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(dr)) + " before base asset: ") + toString(dt)) + " base asset amount to exchange: ") + toString(cE)) + " price before: ") + toString(cZ)) + " market price: ") + toString(da)))
531+ else $Tuple7(dx, cW, cX, cY, (cc() - (if (cC)
532+ then bb(cE)
533+ else 0)), (cb() - (if (!(cC))
534+ then bb(cE)
535+ else 0)), dc)
536+ }
537+ }
538+
539+
540+func dz (cC,cE,dq) = dp(cC, cE, dq, bG(), bI(), bH(), bJ())
541+
542+
543+func dA () = {
544+ let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
545+ let dC = getStringValue(this, a)
546+ let dD = valueOrErrorMessage(getInteger(dB, dC), ((("Can not get oracle price. Oracle: " + toString(dB)) + " key: ") + dC))
547+ let dE = valueOrElse(getString(this, b), "")
548+ if ((dE != ""))
547549 then {
548- let dE = lastBlock.height
549- let dF = valueOrErrorMessage(getInteger(dA, dD), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + dD))
550- if (((dE - dF) > ce()))
551- then throw(((("Oracle stale data. Last oracle block: " + toString(dF)) + " current block: ") + toString(dE)))
552- else dC
553- }
554- else dC
555- }
556-
557-
558-func dG (dH,dq,ds,cI,cK) = {
559- let dI = aR(aT(dq, cI), aT(ds, cK))
560- let dJ = aR((dH + dI), (2 * aK))
561- let dG = aR(ba((dH - dI)), dJ)
562- dG
563- }
564-
565-
566-func dK (dq,ds) = {
567- let dL = dz()
568- let cI = bH()
569- let cK = bI()
570- let dM = dG(dL, bF(), bG(), cI, cK)
571- let dN = dG(dL, dq, ds, cI, cK)
572- if (if ((dN > bW()))
573- then (dN > dM)
550+ let dF = lastBlock.height
551+ let dG = valueOrErrorMessage(getInteger(dB, dE), ((("Can not get oracle block. Oracle: " + toString(dB)) + " key: ") + dE))
552+ if (((dF - dG) > cf()))
553+ then throw(((("Oracle stale data. Last oracle block: " + toString(dG)) + " current block: ") + toString(dF)))
554+ else dD
555+ }
556+ else dD
557+ }
558+
559+
560+func dH () = {
561+ let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
562+ let dI = valueOrElse(getString(this, c), "")
563+ if ((dI != ""))
564+ then {
565+ let dJ = valueOrErrorMessage(getBoolean(dB, dI), ((("Can not get oracle is open/closed. Oracle: " + toString(dB)) + " key: ") + dI))
566+ !(dJ)
567+ }
568+ else false
569+ }
570+
571+
572+func dK (dL,dr,dt,cJ,cL) = {
573+ let dM = aS(aU(dr, cJ), aU(dt, cL))
574+ let dN = aS((dL + dM), (2 * aL))
575+ let dK = aS(bb((dL - dM)), dN)
576+ dK
577+ }
578+
579+
580+func dO (dr,dt) = {
581+ let dP = dA()
582+ let cJ = bI()
583+ let cL = bJ()
584+ let dQ = dK(dP, bG(), bH(), cJ, cL)
585+ let dR = dK(dP, dr, dt, cJ, cL)
586+ if (if ((dR > bX()))
587+ then (dR > dQ)
574588 else false)
575- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bW())))
589+ then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bX())))
576590 else true
577591 }
578592
579593
580-func dO (dP,dQ) = {
581- let dR = bX()
582- if ((dP > dR))
583- then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
584- else if ((dQ > dR))
585- then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
594+func dS (dT,dU) = {
595+ let dV = bY()
596+ if ((dT > dV))
597+ then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
598+ else if ((dU > dV))
599+ then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
586600 else true
587601 }
588602
589603
590-func dS () = {
591- let dq = bF()
592- let ds = bG()
593- let cI = bH()
594- let cK = bI()
595- aR(aT(dq, cI), aT(ds, cK))
596- }
597-
598-
599-func dT () = {
600- let dL = dz()
601- let dU = dS()
602- (aR(ba((dL - dU)), dL) > bU())
603- }
604-
605-
606-func dV (cn,dW,dq,dr,ds,dt) = {
607- let dX = ba(cn)
608- let dY = (0 > cn)
609- let dZ = if ((dW == aN))
604+func dW () = {
605+ let dr = bG()
606+ let dt = bH()
607+ let cJ = bI()
608+ let cL = bJ()
609+ aS(aU(dr, cJ), aU(dt, cL))
610+ }
611+
612+
613+func dX () = {
614+ let dP = dA()
615+ let dY = dW()
616+ (aS(bb((dP - dY)), dP) > bV())
617+ }
618+
619+
620+func dZ (co,ea,dr,ds,dt,du) = {
621+ let eb = bb(co)
622+ let ec = (0 > co)
623+ let ed = if ((ea == aO))
610624 then {
611- let ea = do(!(dY), dX, false, dq, dr, ds, dt)
612- let eb = ea._1
613- let ec = ea._2
614- let ed = ea._3
615- let ee = ea._4
616- eb
617- }
618- else aT(dX, dz())
619- dZ
620- }
621-
622-
623-func ef (cn,eg,dq,dr,ds,dt,dW) = if ((cn == 0))
625+ let ee = dp(!(ec), eb, false, dr, ds, dt, du)
626+ let ef = ee._1
627+ let eg = ee._2
628+ let eh = ee._3
629+ let ei = ee._4
630+ ef
631+ }
632+ else aU(eb, dA())
633+ ed
634+ }
635+
636+
637+func ej (co,ek,dr,ds,dt,du,ea) = if ((co == 0))
624638 then throw("Invalid position size")
625639 else {
626- let dY = (0 > cn)
627- let dZ = dV(cn, dW, dq, dr, ds, dt)
628- let eh = if (dY)
629- then (eg - dZ)
630- else (dZ - eg)
631- $Tuple2(dZ, eh)
640+ let ec = (0 > co)
641+ let ed = dZ(co, ea, dr, ds, dt, du)
642+ let el = if (ec)
643+ then (ek - ed)
644+ else (ed - ek)
645+ $Tuple2(ed, el)
632646 }
633647
634648
635-func ei (cp,dW) = {
636- let ej = co(cp)
637- let cs = ej._1
638- let ek = ej._2
639- let el = ej._3
640- let em = ej._4
641- ef(cs, el, bF(), bH(), bG(), bI(), dW)
642- }
643-
644-
645-func en (eo,ep,eq) = aR((eo - ep), eq)
646-
647-
648-func er (cp,dW) = {
649- let es = co(cp)
650- let cs = es._1
651- let ek = es._2
652- let et = es._3
653- let em = es._4
654- let eu = ei(cp, dW)
655- let dZ = eu._1
656- let eh = eu._2
657- let ev = dd(cs, ek, em, eh)
658- let dm = ev._1
659- let dn = ev._2
660- en(dm, dn, dZ)
661- }
662-
663-
664-func ew (cp) = er(cp, aN)
665-
666-
667-func ex (cp,cn) = {
668- let ey = bb(bT(), (aK - aR(ew(cp), bR())))
669- let ez = aT(ba(cn), ey)
670- let eA = dy((cn > 0), ez, false)
671- let eB = eA._1
672- let db = eA._7
673- if ((bV() > db))
674- then eB
649+func em (cq,ea) = {
650+ let en = cp(cq)
651+ let ct = en._1
652+ let eo = en._2
653+ let ep = en._3
654+ let eq = en._4
655+ ej(ct, ep, bG(), bI(), bH(), bJ(), ea)
656+ }
657+
658+
659+func er (es,et,eu) = aS((es - et), eu)
660+
661+
662+func ev (cq,ea) = {
663+ let ew = cp(cq)
664+ let ct = ew._1
665+ let eo = ew._2
666+ let ex = ew._3
667+ let eq = ew._4
668+ let ey = em(cq, ea)
669+ let ed = ey._1
670+ let el = ey._2
671+ let ez = de(ct, eo, eq, el)
672+ let dn = ez._1
673+ let do = ez._2
674+ er(dn, do, ed)
675+ }
676+
677+
678+func eA (cq) = ev(cq, aO)
679+
680+
681+func eB (cq,co) = {
682+ let eC = bc(bU(), (aL - aS(eA(cq), bS())))
683+ let eD = aU(bb(co), eC)
684+ let eE = dz((co > 0), eD, false)
685+ let eF = eE._1
686+ let dc = eE._7
687+ if ((bW() > dc))
688+ then eF
675689 else {
676- let eC = aT(ba(cn), bT())
677- let eD = dy((cn > 0), eC, false)._1
678- eD
679- }
680- }
681-
682-
683-func eE (cp,dp) = {
684- let eF = co(cp)
685- let cs = eF._1
686- let ek = eF._2
687- let el = eF._3
688- let em = eF._4
689- let eh = ei(cp, aN)._2
690- let eG = dd(cs, ek, em, eh)
691- let dm = eG._1
692- let dn = eG._2
693- let eC = -(cs)
694- let eH = eh
695- let eI = -(dm)
696- let eJ = dy((cs > 0), ba(cs), dp)
697- let eD = eJ._1
698- let cQ = eJ._2
699- let cR = eJ._3
700- let eK = eJ._4
701- let eL = eJ._5
702- let eM = eJ._6
703- let eN = (bK() - el)
704- $Tuple13(eC, dn, eH, eI, cQ, cR, eK, eN, eD, eL, eM, (bM() - (if ((cs > 0))
705- then el
706- else 0)), (bL() - (if ((0 > cs))
707- then el
690+ let eG = aU(bb(co), bU())
691+ let eH = dz((co > 0), eG, false)._1
692+ eH
693+ }
694+ }
695+
696+
697+func eI (cq,dq) = {
698+ let eJ = cp(cq)
699+ let ct = eJ._1
700+ let eo = eJ._2
701+ let ep = eJ._3
702+ let eq = eJ._4
703+ let el = em(cq, aO)._2
704+ let eK = de(ct, eo, eq, el)
705+ let dn = eK._1
706+ let do = eK._2
707+ let eG = -(ct)
708+ let eL = el
709+ let eM = -(dn)
710+ let eN = dz((ct > 0), bb(ct), dq)
711+ let eH = eN._1
712+ let cR = eN._2
713+ let cS = eN._3
714+ let eO = eN._4
715+ let eP = eN._5
716+ let eQ = eN._6
717+ let eR = (bL() - ep)
718+ $Tuple13(eG, do, eL, eM, cR, cS, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
719+ then ep
720+ else 0)), (bM() - (if ((0 > ct))
721+ then ep
708722 else 0)))
709723 }
710724
711725
712-func eO () = {
713- let eP = ((lastBlock.timestamp / 1000) / 60)
714- let eQ = (eP - aG)
715- let eR = valueOrElse(getString(this, A), "")
716- let eS = split(eR, ",")
717- func eT (bf,eU) = if ((eQ >= parseIntValue(eU)))
718- then (bf :+ parseIntValue(eU))
719- else bf
720-
721- let eV = {
722- let bi = eS
723- let bj = size(bi)
724- let bk = nil
725- func bl (bm,bn) = if ((bn >= bj))
726- then bm
727- else eT(bm, bi[bn])
728-
729- func bo (bm,bn) = if ((bn >= bj))
730- then bm
726+func eS () = {
727+ let eT = ((lastBlock.timestamp / 1000) / 60)
728+ let eU = (eT - aH)
729+ let eV = valueOrElse(getString(this, B), "")
730+ let eW = split(eV, ",")
731+ func eX (bg,eY) = if ((eU >= parseIntValue(eY)))
732+ then (bg :+ parseIntValue(eY))
733+ else bg
734+
735+ let eZ = {
736+ let bj = eW
737+ let bk = size(bj)
738+ let bl = nil
739+ func bm (bn,bo) = if ((bo >= bk))
740+ then bn
741+ else eX(bn, bj[bo])
742+
743+ func bp (bn,bo) = if ((bo >= bk))
744+ then bn
731745 else throw("List size exceeds 20")
732746
733- bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
747+ bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
734748 }
735- let eW = if ((size(eV) > 0))
736- then max(eV)
737- else parseIntValue(eS[0])
738- let eX = valueOrElse(getInteger(this, B), 0)
739- let eY = valueOrElse(getInteger(this, ((C + "_") + toString(eX))), 0)
740- let eZ = valueOrElse(getInteger(this, ((D + "_") + toString(eX))), 0)
741- let fa = (eY + ((eP - eX) * eZ))
742- let fb = valueOrElse(getInteger(this, ((C + "_") + toString(eW))), 0)
743- let fc = valueOrElse(getInteger(this, ((D + "_") + toString(eW))), 0)
744- let fd = (fb + ((eQ - eW) * fc))
745- ((fa - fd) / aG)
746- }
747-
748-
749-func fe () = {
750- let cn = bJ()
751- if ((cn == 0))
752- then $Tuple2(bF(), bG())
749+ let fa = if ((size(eZ) > 0))
750+ then max(eZ)
751+ else parseIntValue(eW[0])
752+ let fb = valueOrElse(getInteger(this, C), 0)
753+ let fc = valueOrElse(getInteger(this, ((D + "_") + toString(fb))), 0)
754+ let fd = valueOrElse(getInteger(this, ((E + "_") + toString(fb))), 0)
755+ let fe = (fc + ((eT - fb) * fd))
756+ let ff = valueOrElse(getInteger(this, ((D + "_") + toString(fa))), 0)
757+ let fg = valueOrElse(getInteger(this, ((E + "_") + toString(fa))), 0)
758+ let fh = (ff + ((eU - fa) * fg))
759+ ((fe - fh) / aH)
760+ }
761+
762+
763+func fi () = {
764+ let co = bK()
765+ if ((co == 0))
766+ then $Tuple2(bG(), bH())
753767 else {
754- let ff = (cn > 0)
755- let fg = dy(ff, ba(cn), false)
756- let fh = fg._1
757- let fi = fg._2
758- let fj = fg._3
759- $Tuple2(fi, fj)
760- }
761- }
762-
763-
764-func fk (fl,bJ,fm,fn) = {
765- let fo = toBigInt(fl)
766- let fp = toBigInt(bJ)
767- let fq = toBigInt(fm)
768- let fr = toBigInt(fn)
769- let fs = aZ((fo + fp), toBigInt((2 * aK)))
770- let ft = aX(fq, fs)
771- let fu = (toBigInt(4) * aX(fr, fp))
772- let fv = aY(aX(ft, (fq - fu)))
773- let fw = aX(fo, fq)
774- let fx = aX(fq, fp)
775- let fy = ((-(fv) + fw) + fx)
776- let fz = (toBigInt(2) * aX(fq, fp))
777- let fA = aW(fy, fz)
778- toInt(fA)
779- }
780-
781-
782-func fB (fC,cH,cJ) = {
783- let cn = bJ()
784- if ((cn == 0))
768+ let fj = (co > 0)
769+ let fk = dz(fj, bb(co), false)
770+ let fl = fk._1
771+ let fm = fk._2
772+ let fn = fk._3
773+ $Tuple2(fm, fn)
774+ }
775+ }
776+
777+
778+func fo (fp,bK,fq,fr) = {
779+ let fs = toBigInt(fp)
780+ let ft = toBigInt(bK)
781+ let fu = toBigInt(fq)
782+ let fv = toBigInt(fr)
783+ let fw = ba((fs + ft), toBigInt((2 * aL)))
784+ let fx = aY(fu, fw)
785+ let fy = (toBigInt(4) * aY(fv, ft))
786+ let fz = aZ(aY(fx, (fu - fy)))
787+ let fA = aY(fs, fu)
788+ let fB = aY(fu, ft)
789+ let fC = ((-(fz) + fA) + fB)
790+ let fD = (toBigInt(2) * aY(fu, ft))
791+ let fE = aX(fC, fD)
792+ toInt(fE)
793+ }
794+
795+
796+func fF (fG,cI,cK) = {
797+ let co = bK()
798+ if ((co == 0))
785799 then {
786- let fD = aR(aT(fC, cJ), cH)
787- $Tuple3(fD, aK, 0)
800+ let fH = aS(aU(fG, cK), cI)
801+ $Tuple3(fH, aL, 0)
788802 }
789803 else {
790- let ff = (cn > 0)
791- let fh = dy(ff, ba(cn), false)._1
792- let fD = fk(cJ, cn, cH, fC)
793- let fE = aK
794- let eI = ef(cn, fh, cH, fD, cJ, fE, aN)._2
795- $Tuple3(fD, fE, eI)
796- }
797- }
798-
799-
800-func fF () = {
801- let fG = dz()
802- let fH = eO()
803- let fI = (fH - fG)
804- if (if ((ca() == 0))
804+ let fj = (co > 0)
805+ let fl = dz(fj, bb(co), false)._1
806+ let fH = fo(cK, co, cI, fG)
807+ let fI = aL
808+ let eM = ej(co, fl, cI, fH, cK, fI, aO)._2
809+ $Tuple3(fH, fI, eM)
810+ }
811+ }
812+
813+
814+func fJ () = {
815+ let fK = dA()
816+ let fL = eS()
817+ let fM = (fL - fK)
818+ if (if (if ((cb() == 0))
805819 then true
806- else (cb() == 0))
820+ else (cc() == 0))
821+ then true
822+ else dH())
807823 then $Tuple2(0, 0)
808- else if ((0 > fI))
824+ else if ((0 > fM))
809825 then {
810- let fJ = aR(aT(fI, bP()), aL)
811- let fK = aR(aT(fJ, ca()), cb())
812- $Tuple2(fJ, fK)
826+ let fN = aS(aU(fM, bQ()), aM)
827+ let fO = aS(aU(fN, cb()), cc())
828+ $Tuple2(fN, fO)
813829 }
814830 else {
815- let fK = aR(aT(fI, bP()), aL)
816- let fJ = aR(aT(fK, cb()), ca())
817- $Tuple2(fJ, fK)
831+ let fO = aS(aU(fM, bQ()), aM)
832+ let fN = aS(aU(fO, cc()), cb())
833+ $Tuple2(fN, fO)
818834 }
819835 }
820836
821837
822-func fL (fM,fN) = {
823- let fO = bD()
824- let fP = aT(fO, fN)
825- let fQ = if ((fM != ""))
838+func fP (fQ,fR) = {
839+ let fS = bE()
840+ let fT = aU(fS, fR)
841+ let fU = if ((fQ != ""))
826842 then {
827- let fR = bA(av(), ai(aC, fM))
828- if ((fR == aD))
843+ let fV = bB(aw(), aj(aD, fQ))
844+ if ((fV == aE))
829845 then {
830- let fS = bB(av(), ai(aB, fM))
831- let fT = aT(fP, fS)
832- $Tuple2(fT, true)
846+ let fW = bC(aw(), aj(aC, fQ))
847+ let fX = aU(fT, fW)
848+ $Tuple2(fX, true)
833849 }
834850 else throw("Invalid attached artifact")
835851 }
836- else $Tuple2(fP, false)
837- let fT = fQ._1
838- let fU = fQ._2
839- $Tuple2(fT, fU)
840- }
841-
842-
843-func fV (cp,aA) = {
844- let fW = co(cp)._1
845- if ((fW == 0))
852+ else $Tuple2(fT, false)
853+ let fX = fU._1
854+ let fY = fU._2
855+ $Tuple2(fX, fY)
856+ }
857+
858+
859+func fZ (cq,aB) = {
860+ let ga = cp(cq)._1
861+ if ((ga == 0))
846862 then true
847- else (ct(cp) == aA)
848- }
849-
850-
851-func fX (cp,aA) = (ct(cp) == aA)
852-
853-
854-func fY (fZ,aA,cp) = ((((((ah + "_") + fZ) + "_") + aA) + "_") + cp)
855-
856-
857-func ga (cp) = {
858- let cv = ct(cp)
859- if ((cv == toBase58String(ao())))
860- then $Tuple2(0, cv)
863+ else (cu(cq) == aB)
864+ }
865+
866+
867+func gb (cq,aB) = (cu(cq) == aB)
868+
869+
870+func gc (gd,aB,cq) = ((((((ai + "_") + gd) + "_") + aB) + "_") + cq)
871+
872+
873+func ge (cq) = {
874+ let cw = cu(cq)
875+ if ((cw == toBase58String(ap())))
876+ then $Tuple2(0, cw)
861877 else {
862- let gb = fY(toString(this), cv, cp)
863- let gc = valueOrElse(getInteger(aw(), gb), 0)
864- $Tuple2(gc, cv)
865- }
866- }
867-
868-
869-func gd (cp,fM) = {
870- let ge = invoke(as(), "computeFeeDiscount", [cp], nil)
871- if ((ge == ge))
878+ let gf = gc(toString(this), cw, cq)
879+ let gg = valueOrElse(getInteger(ax(), gf), 0)
880+ $Tuple2(gg, cw)
881+ }
882+ }
883+
884+
885+func gh (cq,fQ) = {
886+ let gi = invoke(at(), "computeFeeDiscount", [cq], nil)
887+ if ((gi == gi))
872888 then {
873- let gf = {
874- let cr = ge
875- if ($isInstanceOf(cr, "Int"))
889+ let gj = {
890+ let cs = gi
891+ if ($isInstanceOf(cs, "Int"))
876892 then {
877- let gg = cr
878- gg
893+ let gk = cs
894+ gk
879895 }
880896 else throw("Invalid computeFeeDiscount result")
881897 }
882- let gh = fL(fM, gf)
883- let fT = gh._1
884- let fU = gh._2
885- $Tuple2(fT, fU)
898+ let gl = fP(fQ, gj)
899+ let fX = gl._1
900+ let fY = gl._2
901+ $Tuple2(fX, fY)
886902 }
887903 else throw("Strict value is not equal to itself.")
888904 }
889905
890906
891-func gi (cg) = {
892- let gj = if ((size(cg.payments) > 1))
893- then toBase58String(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifactId"))
907+func gm (ch) = {
908+ let gn = if ((size(ch.payments) > 1))
909+ then toBase58String(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifactId"))
894910 else ""
895- gj
896- }
897-
898-
899-func gk (gl) = {
900- let gm = aT(gl, cd())
901- let gn = (gl - gm)
902- $Tuple2(gm, gn)
903- }
904-
905-
906-func go (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = [IntegerEntry(q, gp), IntegerEntry(r, gq), IntegerEntry(s, gr), IntegerEntry(p, gs), IntegerEntry(o, gt), IntegerEntry(u, gu), IntegerEntry(v, gv), IntegerEntry(t, gw), IntegerEntry(w, gx), IntegerEntry(x, dR), IntegerEntry(y, gy), IntegerEntry(z, gy)]
907-
908-
909-func gA (gB,gC,gD,gE,gF) = [IntegerEntry(H, gB), IntegerEntry(F, gC), IntegerEntry(G, gD), IntegerEntry(I, gE), IntegerEntry(J, gF)]
910-
911-
912-func gG (ak,aA) = [StringEntry(ai(k, ak), aA)]
913-
914-
915-func gH (gI,ak) = if (gI)
911+ gn
912+ }
913+
914+
915+func go (gp) = {
916+ let gq = aU(gp, ce())
917+ let gr = (gp - gq)
918+ $Tuple2(gq, gr)
919+ }
920+
921+
922+func gs (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = [IntegerEntry(r, gt), IntegerEntry(s, gu), IntegerEntry(t, gv), IntegerEntry(q, gw), IntegerEntry(p, gx), IntegerEntry(v, gy), IntegerEntry(w, gz), IntegerEntry(u, gA), IntegerEntry(x, gB), IntegerEntry(y, dV), IntegerEntry(z, gC), IntegerEntry(A, gC)]
923+
924+
925+func gE (gF,gG,gH,gI,gJ) = [IntegerEntry(I, gF), IntegerEntry(G, gG), IntegerEntry(H, gH), IntegerEntry(J, gI), IntegerEntry(K, gJ)]
926+
927+
928+func gK (al,aB) = [StringEntry(aj(l, al), aB)]
929+
930+
931+func gL (gM,al) = if (gM)
916932 then {
917- let gJ = cc()
918-[IntegerEntry(ai(j, ak), (gJ + 1)), IntegerEntry(e, (gJ + 1))]
933+ let gN = cd()
934+[IntegerEntry(aj(k, al), (gN + 1)), IntegerEntry(f, (gN + 1))]
919935 }
920936 else nil
921937
922938
923-func gK (ak,gL,gM,gN,dj) = [IntegerEntry(ai(f, ak), gL), IntegerEntry(ai(g, ak), gM), IntegerEntry(ai(h, ak), gN), IntegerEntry(ai(i, ak), dj)]
924-
925-
926-func gO (gP) = {
927- let eP = ((lastBlock.timestamp / 1000) / 60)
928- let gQ = valueOrElse(getInteger(this, B), 0)
929- if ((gQ > eP))
939+func gO (al,gP,gQ,gR,dk) = [IntegerEntry(aj(g, al), gP), IntegerEntry(aj(h, al), gQ), IntegerEntry(aj(i, al), gR), IntegerEntry(aj(j, al), dk)]
940+
941+
942+func gS (gT) = {
943+ let eT = ((lastBlock.timestamp / 1000) / 60)
944+ let gU = valueOrElse(getInteger(this, C), 0)
945+ if ((gU > eT))
930946 then throw("TWAP out-of-order")
931947 else {
932- let eX = if ((gQ == 0))
933- then eP
934- else gQ
935- if ((eP > gQ))
948+ let fb = if ((gU == 0))
949+ then eT
950+ else gU
951+ if ((eT > gU))
936952 then {
937- let gR = valueOrElse(getInteger(this, ((C + "_") + toString(gQ))), 0)
938- let gS = valueOrElse(getInteger(this, ((D + "_") + toString(gQ))), gP)
939- let gT = (gR + ((eP - eX) * gS))
940- let eS = bt(br(valueOrElse(getString(this, A), "")), aG, toString(eP))
941-[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP), IntegerEntry(ai(E, toString(eP)), gQ), IntegerEntry(B, eP), StringEntry(A, bc(eS))]
953+ let gV = valueOrElse(getInteger(this, ((D + "_") + toString(gU))), 0)
954+ let gW = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), gT)
955+ let gX = (gV + ((eT - fb) * gW))
956+ let eW = bu(bs(valueOrElse(getString(this, B), "")), aH, toString(eT))
957+[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT), IntegerEntry(aj(F, toString(eT)), gU), IntegerEntry(C, eT), StringEntry(B, bd(eW))]
942958 }
943959 else {
944- let gU = valueOrElse(getInteger(this, ai(E, toString(eP))), 0)
945- let gR = valueOrElse(getInteger(this, ai(C, toString(gU))), 0)
946- let gS = valueOrElse(getInteger(this, ai(D, toString(gU))), gP)
947- let gT = (gR + ((eP - gU) * gS))
948-[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP)]
960+ let gY = valueOrElse(getInteger(this, aj(F, toString(eT))), 0)
961+ let gV = valueOrElse(getInteger(this, aj(D, toString(gY))), 0)
962+ let gW = valueOrElse(getInteger(this, aj(E, toString(gY))), gT)
963+ let gX = (gV + ((eT - gY) * gW))
964+[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT)]
949965 }
950966 }
951967 }
952968
953969
954-func gV (cH,cJ) = [IntegerEntry(K, cH), IntegerEntry(L, cJ)]
955-
956-
957-func gW (cI,cK) = [IntegerEntry(M, cI), IntegerEntry(N, cK)]
958-
959-
960-func gX (cH,cJ,gY,gZ,ha,hb,hc,hd) = {
961- let cI = bH()
962- let cK = bI()
963- if (((ha - hb) != gY))
964- then throw(((((("Invalid AMM state data: " + toString(ha)) + " + ") + toString(hb)) + " != ") + toString(gY)))
965- else ((gV(cH, cJ) ++ [IntegerEntry(O, gY), IntegerEntry(R, gZ), IntegerEntry(P, ha), IntegerEntry(Q, hb), IntegerEntry(T, hc), IntegerEntry(S, hd)]) ++ gO(aR(aT(cH, cI), aT(cJ, cK))))
966- }
967-
968-
969-func he (ak) = [DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(i, ak)), DeleteEntry(ai(k, ak))]
970-
971-
972-func hf (ak,hg) = {
973- let hh = assetBalance(this, ao())
974- if ((hg > hh))
975- then throw(((("Unable to withdraw " + toString(hg)) + " from contract balance ") + toString(hh)))
976- else [ScriptTransfer(ak, hg, ao())]
977- }
978-
979-
980-func hi (cg) = if ((0 > cg))
970+func gZ (cI,cK) = [IntegerEntry(L, cI), IntegerEntry(M, cK)]
971+
972+
973+func ha (cJ,cL) = [IntegerEntry(N, cJ), IntegerEntry(O, cL)]
974+
975+
976+func hb (cI,cK,hc,hd,he,hf,hg,hh) = {
977+ let cJ = bI()
978+ let cL = bJ()
979+ if (((he - hf) != hc))
980+ then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
981+ else ((gZ(cI, cK) ++ [IntegerEntry(P, hc), IntegerEntry(S, hd), IntegerEntry(Q, he), IntegerEntry(R, hf), IntegerEntry(U, hg), IntegerEntry(T, hh)]) ++ gS(aS(aU(cI, cJ), aU(cK, cL))))
982+ }
983+
984+
985+func hi (al) = [DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(i, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(l, al))]
986+
987+
988+func hj (al,hk) = {
989+ let hl = assetBalance(this, ap())
990+ if ((hk > hl))
991+ then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
992+ else [ScriptTransfer(al, hk, ap())]
993+ }
994+
995+
996+func hm (ch) = if ((0 > ch))
981997 then throw("Balance")
982- else [IntegerEntry(d, cg)]
983-
984-
985-func hj (cg) = [ScriptTransfer(aq(), cg, ao())]
986-
987-
988-func hk (hl,cg) = if (hl)
989- then [Burn(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifact"), 1)]
998+ else [IntegerEntry(e, ch)]
999+
1000+
1001+func hn (ch) = [ScriptTransfer(ar(), ch, ap())]
1002+
1003+
1004+func ho (hp,ch) = if (hp)
1005+ then [Burn(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifact"), 1)]
9901006 else nil
9911007
9921008
993-@Callable(cg)
994-func pause () = if ((cg.caller != am()))
1009+@Callable(ch)
1010+func pause () = if ((ch.caller != an()))
9951011 then throw("Invalid pause params")
996- else [BooleanEntry(m, true)]
997-
998-
999-
1000-@Callable(cg)
1001-func unpause () = if ((cg.caller != am()))
1012+ else [BooleanEntry(n, true)]
1013+
1014+
1015+
1016+@Callable(ch)
1017+func unpause () = if ((ch.caller != an()))
10021018 then throw("Invalid unpause params")
1003- else [BooleanEntry(m, false)]
1004-
1005-
1006-
1007-@Callable(cg)
1008-func setCloseOnly () = if ((cg.caller != am()))
1019+ else [BooleanEntry(n, false)]
1020+
1021+
1022+
1023+@Callable(ch)
1024+func setCloseOnly () = if ((ch.caller != an()))
10091025 then throw("Invalid setCloseOnly params")
1010- else [BooleanEntry(n, true)]
1011-
1012-
1013-
1014-@Callable(cg)
1015-func unsetCloseOnly () = if ((cg.caller != am()))
1026+ else [BooleanEntry(o, true)]
1027+
1028+
1029+
1030+@Callable(ch)
1031+func unsetCloseOnly () = if ((ch.caller != an()))
10161032 then throw("Invalid unsetCloseOnly params")
1017- else [BooleanEntry(n, false)]
1018-
1019-
1020-
1021-@Callable(cg)
1022-func addLiquidity (cC) = if (if ((cg.caller != am()))
1033+ else [BooleanEntry(o, false)]
1034+
1035+
1036+
1037+@Callable(ch)
1038+func addLiquidity (cD) = if (if ((ch.caller != an()))
10231039 then true
1024- else (0 >= cC))
1040+ else (0 >= cD))
10251041 then throw("Invalid addLiquidity params")
10261042 else {
1027- let cH = bF()
1028- let cJ = bG()
1029- let cI = bH()
1030- let cK = bI()
1031- let hm = aR(aT(cH, cI), aT(cJ, cK))
1032- let hn = (cH + cC)
1033- let ho = (aR(aT(hn, cI), hm) - cJ)
1034- let hp = (cJ + ho)
1035- let hq = fB(dz(), hn, hp)
1036- let hr = hq._1
1037- let hs = hq._2
1038- let eI = hq._3
1039- let ht = if ((eI != 0))
1043+ let cI = bG()
1044+ let cK = bH()
1045+ let cJ = bI()
1046+ let cL = bJ()
1047+ let hq = aS(aU(cI, cJ), aU(cK, cL))
1048+ let hr = (cI + cD)
1049+ let hs = (aS(aU(hr, cJ), hq) - cK)
1050+ let ht = (cK + hs)
1051+ let hu = fF(dA(), hr, ht)
1052+ let hv = hu._1
1053+ let hw = hu._2
1054+ let eM = hu._3
1055+ let hx = if ((eM != 0))
10401056 then {
1041- let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1042- if ((ht == ht))
1057+ let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1058+ if ((hx == hx))
10431059 then nil
10441060 else throw("Strict value is not equal to itself.")
10451061 }
10461062 else nil
1047- if ((ht == ht))
1048- then (gV(hn, hp) ++ gW(hr, hs))
1063+ if ((hx == hx))
1064+ then (gZ(hr, ht) ++ ha(hv, hw))
10491065 else throw("Strict value is not equal to itself.")
10501066 }
10511067
10521068
10531069
1054-@Callable(cg)
1055-func removeLiquidity (cC) = if (if ((cg.caller != am()))
1070+@Callable(ch)
1071+func removeLiquidity (cD) = if (if ((ch.caller != an()))
10561072 then true
1057- else (0 >= cC))
1073+ else (0 >= cD))
10581074 then throw("Invalid removeLiquidity params")
10591075 else {
1060- let cH = bF()
1061- let cJ = bG()
1062- let cI = bH()
1063- let cK = bI()
1064- let hm = aR(aT(cH, cI), aT(cJ, cK))
1065- let hu = aR(cC, hm)
1066- let hn = (cH - cC)
1067- let hp = (cJ - hu)
1068- gV(hn, hp)
1076+ let cI = bG()
1077+ let cK = bH()
1078+ let cJ = bI()
1079+ let cL = bJ()
1080+ let hq = aS(aU(cI, cJ), aU(cK, cL))
1081+ let hy = aS(cD, hq)
1082+ let hr = (cI - cD)
1083+ let ht = (cK - hy)
1084+ gZ(hr, ht)
10691085 }
10701086
10711087
10721088
1073-@Callable(cg)
1074-func changeSettings (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = if ((cg.caller != am()))
1089+@Callable(ch)
1090+func changeSettings (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = if ((ch.caller != an()))
10751091 then throw("Invalid changeSettings params")
1076- else go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)
1077-
1078-
1079-
1080-@Callable(cg)
1081-func initialize (cH,cJ,gs,gp,gq,gr,gt,hv,hw,hx,hy,gu,gv,gw,gx,dR,gy,gz) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cH))
1092+ else gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)
1093+
1094+
1095+
1096+@Callable(ch)
1097+func initialize (cI,cK,gw,gt,gu,gv,gx,hz,hA,hB,hC,gy,gz,gA,gB,dV,gC,gD) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cI))
10821098 then true
1083- else (0 >= cJ))
1099+ else (0 >= cK))
10841100 then true
1085- else (0 >= gs))
1086- then true
1087- else (0 >= gp))
1088- then true
1089- else (0 >= gq))
1090- then true
1091- else (0 >= gr))
1101+ else (0 >= gw))
10921102 then true
10931103 else (0 >= gt))
10941104 then true
10961106 then true
10971107 else (0 >= gv))
10981108 then true
1099- else (0 >= gw))
1100- then true
11011109 else (0 >= gx))
1102- then true
1103- else (0 >= dR))
11041110 then true
11051111 else (0 >= gy))
11061112 then true
1107- else (gy > aK))
1108- then true
11091113 else (0 >= gz))
11101114 then true
1111- else cx())
1115+ else (0 >= gA))
1116+ then true
1117+ else (0 >= gB))
1118+ then true
1119+ else (0 >= dV))
1120+ then true
1121+ else (0 >= gC))
1122+ then true
1123+ else (gC > aL))
1124+ then true
1125+ else (0 >= gD))
1126+ then true
1127+ else cy())
11121128 then throw("Invalid initialize parameters")
1113- else ((((gX(cH, cJ, 0, 0, 0, 0, 0, 0) ++ go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)) ++ gA((lastBlock.timestamp + gs), 0, 0, 0, 0)) ++ hi(0)) ++ [BooleanEntry(l, true), StringEntry(c, hv), StringEntry(a, hw), StringEntry(b, hx), StringEntry(U, hy)])
1114-
1115-
1116-
1117-@Callable(cg)
1118-func decreasePosition (hg,hz,hA) = {
1119- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1120- if ((hB == hB))
1129+ else ((((hb(cI, cK, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)) ++ gE((lastBlock.timestamp + gw), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(m, true), StringEntry(d, hz), StringEntry(a, hA), StringEntry(b, hB), StringEntry(V, hC)])
1130+
1131+
1132+
1133+@Callable(ch)
1134+func decreasePosition (hk,hD,hE) = {
1135+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1136+ if ((hF == hF))
11211137 then {
1122- let cp = cf(cg)
1123- if (if (if (if (if ((0 >= hg))
1124- then true
1125- else !(cx()))
1126- then true
1127- else !(ch(aR(aK, hz), bE(), true)))
1128- then true
1129- else !(cw(cp)))
1130- then true
1131- else cy())
1138+ let cq = cg(ch)
1139+ if (if (if (if (if (if ((0 >= hk))
1140+ then true
1141+ else !(cy()))
1142+ then true
1143+ else !(ci(aS(aL, hD), bF(), true)))
1144+ then true
1145+ else !(cx(cq)))
1146+ then true
1147+ else cz())
1148+ then true
1149+ else dH())
11321150 then throw("Invalid decreasePosition parameters")
11331151 else {
1134- let hC = co(cp)
1135- let fW = hC._1
1136- let hD = hC._2
1137- let hE = hC._3
1138- let hF = hC._4
1139- let hG = if ((fW > 0))
1140- then aF
1141- else aE
1142- let hH = (hG == aE)
1143- let hI = aT(hg, hz)
1144- let hJ = ei(cp, aN)
1145- let hK = hJ._1
1146- let eh = hJ._2
1147- let hL = if ((hK > hI))
1152+ let hG = cp(cq)
1153+ let ga = hG._1
1154+ let hH = hG._2
1155+ let hI = hG._3
1156+ let hJ = hG._4
1157+ let hK = if ((ga > 0))
1158+ then aG
1159+ else aF
1160+ let hL = (hK == aF)
1161+ let hM = aU(hk, hD)
1162+ let hN = em(cq, aO)
1163+ let hO = hN._1
1164+ let el = hN._2
1165+ let hP = if ((hO > hM))
11481166 then {
1149- let hM = cP(hH, hI)
1150- let eC = hM._1
1151- let cQ = hM._2
1152- let cR = hM._3
1153- let eK = hM._4
1154- let hN = ba(eC)
1155- if (if ((hA != 0))
1156- then (hA > hN)
1167+ let hQ = cQ(hL, hM)
1168+ let eG = hQ._1
1169+ let cR = hQ._2
1170+ let cS = hQ._3
1171+ let eO = hQ._4
1172+ let hR = bb(eG)
1173+ if (if ((hE != 0))
1174+ then (hE > hR)
11571175 else false)
1158- then throw(((("Too little base asset exchanged, got " + toString(hN)) + " expected ") + toString(hA)))
1176+ then throw(((("Too little base asset exchanged, got " + toString(hR)) + " expected ") + toString(hE)))
11591177 else {
1160- let eH = aR(aT(eh, hN), ba(fW))
1161- let hO = dd(fW, hD, hF, eH)
1162- let dm = hO._1
1163- let dn = hO._2
1164- let di = hO._3
1165- let eD = hI
1166- let hP = (eh - eH)
1167- let hQ = if ((fW > 0))
1168- then ((hK - eD) - hP)
1169- else ((hP + hK) - eD)
1170- let hR = (fW + eC)
1171- $Tuple12(hR, dm, ba(hQ), cm(hR), cR, cQ, eK, (bK() - hI), (cb() - (if ((hR > 0))
1172- then ba(eC)
1173- else 0)), (ca() - (if ((0 > hR))
1174- then ba(eC)
1175- else 0)), (bM() - (if ((hR > 0))
1176- then hI
1177- else 0)), (bL() - (if ((0 > hR))
1178- then hI
1178+ let eL = aS(aU(el, hR), bb(ga))
1179+ let hS = de(ga, hH, hJ, eL)
1180+ let dn = hS._1
1181+ let do = hS._2
1182+ let dj = hS._3
1183+ let eH = hM
1184+ let hT = (el - eL)
1185+ let hU = if ((ga > 0))
1186+ then ((hO - eH) - hT)
1187+ else ((hT + hO) - eH)
1188+ let hV = (ga + eG)
1189+ $Tuple12(hV, dn, bb(hU), cn(hV), cS, cR, eO, (bL() - hM), (cc() - (if ((hV > 0))
1190+ then bb(eG)
1191+ else 0)), (cb() - (if ((0 > hV))
1192+ then bb(eG)
1193+ else 0)), (bN() - (if ((hV > 0))
1194+ then hM
1195+ else 0)), (bM() - (if ((0 > hV))
1196+ then hM
11791197 else 0)))
11801198 }
11811199 }
11821200 else throw("Close position first")
1183- let hR = hL._1
1184- let hS = hL._2
1185- let hT = hL._3
1186- let hU = hL._4
1187- let cR = hL._5
1188- let cQ = hL._6
1189- let eK = hL._7
1190- let eN = hL._8
1191- let eL = hL._9
1192- let eM = hL._10
1193- let hV = hL._11
1194- let hW = hL._12
1195- let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1196- if ((hX == hX))
1197- then (gK(cp, hR, hS, hT, hU) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW))
1201+ let hV = hP._1
1202+ let hW = hP._2
1203+ let hX = hP._3
1204+ let hY = hP._4
1205+ let cS = hP._5
1206+ let cR = hP._6
1207+ let eO = hP._7
1208+ let eR = hP._8
1209+ let eP = hP._9
1210+ let eQ = hP._10
1211+ let hZ = hP._11
1212+ let ia = hP._12
1213+ let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1214+ if ((ib == ib))
1215+ then (gO(cq, hV, hW, hX, hY) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia))
11981216 else throw("Strict value is not equal to itself.")
11991217 }
12001218 }
12031221
12041222
12051223
1206-@Callable(cg)
1207-func increasePosition (hG,hz,hA,hY) = {
1208- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1209- if ((hB == hB))
1224+@Callable(ch)
1225+func increasePosition (hK,hD,hE,ic) = {
1226+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1227+ if ((hF == hF))
12101228 then {
1211- let cp = cf(cg)
1212- let hZ = cg.payments[0].amount
1213- let aA = cg.payments[0].assetId
1214- let ia = toBase58String(value(aA))
1215- let ib = (aA == ao())
1216- let ic = az(ia)
1217- if (if (if (if (if (if (if (if (if ((hG != aE))
1218- then (hG != aF)
1229+ let cq = cg(ch)
1230+ let id = ch.payments[0].amount
1231+ let aB = ch.payments[0].assetId
1232+ let ie = toBase58String(value(aB))
1233+ let if = (aB == ap())
1234+ let ig = aA(ie)
1235+ if (if (if (if (if (if (if (if (if (if ((hK != aF))
1236+ then (hK != aG)
12191237 else false)
12201238 then true
1221- else (0 >= hZ))
1222- then true
1223- else !(cx()))
1224- then true
1225- else if (!(ib))
1226- then !(ic)
1239+ else (0 >= id))
1240+ then true
1241+ else !(cy()))
1242+ then true
1243+ else if (!(if))
1244+ then !(ig)
12271245 else false)
12281246 then true
1229- else !(fV(cp, ia)))
1230- then true
1231- else !(ch(aR(aK, hz), bE(), true)))
1232- then true
1233- else cy())
1247+ else !(fZ(cq, ie)))
1248+ then true
1249+ else !(ci(aS(aL, hD), bF(), true)))
12341250 then true
12351251 else cz())
1252+ then true
1253+ else cA())
1254+ then true
1255+ else dH())
12361256 then throw("Invalid increasePosition parameters")
12371257 else {
1238- let id = gd(cp, gi(cg))
1239- let fT = id._1
1240- let fU = id._2
1241- let ie = aT(hZ, fT)
1242- let hg = (hZ - ie)
1243- let if = if (ic)
1258+ let ih = gh(cq, gm(ch))
1259+ let fX = ih._1
1260+ let fY = ih._2
1261+ let ii = aU(id, fX)
1262+ let hk = (id - ii)
1263+ let ij = if (ig)
12441264 then {
1245- let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1246- if ((ig == ig))
1265+ let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1266+ if ((ik == ik))
12471267 then {
1248- let ih = assetBalance(this, ao())
1249- if ((ih == ih))
1268+ let il = assetBalance(this, ap())
1269+ if ((il == il))
12501270 then {
1251- let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1252- if ((ii == ii))
1271+ let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1272+ if ((im == im))
12531273 then {
1254- let ij = assetBalance(this, ao())
1255- if ((ij == ij))
1274+ let in = assetBalance(this, ap())
1275+ if ((in == in))
12561276 then {
1257- let ik = (ij - ih)
1258- if ((ik == ik))
1259- then ik
1277+ let io = (in - il)
1278+ if ((io == io))
1279+ then io
12601280 else throw("Strict value is not equal to itself.")
12611281 }
12621282 else throw("Strict value is not equal to itself.")
12671287 }
12681288 else throw("Strict value is not equal to itself.")
12691289 }
1270- else ie
1271- if ((if == if))
1290+ else ii
1291+ if ((ij == ij))
12721292 then {
1273- let il = invoke(au(), "acceptPaymentWithLink", [cp, hY], [AttachedPayment(ao(), if)])
1274- if ((il == il))
1293+ let ip = invoke(av(), "acceptPaymentWithLink", [cq, ic], [AttachedPayment(ap(), ij)])
1294+ if ((ip == ip))
12751295 then {
1276- let im = {
1277- let cr = il
1278- if ($isInstanceOf(cr, "Int"))
1296+ let iq = {
1297+ let cs = ip
1298+ if ($isInstanceOf(cs, "Int"))
12791299 then {
1280- let gg = cr
1281- gg
1300+ let gk = cs
1301+ gk
12821302 }
12831303 else throw("Invalid referrerFee")
12841304 }
1285- let in = (if - im)
1286- let io = co(cp)
1287- let fW = io._1
1288- let hD = io._2
1289- let hE = io._3
1290- let hF = io._4
1291- let gI = (fW == 0)
1292- let ip = if ((fW > 0))
1293- then (hG == aE)
1294- else (hG == aF)
1295- let iq = if (!(gI))
1296- then ip
1305+ let ir = (ij - iq)
1306+ let is = cp(cq)
1307+ let ga = is._1
1308+ let hH = is._2
1309+ let hI = is._3
1310+ let hJ = is._4
1311+ let gM = (ga == 0)
1312+ let it = if ((ga > 0))
1313+ then (hK == aF)
1314+ else (hK == aG)
1315+ let iu = if (!(gM))
1316+ then it
12971317 else false
1298- let hH = (hG == aE)
1299- let ir = if (if (gI)
1318+ let hL = (hK == aF)
1319+ let iv = if (if (gM)
13001320 then true
1301- else iq)
1321+ else iu)
13021322 then {
1303- let hI = aT(hg, hz)
1304- let is = cP(hH, hI)
1305- let cT = is._1
1306- let cQ = is._2
1307- let cR = is._3
1308- let eK = is._4
1309- if (if ((hA != 0))
1310- then (hA > ba(cT))
1323+ let hM = aU(hk, hD)
1324+ let iw = cQ(hL, hM)
1325+ let cU = iw._1
1326+ let cR = iw._2
1327+ let cS = iw._3
1328+ let eO = iw._4
1329+ if (if ((hE != 0))
1330+ then (hE > bb(cU))
13111331 else false)
1312- then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(hA)))
1332+ then throw(((("Limit error: " + toString(bb(cU))) + " < ") + toString(hE)))
13131333 else {
1314- let hR = (fW + cT)
1315- let hV = (bM() + (if ((hR > 0))
1316- then hI
1334+ let hV = (ga + cU)
1335+ let hZ = (bN() + (if ((hV > 0))
1336+ then hM
13171337 else 0))
1318- let hW = (bL() + (if ((0 > hR))
1319- then hI
1338+ let ia = (bM() + (if ((0 > hV))
1339+ then hM
13201340 else 0))
1321- let it = aR(hI, hz)
1322- let iu = dd(fW, hD, hF, it)
1323- let dm = iu._1
1324- let ec = iu._2
1325- let ed = iu._3
1326- if (!(dK(cQ, cR)))
1341+ let ix = aS(hM, hD)
1342+ let iy = de(ga, hH, hJ, ix)
1343+ let dn = iy._1
1344+ let eg = iy._2
1345+ let eh = iy._3
1346+ if (!(dO(cR, cS)))
13271347 then throw("Over max spread limit")
1328- else if (!(dO(hV, hW)))
1348+ else if (!(dS(hZ, ia)))
13291349 then throw("Over max open notional")
1330- else $Tuple12(hR, dm, (hE + hI), cm(hR), cR, cQ, eK, (bK() + hI), (cb() + (if ((hR > 0))
1331- then ba(cT)
1332- else 0)), (ca() + (if ((0 > hR))
1333- then ba(cT)
1334- else 0)), hV, hW)
1350+ else $Tuple12(hV, dn, (hI + hM), cn(hV), cS, cR, eO, (bL() + hM), (cc() + (if ((hV > 0))
1351+ then bb(cU)
1352+ else 0)), (cb() + (if ((0 > hV))
1353+ then bb(cU)
1354+ else 0)), hZ, ia)
13351355 }
13361356 }
13371357 else {
1338- let hI = aT(hg, hz)
1339- let iv = ei(toString(cg.caller), aN)
1340- let hK = iv._1
1341- let eh = iv._2
1342- if ((hK > hI))
1358+ let hM = aU(hk, hD)
1359+ let iz = em(toString(ch.caller), aO)
1360+ let hO = iz._1
1361+ let el = iz._2
1362+ if ((hO > hM))
13431363 then throw("Use decreasePosition to decrease position size")
13441364 else throw("Close position first")
13451365 }
1346- let hR = ir._1
1347- let hS = ir._2
1348- let hT = ir._3
1349- let hU = ir._4
1350- let cR = ir._5
1351- let cQ = ir._6
1352- let eK = ir._7
1353- let eN = ir._8
1354- let eL = ir._9
1355- let eM = ir._10
1356- let hV = ir._11
1357- let hW = ir._12
1358- let iw = gk(in)
1359- let gm = iw._1
1360- let gn = iw._2
1361- let ix = if (ib)
1366+ let hV = iv._1
1367+ let hW = iv._2
1368+ let hX = iv._3
1369+ let hY = iv._4
1370+ let cS = iv._5
1371+ let cR = iv._6
1372+ let eO = iv._7
1373+ let eR = iv._8
1374+ let eP = iv._9
1375+ let eQ = iv._10
1376+ let hZ = iv._11
1377+ let ia = iv._12
1378+ let iA = go(ir)
1379+ let gq = iA._1
1380+ let gr = iA._2
1381+ let iB = if (if)
13621382 then {
1363- let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1364- if ((ix == ix))
1383+ let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1384+ if ((iB == iB))
13651385 then nil
13661386 else throw("Strict value is not equal to itself.")
13671387 }
13681388 else nil
1369- if ((ix == ix))
1389+ if ((iB == iB))
13701390 then {
1371- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1372- if ((iy == iy))
1391+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1392+ if ((iC == iC))
13731393 then {
1374- let iz = invoke(as(), "notifyFees", [cp, in], nil)
1375- if ((iz == iz))
1394+ let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1395+ if ((iD == iD))
13761396 then {
1377- let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1378- if ((hX == hX))
1379- then ((((((gK(cp, hR, hS, hT, hU) ++ gH(gI, cp)) ++ gG(cp, ia)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
1397+ let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1398+ if ((ib == ib))
1399+ then ((((((gO(cq, hV, hW, hX, hY) ++ gL(gM, cq)) ++ gK(cq, ie)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
13801400 else throw("Strict value is not equal to itself.")
13811401 }
13821402 else throw("Strict value is not equal to itself.")
13951415
13961416
13971417
1398-@Callable(cg)
1418+@Callable(ch)
13991419 func addMargin () = {
1400- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1401- if ((hB == hB))
1420+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1421+ if ((hF == hF))
14021422 then {
1403- let cp = toString(cg.caller)
1404- let hZ = cg.payments[0].amount
1405- let aA = cg.payments[0].assetId
1406- let ia = toBase58String(value(aA))
1407- let ib = (aA == ao())
1408- let ic = az(ia)
1409- if (if (if (if (if (if (if (!(ib))
1410- then !(ic)
1423+ let cq = toString(ch.caller)
1424+ let id = ch.payments[0].amount
1425+ let aB = ch.payments[0].assetId
1426+ let ie = toBase58String(value(aB))
1427+ let if = (aB == ap())
1428+ let ig = aA(ie)
1429+ if (if (if (if (if (if (if (if (!(if))
1430+ then !(ig)
14111431 else false)
14121432 then true
1413- else !(cw(toString(cg.caller))))
1414- then true
1415- else !(fX(cp, ia)))
1416- then true
1417- else !(cx()))
1418- then true
1419- else cy())
1433+ else !(cx(toString(ch.caller))))
1434+ then true
1435+ else !(gb(cq, ie)))
1436+ then true
1437+ else !(cy()))
14201438 then true
14211439 else cz())
1440+ then true
1441+ else cA())
1442+ then true
1443+ else dH())
14221444 then throw("Invalid addMargin parameters")
14231445 else {
1424- let iA = gd(cp, gi(cg))
1425- let fT = iA._1
1426- let fU = iA._2
1427- let ie = aT(hZ, fT)
1428- let hg = (hZ - ie)
1429- let if = if (ic)
1446+ let iE = gh(cq, gm(ch))
1447+ let fX = iE._1
1448+ let fY = iE._2
1449+ let ii = aU(id, fX)
1450+ let hk = (id - ii)
1451+ let ij = if (ig)
14301452 then {
1431- let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1432- if ((ig == ig))
1453+ let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1454+ if ((ik == ik))
14331455 then {
1434- let ih = assetBalance(this, ao())
1435- if ((ih == ih))
1456+ let il = assetBalance(this, ap())
1457+ if ((il == il))
14361458 then {
1437- let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1438- if ((ii == ii))
1459+ let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1460+ if ((im == im))
14391461 then {
1440- let ij = assetBalance(this, ao())
1441- if ((ij == ij))
1462+ let in = assetBalance(this, ap())
1463+ if ((in == in))
14421464 then {
1443- let ik = (ij - ih)
1444- if ((ik == ik))
1445- then ik
1465+ let io = (in - il)
1466+ if ((io == io))
1467+ then io
14461468 else throw("Strict value is not equal to itself.")
14471469 }
14481470 else throw("Strict value is not equal to itself.")
14531475 }
14541476 else throw("Strict value is not equal to itself.")
14551477 }
1456- else ie
1457- if ((if == if))
1478+ else ii
1479+ if ((ij == ij))
14581480 then {
1459- let il = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), if)])
1460- if ((il == il))
1481+ let ip = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ij)])
1482+ if ((ip == ip))
14611483 then {
1462- let im = {
1463- let cr = il
1464- if ($isInstanceOf(cr, "Int"))
1484+ let iq = {
1485+ let cs = ip
1486+ if ($isInstanceOf(cs, "Int"))
14651487 then {
1466- let gg = cr
1467- gg
1488+ let gk = cs
1489+ gk
14681490 }
14691491 else throw("Invalid referrerFee")
14701492 }
1471- let in = (if - im)
1472- let iB = co(cp)
1473- let fW = iB._1
1474- let hD = iB._2
1475- let hE = iB._3
1476- let hF = iB._4
1477- let iC = gk(in)
1478- let gm = iC._1
1479- let gn = iC._2
1480- let ix = if (ib)
1493+ let ir = (ij - iq)
1494+ let iF = cp(cq)
1495+ let ga = iF._1
1496+ let hH = iF._2
1497+ let hI = iF._3
1498+ let hJ = iF._4
1499+ let iG = go(ir)
1500+ let gq = iG._1
1501+ let gr = iG._2
1502+ let iB = if (if)
14811503 then {
1482- let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1483- if ((ix == ix))
1504+ let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1505+ if ((iB == iB))
14841506 then nil
14851507 else throw("Strict value is not equal to itself.")
14861508 }
14871509 else nil
1488- if ((ix == ix))
1510+ if ((iB == iB))
14891511 then {
1490- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1491- if ((iy == iy))
1512+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1513+ if ((iC == iC))
14921514 then {
1493- let iz = invoke(as(), "notifyFees", [cp, in], nil)
1494- if ((iz == iz))
1495- then (((gK(cp, fW, (hD + hg), hE, hF) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
1515+ let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1516+ if ((iD == iD))
1517+ then (((gO(cq, ga, (hH + hk), hI, hJ) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
14961518 else throw("Strict value is not equal to itself.")
14971519 }
14981520 else throw("Strict value is not equal to itself.")
15091531
15101532
15111533
1512-@Callable(cg)
1513-func removeMargin (hg) = {
1514- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1515- if ((hB == hB))
1534+@Callable(ch)
1535+func removeMargin (hk) = {
1536+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1537+ if ((hF == hF))
15161538 then {
1517- let cp = toString(cg.caller)
1518- if (if (if (if ((0 >= hg))
1519- then true
1520- else !(cw(cp)))
1521- then true
1522- else !(cx()))
1523- then true
1524- else cy())
1539+ let cq = toString(ch.caller)
1540+ if (if (if (if (if ((0 >= hk))
1541+ then true
1542+ else !(cx(cq)))
1543+ then true
1544+ else !(cy()))
1545+ then true
1546+ else cz())
1547+ then true
1548+ else dH())
15251549 then throw("Invalid removeMargin parameters")
15261550 else {
1527- let iD = co(cp)
1528- let fW = iD._1
1529- let hD = iD._2
1530- let hE = iD._3
1531- let hF = iD._4
1532- let iE = -(hg)
1533- let iF = dd(fW, hD, hF, iE)
1534- let dm = iF._1
1535- let dn = iF._2
1536- if ((dn != 0))
1551+ let iH = cp(cq)
1552+ let ga = iH._1
1553+ let hH = iH._2
1554+ let hI = iH._3
1555+ let hJ = iH._4
1556+ let iI = -(hk)
1557+ let iJ = de(ga, hH, hJ, iI)
1558+ let dn = iJ._1
1559+ let do = iJ._2
1560+ if ((do != 0))
15371561 then throw("Invalid removed margin amount")
15381562 else {
1539- let iG = en(dm, dn, hE)
1540- if (!(ch(iG, bE(), true)))
1541- then throw(((("Too much margin removed: " + toString(iG)) + " < ") + toString(bE())))
1563+ let iK = er(dn, do, hI)
1564+ if (!(ci(iK, bF(), true)))
1565+ then throw(((("Too much margin removed: " + toString(iK)) + " < ") + toString(bF())))
15421566 else {
1543- let iH = toBase58String(ao())
1544- let iI = ga(cp)
1545- let iJ = iI._1
1546- let iK = iI._2
1547- let iL = if ((hg > iJ))
1548- then iJ
1549- else hg
1550- let iM = if ((iJ > hg))
1567+ let iL = toBase58String(ap())
1568+ let iM = ge(cq)
1569+ let iN = iM._1
1570+ let iO = iM._2
1571+ let iP = if ((hk > iN))
1572+ then iN
1573+ else hk
1574+ let iQ = if ((iN > hk))
15511575 then 0
1552- else (hg - iJ)
1553- let iN = (iJ - iL)
1554- let iO = if ((iN > 0))
1576+ else (hk - iN)
1577+ let iR = (iN - iP)
1578+ let iS = if ((iR > 0))
15551579 then nil
1556- else gG(cp, iH)
1557- let iP = if (((iL + iM) != hg))
1558- then throw(((((("toRepay=" + toString(iL)) + " + toWithdraw=") + toString(iM)) + " != ") + toString(hg)))
1580+ else gK(cq, iL)
1581+ let iT = if (((iP + iQ) != hk))
1582+ then throw(((((("toRepay=" + toString(iP)) + " + toWithdraw=") + toString(iQ)) + " != ") + toString(hk)))
15591583 else nil
1560- if ((iP == iP))
1584+ if ((iT == iT))
15611585 then {
1562- let iQ = if ((iM > 0))
1586+ let iU = if ((iQ > 0))
15631587 then {
1564- let iQ = invoke(ar(), "withdrawLocked", [iM], nil)
1565- if ((iQ == iQ))
1588+ let iU = invoke(as(), "withdrawLocked", [iQ], nil)
1589+ if ((iU == iU))
15661590 then nil
15671591 else throw("Strict value is not equal to itself.")
15681592 }
15691593 else nil
1570- if ((iQ == iQ))
1594+ if ((iU == iU))
15711595 then {
1572- let iR = if ((iL > 0))
1596+ let iV = if ((iP > 0))
15731597 then {
1574- let iS = invoke(aw(), "repay", [cp, iL, iK], nil)
1575- if ((iS == iS))
1576- then [ScriptTransfer(cg.caller, iL, fromBase58String(iK))]
1598+ let iW = invoke(ax(), "repay", [cq, iP, iO], nil)
1599+ if ((iW == iW))
1600+ then [ScriptTransfer(ch.caller, iP, fromBase58String(iO))]
15771601 else throw("Strict value is not equal to itself.")
15781602 }
15791603 else nil
1580- if ((iR == iR))
1581- then ((((gK(cp, fW, dm, hE, cm(fW)) ++ (if ((iM > 0))
1582- then hf(cg.caller, iM)
1583- else nil)) ++ hi((bC() - hg))) ++ iO) ++ iR)
1604+ if ((iV == iV))
1605+ then ((((gO(cq, ga, dn, hI, cn(ga)) ++ (if ((iQ > 0))
1606+ then hj(ch.caller, iQ)
1607+ else nil)) ++ hm((bD() - hk))) ++ iS) ++ iV)
15841608 else throw("Strict value is not equal to itself.")
15851609 }
15861610 else throw("Strict value is not equal to itself.")
15951619
15961620
15971621
1598-@Callable(cg)
1599-func closePosition (gL,iT) = {
1600- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1601- if ((hB == hB))
1622+@Callable(ch)
1623+func closePosition (gP,iX) = {
1624+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1625+ if ((hF == hF))
16021626 then {
1603- let cp = cf(cg)
1604- let iU = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
1605- if (if (if (if (if (!(cw(cp)))
1606- then true
1607- else !(cx()))
1608- then true
1609- else cy())
1610- then true
1611- else (0 >= gL))
1612- then true
1613- else (0 > iT))
1627+ let cq = cg(ch)
1628+ let iY = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
1629+ if (if (if (if (if (if (!(cx(cq)))
1630+ then true
1631+ else !(cy()))
1632+ then true
1633+ else cz())
1634+ then true
1635+ else (0 >= gP))
1636+ then true
1637+ else (0 > iX))
1638+ then true
1639+ else dH())
16141640 then throw("Invalid closePosition parameters")
16151641 else {
1616- let iV = co(cp)
1617- let fW = iV._1
1618- let hD = iV._2
1619- let hE = iV._3
1620- let hF = iV._4
1621- let iW = if ((ba(fW) > gL))
1642+ let iZ = cp(cq)
1643+ let ga = iZ._1
1644+ let hH = iZ._2
1645+ let hI = iZ._3
1646+ let hJ = iZ._4
1647+ let ja = if ((bb(ga) > gP))
16221648 then {
1623- let hG = if ((fW > 0))
1624- then aF
1625- else aE
1626- let hH = (hG == aE)
1627- let iX = dy((fW > 0), gL, true)
1628- let eD = iX._1
1629- let cQ = iX._2
1630- let cR = iX._3
1631- let eK = iX._4
1632- let eC = if ((fW > 0))
1633- then -(gL)
1634- else gL
1635- let iY = ei(cp, aN)
1636- let hK = iY._1
1637- let eh = iY._2
1638- let iZ = er(cp, aN)
1639- let ja = aR(ba(eC), ba(fW))
1640- let eH = aT(eh, ja)
1641- let jb = dd(fW, hD, hF, eH)
1642- let dm = jb._1
1643- let jc = jb._2
1644- let di = jb._3
1645- let hP = (eh - eH)
1646- let hQ = if ((fW > 0))
1647- then ((hK - eD) - hP)
1648- else ((hP + hK) - eD)
1649- let hT = ba(hQ)
1650- let jd = aT(hT, iZ)
1651- let hR = (fW + eC)
1652- let je = cm(hR)
1653- let eN = (bK() - eD)
1654- if (if ((iT != 0))
1655- then (iT > eD)
1649+ let hK = if ((ga > 0))
1650+ then aG
1651+ else aF
1652+ let hL = (hK == aF)
1653+ let jb = dz((ga > 0), gP, true)
1654+ let eH = jb._1
1655+ let cR = jb._2
1656+ let cS = jb._3
1657+ let eO = jb._4
1658+ let eG = if ((ga > 0))
1659+ then -(gP)
1660+ else gP
1661+ let jc = em(cq, aO)
1662+ let hO = jc._1
1663+ let el = jc._2
1664+ let jd = ev(cq, aO)
1665+ let je = aS(bb(eG), bb(ga))
1666+ let eL = aU(el, je)
1667+ let jf = de(ga, hH, hJ, el)._1
1668+ let jg = de(ga, hH, hJ, eL)
1669+ let dn = jg._1
1670+ let jh = jg._2
1671+ let dj = jg._3
1672+ let hT = (el - eL)
1673+ let hU = if ((ga > 0))
1674+ then ((hO - eH) - hT)
1675+ else ((hT + hO) - eH)
1676+ let hX = bb(hU)
1677+ let ji = aU(hX, jd)
1678+ let hV = (ga + eG)
1679+ let jj = cn(hV)
1680+ let eR = (bL() - eH)
1681+ if (if ((iX != 0))
1682+ then (iX > eH)
16561683 else false)
1657- then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1658- else $Tuple15(hR, jd, hT, je, jc, eH, (ba((dm - jd)) + eH), cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1659- then ba(eC)
1660- else 0)), (ca() - (if ((0 > hR))
1661- then ba(eC)
1662- else 0)), (bM() - (if ((hR > 0))
1663- then eD
1664- else 0)), (bL() - (if ((0 > hR))
1665- then eD
1684+ then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1685+ else $Tuple15(hV, ji, hX, jj, jh, eL, (jf - ji), cR, cS, eO, eR, (cc() - (if ((hV > 0))
1686+ then bb(eG)
1687+ else 0)), (cb() - (if ((0 > hV))
1688+ then bb(eG)
1689+ else 0)), (bN() - (if ((hV > 0))
1690+ then eH
1691+ else 0)), (bM() - (if ((0 > hV))
1692+ then eH
16661693 else 0)))
16671694 }
1668- else if ((gL > ba(fW)))
1695+ else if ((gP > bb(ga)))
16691696 then throw("Invalid closePosition parameters")
16701697 else {
1671- let jf = eE(cp, true)
1672- let eD = jf._1
1673- let jc = jf._2
1674- let eH = jf._3
1675- let eI = jf._4
1676- let cQ = jf._5
1677- let cR = jf._6
1678- let eK = jf._7
1679- let eN = jf._8
1680- let ed = jf._9
1681- let eL = jf._10
1682- let eM = jf._11
1683- let hV = jf._12
1684- let hW = jf._13
1685- if (if ((iT != 0))
1686- then (iT > eD)
1698+ let jk = eI(cq, true)
1699+ let eH = jk._1
1700+ let jh = jk._2
1701+ let eL = jk._3
1702+ let eM = jk._4
1703+ let cR = jk._5
1704+ let cS = jk._6
1705+ let eO = jk._7
1706+ let eR = jk._8
1707+ let eh = jk._9
1708+ let eP = jk._10
1709+ let eQ = jk._11
1710+ let hZ = jk._12
1711+ let ia = jk._13
1712+ if (if ((iX != 0))
1713+ then (iX > eH)
16871714 else false)
1688- then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1689- else $Tuple15(0, 0, 0, 0, jc, eH, eI, cQ, cR, eK, eN, eL, eM, hV, hW)
1715+ then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1716+ else $Tuple15(0, 0, 0, 0, jh, eL, eM, cR, cS, eO, eR, eP, eQ, hZ, ia)
16901717 }
1691- let hR = iW._1
1692- let jd = iW._2
1693- let hT = iW._3
1694- let je = iW._4
1695- let jc = iW._5
1696- let eH = iW._6
1697- let eI = iW._7
1698- let cQ = iW._8
1699- let cR = iW._9
1700- let eK = iW._10
1701- let eN = iW._11
1702- let eL = iW._12
1703- let eM = iW._13
1704- let hV = iW._14
1705- let hW = iW._15
1706- if ((jc > 0))
1718+ let hV = ja._1
1719+ let ji = ja._2
1720+ let hX = ja._3
1721+ let jj = ja._4
1722+ let jh = ja._5
1723+ let eL = ja._6
1724+ let eM = ja._7
1725+ let cR = ja._8
1726+ let cS = ja._9
1727+ let eO = ja._10
1728+ let eR = ja._11
1729+ let eP = ja._12
1730+ let eQ = ja._13
1731+ let hZ = ja._14
1732+ let ia = ja._15
1733+ if ((jh > 0))
17071734 then throw("Unable to close position with bad debt")
17081735 else {
1709- let jg = ba(eI)
1710- let jh = (bC() - jg)
1711- let ji = if ((0 > jh))
1712- then $Tuple2(0, ba(jh))
1713- else $Tuple2(jh, 0)
1714- let jj = ji._1
1715- let jk = ji._2
1716- let jl = ga(cp)
1717- let iJ = jl._1
1718- let iK = jl._2
1719- let jm = if ((iJ > 0))
1720- then if ((jg >= iJ))
1736+ let jl = bb(eM)
1737+ let jm = (bD() - jl)
1738+ let jn = if ((0 > jm))
1739+ then $Tuple2(0, bb(jm))
1740+ else $Tuple2(jm, 0)
1741+ let jo = jn._1
1742+ let jp = jn._2
1743+ let jq = ge(cq)
1744+ let iN = jq._1
1745+ let iO = jq._2
1746+ let jr = if ((iN > 0))
1747+ then if ((jl >= iN))
17211748 then {
1722- let iS = invoke(aw(), "repay", [cp, iJ, iK], nil)
1723- if ((iS == iS))
1724- then $Tuple2([ScriptTransfer(iU, iJ, fromBase58String(iK))], (jg - iJ))
1749+ let iW = invoke(ax(), "repay", [cq, iN, iO], nil)
1750+ if ((iW == iW))
1751+ then $Tuple2([ScriptTransfer(iY, iN, fromBase58String(iO))], (jl - iN))
17251752 else throw("Strict value is not equal to itself.")
17261753 }
17271754 else {
1728- let jn = invoke(aw(), "realizePartiallyAndClose", [cp, jg, iK], nil)
1729- if ((jn == jn))
1730- then $Tuple2([ScriptTransfer(iU, jg, fromBase58String(iK))], 0)
1755+ let js = invoke(ax(), "realizePartiallyAndClose", [cq, jl, iO], nil)
1756+ if ((js == js))
1757+ then $Tuple2([ScriptTransfer(iY, jl, fromBase58String(iO))], 0)
17311758 else throw("Strict value is not equal to itself.")
17321759 }
1733- else $Tuple2(nil, jg)
1734- if ((jm == jm))
1760+ else $Tuple2(nil, jl)
1761+ if ((jr == jr))
17351762 then {
1736- let jo = jm._2
1737- let jp = jm._1
1738- let jq = if ((jo > 0))
1763+ let jt = jr._2
1764+ let ju = jr._1
1765+ let jv = if ((jt > 0))
17391766 then {
1740- let jq = invoke(ar(), "withdrawLocked", [jo], nil)
1741- if ((jq == jq))
1767+ let jv = invoke(as(), "withdrawLocked", [jt], nil)
1768+ if ((jv == jv))
17421769 then nil
17431770 else throw("Strict value is not equal to itself.")
17441771 }
17451772 else nil
1746- if ((jq == jq))
1773+ if ((jv == jv))
17471774 then {
1748- let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1749- if ((hX == hX))
1750- then (((((if ((hR == 0))
1751- then he(cp)
1752- else gK(cp, hR, jd, hT, je)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ (if ((jo > 0))
1753- then hf(iU, jo)
1754- else nil)) ++ hi(jj)) ++ jp)
1775+ let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1776+ if ((ib == ib))
1777+ then (((((if ((hV == 0))
1778+ then hi(cq)
1779+ else gO(cq, hV, ji, hX, jj)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ (if ((jt > 0))
1780+ then hj(iY, jt)
1781+ else nil)) ++ hm(jo)) ++ ju)
17551782 else throw("Strict value is not equal to itself.")
17561783 }
17571784 else throw("Strict value is not equal to itself.")
17651792
17661793
17671794
1768-@Callable(cg)
1769-func liquidate (cp) = {
1770- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1771- if ((hB == hB))
1795+@Callable(ch)
1796+func liquidate (cq) = {
1797+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1798+ if ((hF == hF))
17721799 then {
1773- let jr = er(cp, aN)
1774- let iG = if (dT())
1800+ let jw = ev(cq, aO)
1801+ let iK = if (dX())
17751802 then {
1776- let js = er(cp, aO)
1777- bb(jr, js)
1803+ let jx = ev(cq, aP)
1804+ bc(jw, jx)
17781805 }
1779- else jr
1780- if (if (if (if (!(ch(iG, bR(), false)))
1781- then true
1782- else !(cw(cp)))
1783- then true
1784- else !(cx()))
1785- then true
1786- else cy())
1806+ else jw
1807+ if (if (if (if (if (!(ci(iK, bS(), false)))
1808+ then true
1809+ else !(cx(cq)))
1810+ then true
1811+ else !(cy()))
1812+ then true
1813+ else cz())
1814+ then true
1815+ else dH())
17871816 then throw("Unable to liquidate")
1788- else if (if (if ((jr > bS()))
1789- then (bT() > 0)
1817+ else if (if (if ((jw > bT()))
1818+ then (bU() > 0)
17901819 else false)
1791- then (aK > bT())
1820+ then (aL > bU())
17921821 else false)
17931822 then {
1794- let jt = co(cp)
1795- let fW = jt._1
1796- let hD = jt._2
1797- let hE = jt._3
1798- let hF = jt._4
1799- let hG = if ((fW > 0))
1800- then aF
1801- else aE
1802- let hH = (hG == aE)
1803- let eD = ex(cp, fW)
1804- let ju = ei(cp, aN)
1805- let hK = ju._1
1806- let eh = ju._2
1807- let jv = cP(hH, eD)
1808- let eC = jv._1
1809- let cQ = jv._2
1810- let cR = jv._3
1811- let eK = jv._4
1812- let jw = aR(ba(eC), ba(fW))
1813- let eH = aT(eh, jw)
1814- let jx = dd(fW, hD, hF, eH)
1815- let dm = jx._1
1816- let dn = jx._2
1817- let di = jx._3
1818- let hP = (eh - eH)
1819- let hQ = if ((fW > 0))
1820- then ((hK - eD) - hP)
1821- else ((hP + hK) - eD)
1822- let jy = aT(eD, bS())
1823- let jz = (jy / 2)
1824- let gn = (jy - jz)
1825- let jd = (dm - jy)
1826- let hR = (fW + eC)
1827- let hT = ba(hQ)
1828- let je = cm(hR)
1829- let eN = (bK() - eD)
1830- let jh = (bC() - jy)
1831- let jA = if ((0 > jh))
1832- then $Tuple2(0, ba(jh))
1833- else $Tuple2(jh, 0)
1834- let jB = jA._1
1835- let jk = jA._2
1836- let jC = ga(cp)
1837- let iJ = jC._1
1838- let iK = jC._2
1839- let jD = if ((iJ > 0))
1823+ let jy = cp(cq)
1824+ let ga = jy._1
1825+ let hH = jy._2
1826+ let hI = jy._3
1827+ let hJ = jy._4
1828+ let hK = if ((ga > 0))
1829+ then aG
1830+ else aF
1831+ let hL = (hK == aF)
1832+ let eH = eB(cq, ga)
1833+ let jz = em(cq, aO)
1834+ let hO = jz._1
1835+ let el = jz._2
1836+ let jA = cQ(hL, eH)
1837+ let eG = jA._1
1838+ let cR = jA._2
1839+ let cS = jA._3
1840+ let eO = jA._4
1841+ let jB = aS(bb(eG), bb(ga))
1842+ let eL = aU(el, jB)
1843+ let jC = de(ga, hH, hJ, eL)
1844+ let dn = jC._1
1845+ let do = jC._2
1846+ let dj = jC._3
1847+ let hT = (el - eL)
1848+ let hU = if ((ga > 0))
1849+ then ((hO - eH) - hT)
1850+ else ((hT + hO) - eH)
1851+ let jD = aU(eH, bT())
1852+ let jE = (jD / 2)
1853+ let gr = (jD - jE)
1854+ let ji = (dn - jD)
1855+ let hV = (ga + eG)
1856+ let hX = bb(hU)
1857+ let jj = cn(hV)
1858+ let eR = (bL() - eH)
1859+ let jm = (bD() - jD)
1860+ let jF = if ((0 > jm))
1861+ then $Tuple2(0, bb(jm))
1862+ else $Tuple2(jm, 0)
1863+ let jG = jF._1
1864+ let jp = jF._2
1865+ let jH = ge(cq)
1866+ let iN = jH._1
1867+ let iO = jH._2
1868+ let jI = if ((iN > 0))
18401869 then {
1841- let jE = aT(iJ, jw)
1842- let jn = invoke(aw(), "realizePartially", [cp, iK, jE], nil)
1843- if ((jn == jn))
1870+ let jJ = aU(iN, jB)
1871+ let js = invoke(ax(), "realizePartially", [cq, iO, jJ], nil)
1872+ if ((js == js))
18441873 then nil
18451874 else throw("Strict value is not equal to itself.")
18461875 }
18471876 else nil
1848- if ((jD == jD))
1877+ if ((jI == jI))
18491878 then {
1850- let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1851- if ((jq == jq))
1879+ let jv = invoke(as(), "withdrawLocked", [jD], nil)
1880+ if ((jv == jv))
18521881 then {
1853- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1854- if ((iy == iy))
1882+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1883+ if ((iC == iC))
18551884 then {
1856- let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1857- if ((hX == hX))
1858- then (((gK(cp, hR, jd, hT, je) ++ gX(cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1859- then ba(eC)
1860- else 0)), (ca() - (if ((0 > hR))
1861- then ba(eC)
1862- else 0)), (bM() - (if ((hR > 0))
1863- then eD
1864- else 0)), (bL() - (if ((0 > hR))
1865- then eD
1866- else 0)))) ++ hf(cg.caller, jz)) ++ hi(jB))
1885+ let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1886+ if ((ib == ib))
1887+ then (((gO(cq, hV, ji, hX, jj) ++ hb(cR, cS, eO, eR, (cc() - (if ((hV > 0))
1888+ then bb(eG)
1889+ else 0)), (cb() - (if ((0 > hV))
1890+ then bb(eG)
1891+ else 0)), (bN() - (if ((hV > 0))
1892+ then eH
1893+ else 0)), (bM() - (if ((0 > hV))
1894+ then eH
1895+ else 0)))) ++ hj(ch.caller, jE)) ++ hm(jG))
18671896 else throw("Strict value is not equal to itself.")
18681897 }
18691898 else throw("Strict value is not equal to itself.")
18731902 else throw("Strict value is not equal to itself.")
18741903 }
18751904 else {
1876- let jF = eE(cp, false)
1877- let ec = jF._1
1878- let dn = jF._2
1879- let ed = jF._3
1880- let ee = jF._4
1881- let cQ = jF._5
1882- let cR = jF._6
1883- let eK = jF._7
1884- let eN = jF._8
1885- let eD = jF._9
1886- let eL = jF._10
1887- let eM = jF._11
1888- let hV = jF._12
1889- let hW = jF._13
1890- let jy = aT(eD, bS())
1891- let jz = (jy / 2)
1892- let gn = (jy - jz)
1893- let jh = (bC() - jy)
1894- let jG = if ((0 > jh))
1895- then $Tuple2(0, ba(jh))
1896- else $Tuple2(jh, 0)
1897- let jB = jG._1
1898- let jk = jG._2
1899- let jH = ga(cp)
1900- let iJ = jH._1
1901- let iK = jH._2
1902- let jD = if ((iJ > 0))
1905+ let jK = eI(cq, false)
1906+ let eg = jK._1
1907+ let do = jK._2
1908+ let eh = jK._3
1909+ let ei = jK._4
1910+ let cR = jK._5
1911+ let cS = jK._6
1912+ let eO = jK._7
1913+ let eR = jK._8
1914+ let eH = jK._9
1915+ let eP = jK._10
1916+ let eQ = jK._11
1917+ let hZ = jK._12
1918+ let ia = jK._13
1919+ let jD = aU(eH, bT())
1920+ let jE = (jD / 2)
1921+ let gr = (jD - jE)
1922+ let jm = (bD() - jD)
1923+ let jL = if ((0 > jm))
1924+ then $Tuple2(0, bb(jm))
1925+ else $Tuple2(jm, 0)
1926+ let jG = jL._1
1927+ let jp = jL._2
1928+ let jM = ge(cq)
1929+ let iN = jM._1
1930+ let iO = jM._2
1931+ let jI = if ((iN > 0))
19031932 then {
1904- let jn = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iK], nil)
1905- if ((jn == jn))
1933+ let js = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iO], nil)
1934+ if ((js == js))
19061935 then nil
19071936 else throw("Strict value is not equal to itself.")
19081937 }
19091938 else nil
1910- if ((jD == jD))
1939+ if ((jI == jI))
19111940 then {
1912- let gg = if ((dn > 0))
1941+ let gk = if ((do > 0))
19131942 then {
1914- let jI = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1915- if ((jI == jI))
1943+ let jN = invoke(as(), "exchangeFreeAndLocked", [do], nil)
1944+ if ((jN == jN))
19161945 then nil
19171946 else throw("Strict value is not equal to itself.")
19181947 }
19191948 else nil
1920- if ((gg == gg))
1949+ if ((gk == gk))
19211950 then {
1922- let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1923- if ((jq == jq))
1951+ let jv = invoke(as(), "withdrawLocked", [jD], nil)
1952+ if ((jv == jv))
19241953 then {
1925- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1926- if ((iy == iy))
1954+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1955+ if ((iC == iC))
19271956 then {
1928- let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1929- if ((hX == hX))
1930- then (((he(cp) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hf(cg.caller, jz)) ++ hi(jB))
1957+ let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1958+ if ((ib == ib))
1959+ then (((hi(cq) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hj(ch.caller, jE)) ++ hm(jG))
19311960 else throw("Strict value is not equal to itself.")
19321961 }
19331962 else throw("Strict value is not equal to itself.")
19441973
19451974
19461975
1947-@Callable(cg)
1976+@Callable(ch)
19481977 func payFunding () = {
1949- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1950- if ((hB == hB))
1978+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1979+ if ((hF == hF))
19511980 then {
1952- let jJ = bN()
1953- if (if (if ((jJ > lastBlock.timestamp))
1954- then true
1955- else !(cx()))
1956- then true
1957- else cy())
1958- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
1981+ let jO = bO()
1982+ if (if (if ((jO > lastBlock.timestamp))
1983+ then true
1984+ else !(cy()))
1985+ then true
1986+ else cz())
1987+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jO)))
19591988 else {
1960- let fG = dz()
1961- let jK = fF()
1962- let fJ = jK._1
1963- let fK = jK._2
1964- gA((jJ + bQ()), (bY() + fK), (bZ() + fJ), aR(fK, fG), aR(fJ, fG))
1989+ let fK = dA()
1990+ let jP = fJ()
1991+ let fN = jP._1
1992+ let fO = jP._2
1993+ gE((jO + bR()), (bZ() + fO), (ca() + fN), aS(fO, fK), aS(fN, fK))
19651994 }
19661995 }
19671996 else throw("Strict value is not equal to itself.")
19691998
19701999
19712000
1972-@Callable(cg)
2001+@Callable(ch)
19732002 func syncTerminalPriceToOracle () = {
1974- let cH = bF()
1975- let cJ = bG()
1976- let jL = fB(dz(), cH, cJ)
1977- let hr = jL._1
1978- let hs = jL._2
1979- let eI = jL._3
1980- let ht = if ((eI != 0))
2003+ let cI = bG()
2004+ let cK = bH()
2005+ let jQ = fF(dA(), cI, cK)
2006+ let hv = jQ._1
2007+ let hw = jQ._2
2008+ let eM = jQ._3
2009+ let hx = if ((eM != 0))
19812010 then {
1982- let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1983- if ((ht == ht))
2011+ let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2012+ if ((hx == hx))
19842013 then nil
19852014 else throw("Strict value is not equal to itself.")
19862015 }
19872016 else nil
1988- if ((ht == ht))
1989- then (gW(hr, hs) ++ gO(aR(aT(cH, hr), aT(cJ, hs))))
2017+ if ((hx == hx))
2018+ then (ha(hv, hw) ++ gS(aS(aU(cI, hv), aU(cK, hw))))
19902019 else throw("Strict value is not equal to itself.")
19912020 }
19922021
19932022
19942023
1995-@Callable(cg)
1996-func view_calcRemainMarginWithFundingPayment (cp) = {
1997- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1998- if ((hB == hB))
2024+@Callable(ch)
2025+func view_calcRemainMarginWithFundingPayment (cq) = {
2026+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2027+ if ((hF == hF))
19992028 then {
2000- let jM = co(cp)
2001- let cs = jM._1
2002- let ek = jM._2
2003- let et = jM._3
2004- let em = jM._4
2005- let jN = ei(cp, aN)
2006- let dZ = jN._1
2007- let eh = jN._2
2008- let jO = dd(cs, ek, em, eh)
2009- let dm = jO._1
2010- let dn = jO._2
2011- let di = jO._3
2012- throw((((((aP(dm) + aP(di)) + aP(ew(cp))) + aP(eh)) + aP(dn)) + aP(dZ)))
2029+ let jR = cp(cq)
2030+ let ct = jR._1
2031+ let eo = jR._2
2032+ let ex = jR._3
2033+ let eq = jR._4
2034+ let jS = em(cq, aO)
2035+ let ed = jS._1
2036+ let el = jS._2
2037+ let jT = de(ct, eo, eq, el)
2038+ let dn = jT._1
2039+ let do = jT._2
2040+ let dj = jT._3
2041+ throw((((((aQ(dn) + aQ(dj)) + aQ(eA(cq))) + aQ(el)) + aQ(do)) + aQ(ed)))
20132042 }
20142043 else throw("Strict value is not equal to itself.")
20152044 }
20162045
20172046
20182047
2019-@Callable(cg)
2020-func view_getPegAdjustCost (gP) = {
2021- let cH = bF()
2022- let cJ = bG()
2023- let fA = fB(gP, cH, cJ)
2024- throw(toString(fA._3))
2025- }
2026-
2027-
2028-
2029-@Callable(cg)
2048+@Callable(ch)
2049+func view_getPegAdjustCost (gT) = {
2050+ let cI = bG()
2051+ let cK = bH()
2052+ let fE = fF(gT, cI, cK)
2053+ throw(toString(fE._3))
2054+ }
2055+
2056+
2057+
2058+@Callable(ch)
20302059 func view_getTerminalAmmPrice () = {
2031- let jP = fe()
2032- let fi = jP._1
2033- let fj = jP._2
2034- let hm = aR(aT(fi, bH()), aT(fj, bI()))
2035- throw(toString(hm))
2036- }
2037-
2038-
2039-
2040-@Callable(cg)
2060+ let jU = fi()
2061+ let fm = jU._1
2062+ let fn = jU._2
2063+ let hq = aS(aU(fm, bI()), aU(fn, bJ()))
2064+ throw(toString(hq))
2065+ }
2066+
2067+
2068+
2069+@Callable(ch)
20412070 func view_getFunding () = {
2042- let fG = dz()
2043- let jQ = fF()
2044- let fJ = jQ._1
2045- let fK = jQ._2
2046- let jR = aR(fK, fG)
2047- let jS = aR(fJ, fG)
2048- throw((((aP(jR) + aP(jS)) + aP(eO())) + aP(dz())))
2049- }
2050-
2051-
2052-
2053-@Callable(cg)
2054-func view_getBorrowedByTrader (cp) = {
2055- let jT = ga(cp)
2056- let iJ = jT._1
2057- let iK = jT._2
2058- throw((aP(iJ) + iK))
2059- }
2060-
2061-
2062-
2063-@Callable(cg)
2071+ let fK = dA()
2072+ let jV = fJ()
2073+ let fN = jV._1
2074+ let fO = jV._2
2075+ let jW = aS(fO, fK)
2076+ let jX = aS(fN, fK)
2077+ throw((((aQ(jW) + aQ(jX)) + aQ(eS())) + aQ(dA())))
2078+ }
2079+
2080+
2081+
2082+@Callable(ch)
2083+func view_getBorrowedByTrader (cq) = {
2084+ let jY = ge(cq)
2085+ let iN = jY._1
2086+ let iO = jY._2
2087+ throw((aQ(iN) + iO))
2088+ }
2089+
2090+
2091+
2092+@Callable(ch)
20642093 func computeSpotPrice () = {
2065- let fA = dS()
2066- $Tuple2(nil, fA)
2067- }
2068-
2069-
2070-
2071-@Callable(cg)
2072-func computeFeeForTraderWithArtifact (cp,fM) = {
2073- let fA = gd(cp, fM)
2074- $Tuple2(nil, fA)
2075- }
2076-
2077-
2078-@Verifier(jU)
2079-func jV () = sigVerify(jU.bodyBytes, jU.proofs[0], an())
2094+ let fE = dW()
2095+ $Tuple2(nil, fE)
2096+ }
2097+
2098+
2099+
2100+@Callable(ch)
2101+func computeFeeForTraderWithArtifact (cq,fQ) = {
2102+ let fE = gh(cq, fQ)
2103+ $Tuple2(nil, fE)
2104+ }
2105+
2106+
2107+@Verifier(jZ)
2108+func ka () = sigVerify(jZ.bodyBytes, jZ.proofs[0], ao())
20802109
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
8-let c = "k_ora"
9-
10-let d = "k_balance"
11-
12-let e = "k_sequence"
13-
14-let f = "k_positionSize"
15-
16-let g = "k_positionMargin"
17-
18-let h = "k_positionOpenNotional"
19-
20-let i = "k_positionFraction"
21-
22-let j = "k_positionSequence"
23-
24-let k = "k_positionAsset"
25-
26-let l = "k_initialized"
27-
28-let m = "k_paused"
29-
30-let n = "k_closeOnly"
31-
32-let o = "k_fee"
33-
34-let p = "k_fundingPeriod"
35-
36-let q = "k_initMarginRatio"
37-
38-let r = "k_mmr"
39-
40-let s = "k_liquidationFeeRatio"
41-
42-let t = "k_partLiquidationRatio"
43-
44-let u = "k_spreadLimit"
45-
46-let v = "k_maxPriceImpact"
47-
48-let w = "k_maxPriceSpread"
49-
50-let x = "k_maxOpenNotional"
51-
52-let y = "k_feeToStakersPercent"
53-
54-let z = "k_maxOracleDelay"
55-
56-let A = "k_lastDataStr"
57-
58-let B = "k_lastMinuteId"
59-
60-let C = "k_twapDataLastCumulativePrice"
61-
62-let D = "k_twapDataLastPrice"
63-
64-let E = "k_twapDataPreviousMinuteId"
65-
66-let F = "k_latestLongPremiumFraction"
67-
68-let G = "k_latestShortPremiumFraction"
69-
70-let H = "k_nextFundingBlockMinTimestamp"
71-
72-let I = "k_longFundingRate"
73-
74-let J = "k_shortFundingRate"
75-
76-let K = "k_qtAstR"
77-
78-let L = "k_bsAstR"
79-
80-let M = "k_qtAstW"
81-
82-let N = "k_bsAstW"
83-
84-let O = "k_totalPositionSize"
85-
86-let P = "k_totalLongPositionSize"
87-
88-let Q = "k_totalShortPositionSize"
89-
90-let R = "k_openInterestNotional"
91-
92-let S = "k_openInterestShort"
93-
94-let T = "k_openInterestLong"
95-
96-let U = "k_coordinatorAddress"
97-
98-let V = "k_vault_address"
99-
100-let W = "k_admin_address"
101-
102-let X = "k_admin_public_key"
103-
104-let Y = "k_quote_asset"
105-
106-let Z = "k_quote_staking"
107-
108-let aa = "k_staking_address"
109-
110-let ab = "k_miner_address"
111-
112-let ac = "k_orders_address"
113-
114-let ad = "k_referral_address"
115-
116-let ae = "k_collateral_address"
117-
118-let af = "k_exchange_address"
119-
120-let ag = "k_nft_manager_address"
121-
122-let ah = "k_trader_market_asset_collateral"
123-
124-func ai (aj,ak) = ((aj + "_") + ak)
125-
126-
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, U)), "Coordinator not set")
128-
129-
130-func am () = addressFromString(getStringValue(al(), W))
131-
132-
133-func an () = fromBase58String(getStringValue(al(), X))
134-
135-
136-func ao () = fromBase58String(getStringValue(al(), Y))
137-
138-
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), Z)), "Quote asset staking not set")
140-
141-
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), aa)), "Staking not set")
143-
144-
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), V)), "Vault not set")
146-
147-
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Miner not set")
149-
150-
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Orders not set")
152-
153-
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Referral not set")
155-
156-
157-func av () = valueOrErrorMessage(addressFromString(getStringValue(al(), ag)), "NFT Manager not set")
158-
159-
160-func aw () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Collateral Manager not set")
161-
162-
163-func ax () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(al(), af), "No swap address")), "Invalid swap address")
164-
165-
166-let ay = "k_whitelist_asset"
167-
168-func az (aA) = valueOrElse(getBoolean(aw(), ai(ay, aA)), false)
169-
170-
171-let aB = "k_token_param"
172-
173-let aC = "k_token_type"
174-
175-let aD = "fee_reduction"
176-
177-let aE = 1
178-
179-let aF = 2
180-
181-let aG = 15
8+let c = "k_ora_open_key"
9+
10+let d = "k_ora"
11+
12+let e = "k_balance"
13+
14+let f = "k_sequence"
15+
16+let g = "k_positionSize"
17+
18+let h = "k_positionMargin"
19+
20+let i = "k_positionOpenNotional"
21+
22+let j = "k_positionFraction"
23+
24+let k = "k_positionSequence"
25+
26+let l = "k_positionAsset"
27+
28+let m = "k_initialized"
29+
30+let n = "k_paused"
31+
32+let o = "k_closeOnly"
33+
34+let p = "k_fee"
35+
36+let q = "k_fundingPeriod"
37+
38+let r = "k_initMarginRatio"
39+
40+let s = "k_mmr"
41+
42+let t = "k_liquidationFeeRatio"
43+
44+let u = "k_partLiquidationRatio"
45+
46+let v = "k_spreadLimit"
47+
48+let w = "k_maxPriceImpact"
49+
50+let x = "k_maxPriceSpread"
51+
52+let y = "k_maxOpenNotional"
53+
54+let z = "k_feeToStakersPercent"
55+
56+let A = "k_maxOracleDelay"
57+
58+let B = "k_lastDataStr"
59+
60+let C = "k_lastMinuteId"
61+
62+let D = "k_twapDataLastCumulativePrice"
63+
64+let E = "k_twapDataLastPrice"
65+
66+let F = "k_twapDataPreviousMinuteId"
67+
68+let G = "k_latestLongPremiumFraction"
69+
70+let H = "k_latestShortPremiumFraction"
71+
72+let I = "k_nextFundingBlockMinTimestamp"
73+
74+let J = "k_longFundingRate"
75+
76+let K = "k_shortFundingRate"
77+
78+let L = "k_qtAstR"
79+
80+let M = "k_bsAstR"
81+
82+let N = "k_qtAstW"
83+
84+let O = "k_bsAstW"
85+
86+let P = "k_totalPositionSize"
87+
88+let Q = "k_totalLongPositionSize"
89+
90+let R = "k_totalShortPositionSize"
91+
92+let S = "k_openInterestNotional"
93+
94+let T = "k_openInterestShort"
95+
96+let U = "k_openInterestLong"
97+
98+let V = "k_coordinatorAddress"
99+
100+let W = "k_vault_address"
101+
102+let X = "k_admin_address"
103+
104+let Y = "k_admin_public_key"
105+
106+let Z = "k_quote_asset"
107+
108+let aa = "k_quote_staking"
109+
110+let ab = "k_staking_address"
111+
112+let ac = "k_miner_address"
113+
114+let ad = "k_orders_address"
115+
116+let ae = "k_referral_address"
117+
118+let af = "k_collateral_address"
119+
120+let ag = "k_exchange_address"
121+
122+let ah = "k_nft_manager_address"
123+
124+let ai = "k_trader_market_asset_collateral"
125+
126+func aj (ak,al) = ((ak + "_") + al)
127+
128+
129+func am () = valueOrErrorMessage(addressFromString(getStringValue(this, V)), "Coordinator not set")
130+
131+
132+func an () = addressFromString(getStringValue(am(), X))
133+
134+
135+func ao () = fromBase58String(getStringValue(am(), Y))
136+
137+
138+func ap () = fromBase58String(getStringValue(am(), Z))
139+
140+
141+func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), aa)), "Quote asset staking not set")
142+
143+
144+func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), ab)), "Staking not set")
145+
146+
147+func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), W)), "Vault not set")
148+
149+
150+func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Miner not set")
151+
152+
153+func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Orders not set")
154+
155+
156+func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Referral not set")
157+
158+
159+func aw () = valueOrErrorMessage(addressFromString(getStringValue(am(), ah)), "NFT Manager not set")
160+
161+
162+func ax () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Collateral Manager not set")
163+
164+
165+func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(am(), ag), "No swap address")), "Invalid swap address")
166+
167+
168+let az = "k_whitelist_asset"
169+
170+func aA (aB) = valueOrElse(getBoolean(ax(), aj(az, aB)), false)
171+
172+
173+let aC = "k_token_param"
174+
175+let aD = "k_token_type"
176+
177+let aE = "fee_reduction"
178+
179+let aF = 1
180+
181+let aG = 2
182182
183183 let aH = 15
184184
185-let aI = 1000
186-
187-let aJ = 6
188-
189-let aK = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
190-
191-let aL = (86400 * aK)
192-
193-let aM = 100
194-
195-let aN = 1
196-
197-let aO = 2
198-
199-func aP (aQ) = (toString(aQ) + ",")
200-
201-
202-func aR (aQ,aS) = fraction(aQ, aK, aS, HALFEVEN)
203-
204-
205-func aT (aQ,aS) = fraction(aQ, aS, aK, HALFEVEN)
206-
207-
208-func aU (aQ) = sqrt(aQ, aJ, aJ, HALFEVEN)
209-
210-
211-func aV (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
212-
213-
214-func aW (aQ,aS) = fraction(aQ, toBigInt(aK), aS, HALFEVEN)
215-
216-
217-func aX (aQ,aS) = fraction(aQ, aS, toBigInt(aK), HALFEVEN)
218-
219-
220-func aY (aQ) = sqrtBigInt(aQ, aJ, aJ, HALFEVEN)
221-
222-
223-func aZ (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
224-
225-
226-func ba (aQ) = if ((aQ > 0))
227- then aQ
228- else -(aQ)
229-
230-
231-func bb (aQ,aS) = if ((aQ >= aS))
232- then aQ
233- else aS
234-
235-
236-func bc (bd) = {
237- func be (bf,bg) = ((bf + bg) + ",")
238-
239- let bh = {
240- let bi = bd
241- let bj = size(bi)
242- let bk = ""
243- func bl (bm,bn) = if ((bn >= bj))
244- then bm
245- else be(bm, bi[bn])
246-
247- func bo (bm,bn) = if ((bn >= bj))
248- then bm
185+let aI = 15
186+
187+let aJ = 1000
188+
189+let aK = 6
190+
191+let aL = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
192+
193+let aM = (86400 * aL)
194+
195+let aN = 100
196+
197+let aO = 1
198+
199+let aP = 2
200+
201+func aQ (aR) = (toString(aR) + ",")
202+
203+
204+func aS (aR,aT) = fraction(aR, aL, aT, HALFEVEN)
205+
206+
207+func aU (aR,aT) = fraction(aR, aT, aL, HALFEVEN)
208+
209+
210+func aV (aR) = sqrt(aR, aK, aK, HALFEVEN)
211+
212+
213+func aW (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
214+
215+
216+func aX (aR,aT) = fraction(aR, toBigInt(aL), aT, HALFEVEN)
217+
218+
219+func aY (aR,aT) = fraction(aR, aT, toBigInt(aL), HALFEVEN)
220+
221+
222+func aZ (aR) = sqrtBigInt(aR, aK, aK, HALFEVEN)
223+
224+
225+func ba (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
226+
227+
228+func bb (aR) = if ((aR > 0))
229+ then aR
230+ else -(aR)
231+
232+
233+func bc (aR,aT) = if ((aR >= aT))
234+ then aR
235+ else aT
236+
237+
238+func bd (be) = {
239+ func bf (bg,bh) = ((bg + bh) + ",")
240+
241+ let bi = {
242+ let bj = be
243+ let bk = size(bj)
244+ let bl = ""
245+ func bm (bn,bo) = if ((bo >= bk))
246+ then bn
247+ else bf(bn, bj[bo])
248+
249+ func bp (bn,bo) = if ((bo >= bk))
250+ then bn
249251 else throw("List size exceeds 20")
250252
251- bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
253+ bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
252254 }
253- let bp = dropRight(bh, 1)
254- let bq = if ((take(bp, 1) == ","))
255- then drop(bp, 1)
256- else bp
257- bq
258- }
259-
260-
261-func br (bs) = split(bs, ",")
262-
263-
264-func bt (bd,bu,bv) = if ((size(bd) > bu))
265- then (removeByIndex(bd, 0) :+ bv)
266- else (bd :+ bv)
267-
268-
269-func bw (bx) = valueOrErrorMessage(getInteger(this, bx), ("no value for " + bx))
270-
271-
272-func by (bx,bz) = valueOrElse(getInteger(this, bx), bz)
273-
274-
275-func bA (ak,aj) = {
276- let bg = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
277- bg
278- }
279-
280-
281-func bB (ak,aj) = {
282- let bg = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
283- bg
284- }
285-
286-
287-func bC () = bw(d)
288-
289-
290-func bD () = bw(o)
291-
292-
293-func bE () = bw(q)
294-
295-
296-func bF () = bw(K)
297-
298-
299-func bG () = bw(L)
300-
301-
302-func bH () = by(M, aK)
303-
304-
305-func bI () = by(N, aK)
306-
307-
308-func bJ () = bw(O)
309-
310-
311-func bK () = bw(R)
312-
313-
314-func bL () = bw(S)
315-
316-
317-func bM () = bw(T)
318-
319-
320-func bN () = bw(H)
321-
322-
323-func bO () = bw(p)
324-
325-
326-func bP () = (bO() * aK)
327-
328-
329-func bQ () = (bO() * aI)
330-
331-
332-func bR () = bw(r)
333-
334-
335-func bS () = bw(s)
336-
337-
338-func bT () = bw(t)
339-
340-
341-func bU () = bw(u)
342-
343-
344-func bV () = bw(v)
345-
346-
347-func bW () = bw(w)
348-
349-
350-func bX () = bw(x)
351-
352-
353-func bY () = bw(F)
354-
355-
356-func bZ () = bw(G)
357-
358-
359-func ca () = bw(Q)
360-
361-
362-func cb () = bw(P)
363-
364-
365-func cc () = by(e, 0)
366-
367-
368-func cd () = bw(y)
369-
370-
371-func ce () = bw(z)
372-
373-
374-func cf (cg) = valueOrElse(getString(at(), "k_sender"), toString(cg.caller))
375-
376-
377-func ch (ci,cj,ck) = {
378- let cl = (ci - cj)
379- if (if (ck)
380- then (0 > cl)
255+ let bq = dropRight(bi, 1)
256+ let br = if ((take(bq, 1) == ","))
257+ then drop(bq, 1)
258+ else bq
259+ br
260+ }
261+
262+
263+func bs (bt) = split(bt, ",")
264+
265+
266+func bu (be,bv,bw) = if ((size(be) > bv))
267+ then (removeByIndex(be, 0) :+ bw)
268+ else (be :+ bw)
269+
270+
271+func bx (by) = valueOrErrorMessage(getInteger(this, by), ("no value for " + by))
272+
273+
274+func bz (by,bA) = valueOrElse(getInteger(this, by), bA)
275+
276+
277+func bB (al,ak) = {
278+ let bh = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
279+ bh
280+ }
281+
282+
283+func bC (al,ak) = {
284+ let bh = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
285+ bh
286+ }
287+
288+
289+func bD () = bx(e)
290+
291+
292+func bE () = bx(p)
293+
294+
295+func bF () = bx(r)
296+
297+
298+func bG () = bx(L)
299+
300+
301+func bH () = bx(M)
302+
303+
304+func bI () = bz(N, aL)
305+
306+
307+func bJ () = bz(O, aL)
308+
309+
310+func bK () = bx(P)
311+
312+
313+func bL () = bx(S)
314+
315+
316+func bM () = bx(T)
317+
318+
319+func bN () = bx(U)
320+
321+
322+func bO () = bx(I)
323+
324+
325+func bP () = bx(q)
326+
327+
328+func bQ () = (bP() * aL)
329+
330+
331+func bR () = (bP() * aJ)
332+
333+
334+func bS () = bx(s)
335+
336+
337+func bT () = bx(t)
338+
339+
340+func bU () = bx(u)
341+
342+
343+func bV () = bx(v)
344+
345+
346+func bW () = bx(w)
347+
348+
349+func bX () = bx(x)
350+
351+
352+func bY () = bx(y)
353+
354+
355+func bZ () = bx(G)
356+
357+
358+func ca () = bx(H)
359+
360+
361+func cb () = bx(R)
362+
363+
364+func cc () = bx(Q)
365+
366+
367+func cd () = bz(f, 0)
368+
369+
370+func ce () = bx(z)
371+
372+
373+func cf () = bx(A)
374+
375+
376+func cg (ch) = valueOrElse(getString(au(), "k_sender"), toString(ch.caller))
377+
378+
379+func ci (cj,ck,cl) = {
380+ let cm = (cj - ck)
381+ if (if (cl)
382+ then (0 > cm)
381383 else false)
382384 then throw("Invalid margin")
383- else if (if (!(ck))
384- then (cl >= 0)
385+ else if (if (!(cl))
386+ then (cm >= 0)
385387 else false)
386388 then throw("Invalid margin")
387389 else true
388390 }
389391
390392
391-func cm (cn) = if ((cn == 0))
393+func cn (co) = if ((co == 0))
392394 then throw("Should not be called with _positionSize == 0")
393- else if ((cn > 0))
394- then bY()
395- else bZ()
396-
397-
398-func co (cp) = {
399- let cq = getInteger(this, ai(f, cp))
400- let cr = cq
401- if ($isInstanceOf(cr, "Int"))
395+ else if ((co > 0))
396+ then bZ()
397+ else ca()
398+
399+
400+func cp (cq) = {
401+ let cr = getInteger(this, aj(g, cq))
402+ let cs = cr
403+ if ($isInstanceOf(cs, "Int"))
402404 then {
403- let cs = cr
404- $Tuple4(cs, getIntegerValue(this, ai(g, cp)), getIntegerValue(this, ai(h, cp)), getIntegerValue(this, ai(i, cp)))
405+ let ct = cs
406+ $Tuple4(ct, getIntegerValue(this, aj(h, cq)), getIntegerValue(this, aj(i, cq)), getIntegerValue(this, aj(j, cq)))
405407 }
406408 else $Tuple4(0, 0, 0, 0)
407409 }
408410
409411
410-func ct (cp) = {
411- let cu = getString(this, ai(k, cp))
412- let cr = cu
413- if ($isInstanceOf(cr, "String"))
412+func cu (cq) = {
413+ let cv = getString(this, aj(l, cq))
414+ let cs = cv
415+ if ($isInstanceOf(cs, "String"))
414416 then {
415- let cv = cr
416- cv
417- }
418- else toBase58String(ao())
419- }
420-
421-
422-func cw (cp) = if ((co(cp)._1 == 0))
417+ let cw = cs
418+ cw
419+ }
420+ else toBase58String(ap())
421+ }
422+
423+
424+func cx (cq) = if ((cp(cq)._1 == 0))
423425 then throw("No open position")
424426 else true
425427
426428
427-func cx () = valueOrElse(getBoolean(this, l), false)
428-
429-
430429 func cy () = valueOrElse(getBoolean(this, m), false)
431430
432431
433432 func cz () = valueOrElse(getBoolean(this, n), false)
434433
435434
436-func cA (cB,cC,cD) = if (cB)
435+func cA () = valueOrElse(getBoolean(this, o), false)
436+
437+
438+func cB (cC,cD,cE) = if (cC)
437439 then {
438- let cE = (bG() - cD)
439- if ((0 >= cE))
440+ let cF = (bH() - cE)
441+ if ((0 >= cF))
440442 then throw("Tx lead to base asset reserve <= 0, revert")
441- else $Tuple3((bF() + cC), cE, (bJ() + cD))
443+ else $Tuple3((bG() + cD), cF, (bK() + cE))
442444 }
443445 else {
444- let cF = (bF() - cC)
445- if ((0 >= cF))
446+ let cG = (bG() - cD)
447+ if ((0 >= cG))
446448 then throw("Tx lead to base quote reserve <= 0, revert")
447- else $Tuple3(cF, (bG() + cD), (bJ() - cD))
449+ else $Tuple3(cG, (bH() + cE), (bK() - cE))
448450 }
449451
450452
451-func cG (cH,cI,cJ,cK) = {
452- let cL = toBigInt(cH)
453+func cH (cI,cJ,cK,cL) = {
453454 let cM = toBigInt(cI)
454455 let cN = toBigInt(cJ)
455456 let cO = toBigInt(cK)
456- aX(aX(cL, cM), aX(cN, cO))
457- }
458-
459-
460-func cP (cB,cC) = {
461- let cH = bF()
462- let cJ = bG()
463- let cI = bH()
464- let cK = bI()
465- let bx = cG(cH, cI, cJ, cK)
466- let cQ = if (cB)
467- then (cH + cC)
468- else (cH - cC)
469- let cR = toInt(aW(bx, toBigInt(aT(cQ, cI))))
470- let cS = aR(ba((cR - cJ)), cI)
471- let cT = if (cB)
472- then cS
473- else -(cS)
474- let cU = cA(cB, cC, cS)
475- let cV = cU._1
476- let cW = cU._2
477- let cX = cU._3
478- let cY = aR(aT(cH, cI), aT(cJ, cK))
479- let cZ = aR(cC, cS)
480- let da = ba((cY - cZ))
481- let db = (aK - aR(cY, (cY + da)))
482- let dc = bV()
483- if ((db > dc))
484- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(cH)) + " before base asset: ") + toString(cJ)) + " quote asset amount to exchange: ") + toString(cC)) + " price before: ") + toString(cY)) + " marketPrice: ") + toString(cZ)))
485- else $Tuple4(cT, cV, cW, cX)
486- }
487-
488-
489-func dd (de,df,dg,dh) = {
490- let di = if ((de != 0))
457+ let cP = toBigInt(cL)
458+ aY(aY(cM, cN), aY(cO, cP))
459+ }
460+
461+
462+func cQ (cC,cD) = {
463+ let cI = bG()
464+ let cK = bH()
465+ let cJ = bI()
466+ let cL = bJ()
467+ let by = cH(cI, cJ, cK, cL)
468+ let cR = if (cC)
469+ then (cI + cD)
470+ else (cI - cD)
471+ let cS = toInt(aX(by, toBigInt(aU(cR, cJ))))
472+ let cT = aS(bb((cS - cK)), cJ)
473+ let cU = if (cC)
474+ then cT
475+ else -(cT)
476+ let cV = cB(cC, cD, cT)
477+ let cW = cV._1
478+ let cX = cV._2
479+ let cY = cV._3
480+ let cZ = aS(aU(cI, cJ), aU(cK, cL))
481+ let da = aS(cD, cT)
482+ let db = bb((cZ - da))
483+ let dc = (aL - aS(cZ, (cZ + db)))
484+ let dd = bW()
485+ if ((dc > dd))
486+ then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(cI)) + " before base asset: ") + toString(cK)) + " quote asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cZ)) + " marketPrice: ") + toString(da)))
487+ else $Tuple4(cU, cW, cX, cY)
488+ }
489+
490+
491+func de (df,dg,dh,di) = {
492+ let dj = if ((df != 0))
491493 then {
492- let dj = cm(de)
493- aT((dj - dg), de)
494+ let dk = cn(df)
495+ aU((dk - dh), df)
494496 }
495497 else 0
496- let dk = ((dh - di) + df)
497- let dl = if ((0 > dk))
498- then $Tuple2(0, ba(dk))
499- else $Tuple2(ba(dk), 0)
500- let dm = dl._1
501- let dn = dl._2
502- $Tuple3(dm, dn, di)
503- }
504-
505-
506-func do (cB,cD,dp,dq,dr,ds,dt) = {
507- let cY = aR(aT(dq, dr), aT(ds, dt))
508- if ((cD == 0))
498+ let dl = ((di - dj) + dg)
499+ let dm = if ((0 > dl))
500+ then $Tuple2(0, bb(dl))
501+ else $Tuple2(bb(dl), 0)
502+ let dn = dm._1
503+ let do = dm._2
504+ $Tuple3(dn, do, dj)
505+ }
506+
507+
508+func dp (cC,cE,dq,dr,ds,dt,du) = {
509+ let cZ = aS(aU(dr, ds), aU(dt, du))
510+ if ((cE == 0))
509511 then throw("Invalid base asset amount")
510512 else {
511- let bx = cG(dq, dr, ds, dt)
512- let du = if (cB)
513- then (ds + cD)
514- else (ds - cD)
515- let dv = toInt(aW(bx, toBigInt(aT(du, dt))))
516- let dw = ba((dv - aT(dq, dr)))
517- let dc = bV()
518- let dx = cA(!(cB), dw, cD)
519- let cV = dx._1
520- let cW = dx._2
521- let cX = dx._3
522- let cZ = aR(dw, cD)
523- let da = ba((cY - cZ))
524- let db = (aK - aR(cY, (cY + da)))
525- if (if ((db > dc))
526- then dp
513+ let by = cH(dr, ds, dt, du)
514+ let dv = if (cC)
515+ then (dt + cE)
516+ else (dt - cE)
517+ let dw = toInt(aX(by, toBigInt(aU(dv, du))))
518+ let dx = bb((dw - aU(dr, ds)))
519+ let dd = bW()
520+ let dy = cB(!(cC), dx, cE)
521+ let cW = dy._1
522+ let cX = dy._2
523+ let cY = dy._3
524+ let da = aS(dx, cE)
525+ let db = bb((cZ - da))
526+ let dc = (aL - aS(cZ, (cZ + db)))
527+ if (if ((dc > dd))
528+ then dq
527529 else false)
528- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(dq)) + " before base asset: ") + toString(ds)) + " base asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cY)) + " market price: ") + toString(cZ)))
529- else $Tuple7(dw, cV, cW, cX, (cb() - (if (cB)
530- then ba(cD)
531- else 0)), (ca() - (if (!(cB))
532- then ba(cD)
533- else 0)), db)
534- }
535- }
536-
537-
538-func dy (cB,cD,dp) = do(cB, cD, dp, bF(), bH(), bG(), bI())
539-
540-
541-func dz () = {
542- let dA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
543- let dB = getStringValue(this, a)
544- let dC = valueOrErrorMessage(getInteger(dA, dB), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + dB))
545- let dD = valueOrElse(getString(this, b), "")
546- if ((dD != ""))
530+ then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(dr)) + " before base asset: ") + toString(dt)) + " base asset amount to exchange: ") + toString(cE)) + " price before: ") + toString(cZ)) + " market price: ") + toString(da)))
531+ else $Tuple7(dx, cW, cX, cY, (cc() - (if (cC)
532+ then bb(cE)
533+ else 0)), (cb() - (if (!(cC))
534+ then bb(cE)
535+ else 0)), dc)
536+ }
537+ }
538+
539+
540+func dz (cC,cE,dq) = dp(cC, cE, dq, bG(), bI(), bH(), bJ())
541+
542+
543+func dA () = {
544+ let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
545+ let dC = getStringValue(this, a)
546+ let dD = valueOrErrorMessage(getInteger(dB, dC), ((("Can not get oracle price. Oracle: " + toString(dB)) + " key: ") + dC))
547+ let dE = valueOrElse(getString(this, b), "")
548+ if ((dE != ""))
547549 then {
548- let dE = lastBlock.height
549- let dF = valueOrErrorMessage(getInteger(dA, dD), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + dD))
550- if (((dE - dF) > ce()))
551- then throw(((("Oracle stale data. Last oracle block: " + toString(dF)) + " current block: ") + toString(dE)))
552- else dC
553- }
554- else dC
555- }
556-
557-
558-func dG (dH,dq,ds,cI,cK) = {
559- let dI = aR(aT(dq, cI), aT(ds, cK))
560- let dJ = aR((dH + dI), (2 * aK))
561- let dG = aR(ba((dH - dI)), dJ)
562- dG
563- }
564-
565-
566-func dK (dq,ds) = {
567- let dL = dz()
568- let cI = bH()
569- let cK = bI()
570- let dM = dG(dL, bF(), bG(), cI, cK)
571- let dN = dG(dL, dq, ds, cI, cK)
572- if (if ((dN > bW()))
573- then (dN > dM)
550+ let dF = lastBlock.height
551+ let dG = valueOrErrorMessage(getInteger(dB, dE), ((("Can not get oracle block. Oracle: " + toString(dB)) + " key: ") + dE))
552+ if (((dF - dG) > cf()))
553+ then throw(((("Oracle stale data. Last oracle block: " + toString(dG)) + " current block: ") + toString(dF)))
554+ else dD
555+ }
556+ else dD
557+ }
558+
559+
560+func dH () = {
561+ let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
562+ let dI = valueOrElse(getString(this, c), "")
563+ if ((dI != ""))
564+ then {
565+ let dJ = valueOrErrorMessage(getBoolean(dB, dI), ((("Can not get oracle is open/closed. Oracle: " + toString(dB)) + " key: ") + dI))
566+ !(dJ)
567+ }
568+ else false
569+ }
570+
571+
572+func dK (dL,dr,dt,cJ,cL) = {
573+ let dM = aS(aU(dr, cJ), aU(dt, cL))
574+ let dN = aS((dL + dM), (2 * aL))
575+ let dK = aS(bb((dL - dM)), dN)
576+ dK
577+ }
578+
579+
580+func dO (dr,dt) = {
581+ let dP = dA()
582+ let cJ = bI()
583+ let cL = bJ()
584+ let dQ = dK(dP, bG(), bH(), cJ, cL)
585+ let dR = dK(dP, dr, dt, cJ, cL)
586+ if (if ((dR > bX()))
587+ then (dR > dQ)
574588 else false)
575- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bW())))
589+ then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bX())))
576590 else true
577591 }
578592
579593
580-func dO (dP,dQ) = {
581- let dR = bX()
582- if ((dP > dR))
583- then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
584- else if ((dQ > dR))
585- then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
594+func dS (dT,dU) = {
595+ let dV = bY()
596+ if ((dT > dV))
597+ then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
598+ else if ((dU > dV))
599+ then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
586600 else true
587601 }
588602
589603
590-func dS () = {
591- let dq = bF()
592- let ds = bG()
593- let cI = bH()
594- let cK = bI()
595- aR(aT(dq, cI), aT(ds, cK))
596- }
597-
598-
599-func dT () = {
600- let dL = dz()
601- let dU = dS()
602- (aR(ba((dL - dU)), dL) > bU())
603- }
604-
605-
606-func dV (cn,dW,dq,dr,ds,dt) = {
607- let dX = ba(cn)
608- let dY = (0 > cn)
609- let dZ = if ((dW == aN))
604+func dW () = {
605+ let dr = bG()
606+ let dt = bH()
607+ let cJ = bI()
608+ let cL = bJ()
609+ aS(aU(dr, cJ), aU(dt, cL))
610+ }
611+
612+
613+func dX () = {
614+ let dP = dA()
615+ let dY = dW()
616+ (aS(bb((dP - dY)), dP) > bV())
617+ }
618+
619+
620+func dZ (co,ea,dr,ds,dt,du) = {
621+ let eb = bb(co)
622+ let ec = (0 > co)
623+ let ed = if ((ea == aO))
610624 then {
611- let ea = do(!(dY), dX, false, dq, dr, ds, dt)
612- let eb = ea._1
613- let ec = ea._2
614- let ed = ea._3
615- let ee = ea._4
616- eb
617- }
618- else aT(dX, dz())
619- dZ
620- }
621-
622-
623-func ef (cn,eg,dq,dr,ds,dt,dW) = if ((cn == 0))
625+ let ee = dp(!(ec), eb, false, dr, ds, dt, du)
626+ let ef = ee._1
627+ let eg = ee._2
628+ let eh = ee._3
629+ let ei = ee._4
630+ ef
631+ }
632+ else aU(eb, dA())
633+ ed
634+ }
635+
636+
637+func ej (co,ek,dr,ds,dt,du,ea) = if ((co == 0))
624638 then throw("Invalid position size")
625639 else {
626- let dY = (0 > cn)
627- let dZ = dV(cn, dW, dq, dr, ds, dt)
628- let eh = if (dY)
629- then (eg - dZ)
630- else (dZ - eg)
631- $Tuple2(dZ, eh)
640+ let ec = (0 > co)
641+ let ed = dZ(co, ea, dr, ds, dt, du)
642+ let el = if (ec)
643+ then (ek - ed)
644+ else (ed - ek)
645+ $Tuple2(ed, el)
632646 }
633647
634648
635-func ei (cp,dW) = {
636- let ej = co(cp)
637- let cs = ej._1
638- let ek = ej._2
639- let el = ej._3
640- let em = ej._4
641- ef(cs, el, bF(), bH(), bG(), bI(), dW)
642- }
643-
644-
645-func en (eo,ep,eq) = aR((eo - ep), eq)
646-
647-
648-func er (cp,dW) = {
649- let es = co(cp)
650- let cs = es._1
651- let ek = es._2
652- let et = es._3
653- let em = es._4
654- let eu = ei(cp, dW)
655- let dZ = eu._1
656- let eh = eu._2
657- let ev = dd(cs, ek, em, eh)
658- let dm = ev._1
659- let dn = ev._2
660- en(dm, dn, dZ)
661- }
662-
663-
664-func ew (cp) = er(cp, aN)
665-
666-
667-func ex (cp,cn) = {
668- let ey = bb(bT(), (aK - aR(ew(cp), bR())))
669- let ez = aT(ba(cn), ey)
670- let eA = dy((cn > 0), ez, false)
671- let eB = eA._1
672- let db = eA._7
673- if ((bV() > db))
674- then eB
649+func em (cq,ea) = {
650+ let en = cp(cq)
651+ let ct = en._1
652+ let eo = en._2
653+ let ep = en._3
654+ let eq = en._4
655+ ej(ct, ep, bG(), bI(), bH(), bJ(), ea)
656+ }
657+
658+
659+func er (es,et,eu) = aS((es - et), eu)
660+
661+
662+func ev (cq,ea) = {
663+ let ew = cp(cq)
664+ let ct = ew._1
665+ let eo = ew._2
666+ let ex = ew._3
667+ let eq = ew._4
668+ let ey = em(cq, ea)
669+ let ed = ey._1
670+ let el = ey._2
671+ let ez = de(ct, eo, eq, el)
672+ let dn = ez._1
673+ let do = ez._2
674+ er(dn, do, ed)
675+ }
676+
677+
678+func eA (cq) = ev(cq, aO)
679+
680+
681+func eB (cq,co) = {
682+ let eC = bc(bU(), (aL - aS(eA(cq), bS())))
683+ let eD = aU(bb(co), eC)
684+ let eE = dz((co > 0), eD, false)
685+ let eF = eE._1
686+ let dc = eE._7
687+ if ((bW() > dc))
688+ then eF
675689 else {
676- let eC = aT(ba(cn), bT())
677- let eD = dy((cn > 0), eC, false)._1
678- eD
679- }
680- }
681-
682-
683-func eE (cp,dp) = {
684- let eF = co(cp)
685- let cs = eF._1
686- let ek = eF._2
687- let el = eF._3
688- let em = eF._4
689- let eh = ei(cp, aN)._2
690- let eG = dd(cs, ek, em, eh)
691- let dm = eG._1
692- let dn = eG._2
693- let eC = -(cs)
694- let eH = eh
695- let eI = -(dm)
696- let eJ = dy((cs > 0), ba(cs), dp)
697- let eD = eJ._1
698- let cQ = eJ._2
699- let cR = eJ._3
700- let eK = eJ._4
701- let eL = eJ._5
702- let eM = eJ._6
703- let eN = (bK() - el)
704- $Tuple13(eC, dn, eH, eI, cQ, cR, eK, eN, eD, eL, eM, (bM() - (if ((cs > 0))
705- then el
706- else 0)), (bL() - (if ((0 > cs))
707- then el
690+ let eG = aU(bb(co), bU())
691+ let eH = dz((co > 0), eG, false)._1
692+ eH
693+ }
694+ }
695+
696+
697+func eI (cq,dq) = {
698+ let eJ = cp(cq)
699+ let ct = eJ._1
700+ let eo = eJ._2
701+ let ep = eJ._3
702+ let eq = eJ._4
703+ let el = em(cq, aO)._2
704+ let eK = de(ct, eo, eq, el)
705+ let dn = eK._1
706+ let do = eK._2
707+ let eG = -(ct)
708+ let eL = el
709+ let eM = -(dn)
710+ let eN = dz((ct > 0), bb(ct), dq)
711+ let eH = eN._1
712+ let cR = eN._2
713+ let cS = eN._3
714+ let eO = eN._4
715+ let eP = eN._5
716+ let eQ = eN._6
717+ let eR = (bL() - ep)
718+ $Tuple13(eG, do, eL, eM, cR, cS, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
719+ then ep
720+ else 0)), (bM() - (if ((0 > ct))
721+ then ep
708722 else 0)))
709723 }
710724
711725
712-func eO () = {
713- let eP = ((lastBlock.timestamp / 1000) / 60)
714- let eQ = (eP - aG)
715- let eR = valueOrElse(getString(this, A), "")
716- let eS = split(eR, ",")
717- func eT (bf,eU) = if ((eQ >= parseIntValue(eU)))
718- then (bf :+ parseIntValue(eU))
719- else bf
720-
721- let eV = {
722- let bi = eS
723- let bj = size(bi)
724- let bk = nil
725- func bl (bm,bn) = if ((bn >= bj))
726- then bm
727- else eT(bm, bi[bn])
728-
729- func bo (bm,bn) = if ((bn >= bj))
730- then bm
726+func eS () = {
727+ let eT = ((lastBlock.timestamp / 1000) / 60)
728+ let eU = (eT - aH)
729+ let eV = valueOrElse(getString(this, B), "")
730+ let eW = split(eV, ",")
731+ func eX (bg,eY) = if ((eU >= parseIntValue(eY)))
732+ then (bg :+ parseIntValue(eY))
733+ else bg
734+
735+ let eZ = {
736+ let bj = eW
737+ let bk = size(bj)
738+ let bl = nil
739+ func bm (bn,bo) = if ((bo >= bk))
740+ then bn
741+ else eX(bn, bj[bo])
742+
743+ func bp (bn,bo) = if ((bo >= bk))
744+ then bn
731745 else throw("List size exceeds 20")
732746
733- bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
747+ bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
734748 }
735- let eW = if ((size(eV) > 0))
736- then max(eV)
737- else parseIntValue(eS[0])
738- let eX = valueOrElse(getInteger(this, B), 0)
739- let eY = valueOrElse(getInteger(this, ((C + "_") + toString(eX))), 0)
740- let eZ = valueOrElse(getInteger(this, ((D + "_") + toString(eX))), 0)
741- let fa = (eY + ((eP - eX) * eZ))
742- let fb = valueOrElse(getInteger(this, ((C + "_") + toString(eW))), 0)
743- let fc = valueOrElse(getInteger(this, ((D + "_") + toString(eW))), 0)
744- let fd = (fb + ((eQ - eW) * fc))
745- ((fa - fd) / aG)
746- }
747-
748-
749-func fe () = {
750- let cn = bJ()
751- if ((cn == 0))
752- then $Tuple2(bF(), bG())
749+ let fa = if ((size(eZ) > 0))
750+ then max(eZ)
751+ else parseIntValue(eW[0])
752+ let fb = valueOrElse(getInteger(this, C), 0)
753+ let fc = valueOrElse(getInteger(this, ((D + "_") + toString(fb))), 0)
754+ let fd = valueOrElse(getInteger(this, ((E + "_") + toString(fb))), 0)
755+ let fe = (fc + ((eT - fb) * fd))
756+ let ff = valueOrElse(getInteger(this, ((D + "_") + toString(fa))), 0)
757+ let fg = valueOrElse(getInteger(this, ((E + "_") + toString(fa))), 0)
758+ let fh = (ff + ((eU - fa) * fg))
759+ ((fe - fh) / aH)
760+ }
761+
762+
763+func fi () = {
764+ let co = bK()
765+ if ((co == 0))
766+ then $Tuple2(bG(), bH())
753767 else {
754- let ff = (cn > 0)
755- let fg = dy(ff, ba(cn), false)
756- let fh = fg._1
757- let fi = fg._2
758- let fj = fg._3
759- $Tuple2(fi, fj)
760- }
761- }
762-
763-
764-func fk (fl,bJ,fm,fn) = {
765- let fo = toBigInt(fl)
766- let fp = toBigInt(bJ)
767- let fq = toBigInt(fm)
768- let fr = toBigInt(fn)
769- let fs = aZ((fo + fp), toBigInt((2 * aK)))
770- let ft = aX(fq, fs)
771- let fu = (toBigInt(4) * aX(fr, fp))
772- let fv = aY(aX(ft, (fq - fu)))
773- let fw = aX(fo, fq)
774- let fx = aX(fq, fp)
775- let fy = ((-(fv) + fw) + fx)
776- let fz = (toBigInt(2) * aX(fq, fp))
777- let fA = aW(fy, fz)
778- toInt(fA)
779- }
780-
781-
782-func fB (fC,cH,cJ) = {
783- let cn = bJ()
784- if ((cn == 0))
768+ let fj = (co > 0)
769+ let fk = dz(fj, bb(co), false)
770+ let fl = fk._1
771+ let fm = fk._2
772+ let fn = fk._3
773+ $Tuple2(fm, fn)
774+ }
775+ }
776+
777+
778+func fo (fp,bK,fq,fr) = {
779+ let fs = toBigInt(fp)
780+ let ft = toBigInt(bK)
781+ let fu = toBigInt(fq)
782+ let fv = toBigInt(fr)
783+ let fw = ba((fs + ft), toBigInt((2 * aL)))
784+ let fx = aY(fu, fw)
785+ let fy = (toBigInt(4) * aY(fv, ft))
786+ let fz = aZ(aY(fx, (fu - fy)))
787+ let fA = aY(fs, fu)
788+ let fB = aY(fu, ft)
789+ let fC = ((-(fz) + fA) + fB)
790+ let fD = (toBigInt(2) * aY(fu, ft))
791+ let fE = aX(fC, fD)
792+ toInt(fE)
793+ }
794+
795+
796+func fF (fG,cI,cK) = {
797+ let co = bK()
798+ if ((co == 0))
785799 then {
786- let fD = aR(aT(fC, cJ), cH)
787- $Tuple3(fD, aK, 0)
800+ let fH = aS(aU(fG, cK), cI)
801+ $Tuple3(fH, aL, 0)
788802 }
789803 else {
790- let ff = (cn > 0)
791- let fh = dy(ff, ba(cn), false)._1
792- let fD = fk(cJ, cn, cH, fC)
793- let fE = aK
794- let eI = ef(cn, fh, cH, fD, cJ, fE, aN)._2
795- $Tuple3(fD, fE, eI)
796- }
797- }
798-
799-
800-func fF () = {
801- let fG = dz()
802- let fH = eO()
803- let fI = (fH - fG)
804- if (if ((ca() == 0))
804+ let fj = (co > 0)
805+ let fl = dz(fj, bb(co), false)._1
806+ let fH = fo(cK, co, cI, fG)
807+ let fI = aL
808+ let eM = ej(co, fl, cI, fH, cK, fI, aO)._2
809+ $Tuple3(fH, fI, eM)
810+ }
811+ }
812+
813+
814+func fJ () = {
815+ let fK = dA()
816+ let fL = eS()
817+ let fM = (fL - fK)
818+ if (if (if ((cb() == 0))
805819 then true
806- else (cb() == 0))
820+ else (cc() == 0))
821+ then true
822+ else dH())
807823 then $Tuple2(0, 0)
808- else if ((0 > fI))
824+ else if ((0 > fM))
809825 then {
810- let fJ = aR(aT(fI, bP()), aL)
811- let fK = aR(aT(fJ, ca()), cb())
812- $Tuple2(fJ, fK)
826+ let fN = aS(aU(fM, bQ()), aM)
827+ let fO = aS(aU(fN, cb()), cc())
828+ $Tuple2(fN, fO)
813829 }
814830 else {
815- let fK = aR(aT(fI, bP()), aL)
816- let fJ = aR(aT(fK, cb()), ca())
817- $Tuple2(fJ, fK)
831+ let fO = aS(aU(fM, bQ()), aM)
832+ let fN = aS(aU(fO, cc()), cb())
833+ $Tuple2(fN, fO)
818834 }
819835 }
820836
821837
822-func fL (fM,fN) = {
823- let fO = bD()
824- let fP = aT(fO, fN)
825- let fQ = if ((fM != ""))
838+func fP (fQ,fR) = {
839+ let fS = bE()
840+ let fT = aU(fS, fR)
841+ let fU = if ((fQ != ""))
826842 then {
827- let fR = bA(av(), ai(aC, fM))
828- if ((fR == aD))
843+ let fV = bB(aw(), aj(aD, fQ))
844+ if ((fV == aE))
829845 then {
830- let fS = bB(av(), ai(aB, fM))
831- let fT = aT(fP, fS)
832- $Tuple2(fT, true)
846+ let fW = bC(aw(), aj(aC, fQ))
847+ let fX = aU(fT, fW)
848+ $Tuple2(fX, true)
833849 }
834850 else throw("Invalid attached artifact")
835851 }
836- else $Tuple2(fP, false)
837- let fT = fQ._1
838- let fU = fQ._2
839- $Tuple2(fT, fU)
840- }
841-
842-
843-func fV (cp,aA) = {
844- let fW = co(cp)._1
845- if ((fW == 0))
852+ else $Tuple2(fT, false)
853+ let fX = fU._1
854+ let fY = fU._2
855+ $Tuple2(fX, fY)
856+ }
857+
858+
859+func fZ (cq,aB) = {
860+ let ga = cp(cq)._1
861+ if ((ga == 0))
846862 then true
847- else (ct(cp) == aA)
848- }
849-
850-
851-func fX (cp,aA) = (ct(cp) == aA)
852-
853-
854-func fY (fZ,aA,cp) = ((((((ah + "_") + fZ) + "_") + aA) + "_") + cp)
855-
856-
857-func ga (cp) = {
858- let cv = ct(cp)
859- if ((cv == toBase58String(ao())))
860- then $Tuple2(0, cv)
863+ else (cu(cq) == aB)
864+ }
865+
866+
867+func gb (cq,aB) = (cu(cq) == aB)
868+
869+
870+func gc (gd,aB,cq) = ((((((ai + "_") + gd) + "_") + aB) + "_") + cq)
871+
872+
873+func ge (cq) = {
874+ let cw = cu(cq)
875+ if ((cw == toBase58String(ap())))
876+ then $Tuple2(0, cw)
861877 else {
862- let gb = fY(toString(this), cv, cp)
863- let gc = valueOrElse(getInteger(aw(), gb), 0)
864- $Tuple2(gc, cv)
865- }
866- }
867-
868-
869-func gd (cp,fM) = {
870- let ge = invoke(as(), "computeFeeDiscount", [cp], nil)
871- if ((ge == ge))
878+ let gf = gc(toString(this), cw, cq)
879+ let gg = valueOrElse(getInteger(ax(), gf), 0)
880+ $Tuple2(gg, cw)
881+ }
882+ }
883+
884+
885+func gh (cq,fQ) = {
886+ let gi = invoke(at(), "computeFeeDiscount", [cq], nil)
887+ if ((gi == gi))
872888 then {
873- let gf = {
874- let cr = ge
875- if ($isInstanceOf(cr, "Int"))
889+ let gj = {
890+ let cs = gi
891+ if ($isInstanceOf(cs, "Int"))
876892 then {
877- let gg = cr
878- gg
893+ let gk = cs
894+ gk
879895 }
880896 else throw("Invalid computeFeeDiscount result")
881897 }
882- let gh = fL(fM, gf)
883- let fT = gh._1
884- let fU = gh._2
885- $Tuple2(fT, fU)
898+ let gl = fP(fQ, gj)
899+ let fX = gl._1
900+ let fY = gl._2
901+ $Tuple2(fX, fY)
886902 }
887903 else throw("Strict value is not equal to itself.")
888904 }
889905
890906
891-func gi (cg) = {
892- let gj = if ((size(cg.payments) > 1))
893- then toBase58String(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifactId"))
907+func gm (ch) = {
908+ let gn = if ((size(ch.payments) > 1))
909+ then toBase58String(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifactId"))
894910 else ""
895- gj
896- }
897-
898-
899-func gk (gl) = {
900- let gm = aT(gl, cd())
901- let gn = (gl - gm)
902- $Tuple2(gm, gn)
903- }
904-
905-
906-func go (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = [IntegerEntry(q, gp), IntegerEntry(r, gq), IntegerEntry(s, gr), IntegerEntry(p, gs), IntegerEntry(o, gt), IntegerEntry(u, gu), IntegerEntry(v, gv), IntegerEntry(t, gw), IntegerEntry(w, gx), IntegerEntry(x, dR), IntegerEntry(y, gy), IntegerEntry(z, gy)]
907-
908-
909-func gA (gB,gC,gD,gE,gF) = [IntegerEntry(H, gB), IntegerEntry(F, gC), IntegerEntry(G, gD), IntegerEntry(I, gE), IntegerEntry(J, gF)]
910-
911-
912-func gG (ak,aA) = [StringEntry(ai(k, ak), aA)]
913-
914-
915-func gH (gI,ak) = if (gI)
911+ gn
912+ }
913+
914+
915+func go (gp) = {
916+ let gq = aU(gp, ce())
917+ let gr = (gp - gq)
918+ $Tuple2(gq, gr)
919+ }
920+
921+
922+func gs (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = [IntegerEntry(r, gt), IntegerEntry(s, gu), IntegerEntry(t, gv), IntegerEntry(q, gw), IntegerEntry(p, gx), IntegerEntry(v, gy), IntegerEntry(w, gz), IntegerEntry(u, gA), IntegerEntry(x, gB), IntegerEntry(y, dV), IntegerEntry(z, gC), IntegerEntry(A, gC)]
923+
924+
925+func gE (gF,gG,gH,gI,gJ) = [IntegerEntry(I, gF), IntegerEntry(G, gG), IntegerEntry(H, gH), IntegerEntry(J, gI), IntegerEntry(K, gJ)]
926+
927+
928+func gK (al,aB) = [StringEntry(aj(l, al), aB)]
929+
930+
931+func gL (gM,al) = if (gM)
916932 then {
917- let gJ = cc()
918-[IntegerEntry(ai(j, ak), (gJ + 1)), IntegerEntry(e, (gJ + 1))]
933+ let gN = cd()
934+[IntegerEntry(aj(k, al), (gN + 1)), IntegerEntry(f, (gN + 1))]
919935 }
920936 else nil
921937
922938
923-func gK (ak,gL,gM,gN,dj) = [IntegerEntry(ai(f, ak), gL), IntegerEntry(ai(g, ak), gM), IntegerEntry(ai(h, ak), gN), IntegerEntry(ai(i, ak), dj)]
924-
925-
926-func gO (gP) = {
927- let eP = ((lastBlock.timestamp / 1000) / 60)
928- let gQ = valueOrElse(getInteger(this, B), 0)
929- if ((gQ > eP))
939+func gO (al,gP,gQ,gR,dk) = [IntegerEntry(aj(g, al), gP), IntegerEntry(aj(h, al), gQ), IntegerEntry(aj(i, al), gR), IntegerEntry(aj(j, al), dk)]
940+
941+
942+func gS (gT) = {
943+ let eT = ((lastBlock.timestamp / 1000) / 60)
944+ let gU = valueOrElse(getInteger(this, C), 0)
945+ if ((gU > eT))
930946 then throw("TWAP out-of-order")
931947 else {
932- let eX = if ((gQ == 0))
933- then eP
934- else gQ
935- if ((eP > gQ))
948+ let fb = if ((gU == 0))
949+ then eT
950+ else gU
951+ if ((eT > gU))
936952 then {
937- let gR = valueOrElse(getInteger(this, ((C + "_") + toString(gQ))), 0)
938- let gS = valueOrElse(getInteger(this, ((D + "_") + toString(gQ))), gP)
939- let gT = (gR + ((eP - eX) * gS))
940- let eS = bt(br(valueOrElse(getString(this, A), "")), aG, toString(eP))
941-[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP), IntegerEntry(ai(E, toString(eP)), gQ), IntegerEntry(B, eP), StringEntry(A, bc(eS))]
953+ let gV = valueOrElse(getInteger(this, ((D + "_") + toString(gU))), 0)
954+ let gW = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), gT)
955+ let gX = (gV + ((eT - fb) * gW))
956+ let eW = bu(bs(valueOrElse(getString(this, B), "")), aH, toString(eT))
957+[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT), IntegerEntry(aj(F, toString(eT)), gU), IntegerEntry(C, eT), StringEntry(B, bd(eW))]
942958 }
943959 else {
944- let gU = valueOrElse(getInteger(this, ai(E, toString(eP))), 0)
945- let gR = valueOrElse(getInteger(this, ai(C, toString(gU))), 0)
946- let gS = valueOrElse(getInteger(this, ai(D, toString(gU))), gP)
947- let gT = (gR + ((eP - gU) * gS))
948-[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP)]
960+ let gY = valueOrElse(getInteger(this, aj(F, toString(eT))), 0)
961+ let gV = valueOrElse(getInteger(this, aj(D, toString(gY))), 0)
962+ let gW = valueOrElse(getInteger(this, aj(E, toString(gY))), gT)
963+ let gX = (gV + ((eT - gY) * gW))
964+[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT)]
949965 }
950966 }
951967 }
952968
953969
954-func gV (cH,cJ) = [IntegerEntry(K, cH), IntegerEntry(L, cJ)]
955-
956-
957-func gW (cI,cK) = [IntegerEntry(M, cI), IntegerEntry(N, cK)]
958-
959-
960-func gX (cH,cJ,gY,gZ,ha,hb,hc,hd) = {
961- let cI = bH()
962- let cK = bI()
963- if (((ha - hb) != gY))
964- then throw(((((("Invalid AMM state data: " + toString(ha)) + " + ") + toString(hb)) + " != ") + toString(gY)))
965- else ((gV(cH, cJ) ++ [IntegerEntry(O, gY), IntegerEntry(R, gZ), IntegerEntry(P, ha), IntegerEntry(Q, hb), IntegerEntry(T, hc), IntegerEntry(S, hd)]) ++ gO(aR(aT(cH, cI), aT(cJ, cK))))
966- }
967-
968-
969-func he (ak) = [DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(i, ak)), DeleteEntry(ai(k, ak))]
970-
971-
972-func hf (ak,hg) = {
973- let hh = assetBalance(this, ao())
974- if ((hg > hh))
975- then throw(((("Unable to withdraw " + toString(hg)) + " from contract balance ") + toString(hh)))
976- else [ScriptTransfer(ak, hg, ao())]
977- }
978-
979-
980-func hi (cg) = if ((0 > cg))
970+func gZ (cI,cK) = [IntegerEntry(L, cI), IntegerEntry(M, cK)]
971+
972+
973+func ha (cJ,cL) = [IntegerEntry(N, cJ), IntegerEntry(O, cL)]
974+
975+
976+func hb (cI,cK,hc,hd,he,hf,hg,hh) = {
977+ let cJ = bI()
978+ let cL = bJ()
979+ if (((he - hf) != hc))
980+ then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
981+ else ((gZ(cI, cK) ++ [IntegerEntry(P, hc), IntegerEntry(S, hd), IntegerEntry(Q, he), IntegerEntry(R, hf), IntegerEntry(U, hg), IntegerEntry(T, hh)]) ++ gS(aS(aU(cI, cJ), aU(cK, cL))))
982+ }
983+
984+
985+func hi (al) = [DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(i, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(l, al))]
986+
987+
988+func hj (al,hk) = {
989+ let hl = assetBalance(this, ap())
990+ if ((hk > hl))
991+ then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
992+ else [ScriptTransfer(al, hk, ap())]
993+ }
994+
995+
996+func hm (ch) = if ((0 > ch))
981997 then throw("Balance")
982- else [IntegerEntry(d, cg)]
983-
984-
985-func hj (cg) = [ScriptTransfer(aq(), cg, ao())]
986-
987-
988-func hk (hl,cg) = if (hl)
989- then [Burn(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifact"), 1)]
998+ else [IntegerEntry(e, ch)]
999+
1000+
1001+func hn (ch) = [ScriptTransfer(ar(), ch, ap())]
1002+
1003+
1004+func ho (hp,ch) = if (hp)
1005+ then [Burn(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifact"), 1)]
9901006 else nil
9911007
9921008
993-@Callable(cg)
994-func pause () = if ((cg.caller != am()))
1009+@Callable(ch)
1010+func pause () = if ((ch.caller != an()))
9951011 then throw("Invalid pause params")
996- else [BooleanEntry(m, true)]
997-
998-
999-
1000-@Callable(cg)
1001-func unpause () = if ((cg.caller != am()))
1012+ else [BooleanEntry(n, true)]
1013+
1014+
1015+
1016+@Callable(ch)
1017+func unpause () = if ((ch.caller != an()))
10021018 then throw("Invalid unpause params")
1003- else [BooleanEntry(m, false)]
1004-
1005-
1006-
1007-@Callable(cg)
1008-func setCloseOnly () = if ((cg.caller != am()))
1019+ else [BooleanEntry(n, false)]
1020+
1021+
1022+
1023+@Callable(ch)
1024+func setCloseOnly () = if ((ch.caller != an()))
10091025 then throw("Invalid setCloseOnly params")
1010- else [BooleanEntry(n, true)]
1011-
1012-
1013-
1014-@Callable(cg)
1015-func unsetCloseOnly () = if ((cg.caller != am()))
1026+ else [BooleanEntry(o, true)]
1027+
1028+
1029+
1030+@Callable(ch)
1031+func unsetCloseOnly () = if ((ch.caller != an()))
10161032 then throw("Invalid unsetCloseOnly params")
1017- else [BooleanEntry(n, false)]
1018-
1019-
1020-
1021-@Callable(cg)
1022-func addLiquidity (cC) = if (if ((cg.caller != am()))
1033+ else [BooleanEntry(o, false)]
1034+
1035+
1036+
1037+@Callable(ch)
1038+func addLiquidity (cD) = if (if ((ch.caller != an()))
10231039 then true
1024- else (0 >= cC))
1040+ else (0 >= cD))
10251041 then throw("Invalid addLiquidity params")
10261042 else {
1027- let cH = bF()
1028- let cJ = bG()
1029- let cI = bH()
1030- let cK = bI()
1031- let hm = aR(aT(cH, cI), aT(cJ, cK))
1032- let hn = (cH + cC)
1033- let ho = (aR(aT(hn, cI), hm) - cJ)
1034- let hp = (cJ + ho)
1035- let hq = fB(dz(), hn, hp)
1036- let hr = hq._1
1037- let hs = hq._2
1038- let eI = hq._3
1039- let ht = if ((eI != 0))
1043+ let cI = bG()
1044+ let cK = bH()
1045+ let cJ = bI()
1046+ let cL = bJ()
1047+ let hq = aS(aU(cI, cJ), aU(cK, cL))
1048+ let hr = (cI + cD)
1049+ let hs = (aS(aU(hr, cJ), hq) - cK)
1050+ let ht = (cK + hs)
1051+ let hu = fF(dA(), hr, ht)
1052+ let hv = hu._1
1053+ let hw = hu._2
1054+ let eM = hu._3
1055+ let hx = if ((eM != 0))
10401056 then {
1041- let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1042- if ((ht == ht))
1057+ let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1058+ if ((hx == hx))
10431059 then nil
10441060 else throw("Strict value is not equal to itself.")
10451061 }
10461062 else nil
1047- if ((ht == ht))
1048- then (gV(hn, hp) ++ gW(hr, hs))
1063+ if ((hx == hx))
1064+ then (gZ(hr, ht) ++ ha(hv, hw))
10491065 else throw("Strict value is not equal to itself.")
10501066 }
10511067
10521068
10531069
1054-@Callable(cg)
1055-func removeLiquidity (cC) = if (if ((cg.caller != am()))
1070+@Callable(ch)
1071+func removeLiquidity (cD) = if (if ((ch.caller != an()))
10561072 then true
1057- else (0 >= cC))
1073+ else (0 >= cD))
10581074 then throw("Invalid removeLiquidity params")
10591075 else {
1060- let cH = bF()
1061- let cJ = bG()
1062- let cI = bH()
1063- let cK = bI()
1064- let hm = aR(aT(cH, cI), aT(cJ, cK))
1065- let hu = aR(cC, hm)
1066- let hn = (cH - cC)
1067- let hp = (cJ - hu)
1068- gV(hn, hp)
1076+ let cI = bG()
1077+ let cK = bH()
1078+ let cJ = bI()
1079+ let cL = bJ()
1080+ let hq = aS(aU(cI, cJ), aU(cK, cL))
1081+ let hy = aS(cD, hq)
1082+ let hr = (cI - cD)
1083+ let ht = (cK - hy)
1084+ gZ(hr, ht)
10691085 }
10701086
10711087
10721088
1073-@Callable(cg)
1074-func changeSettings (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = if ((cg.caller != am()))
1089+@Callable(ch)
1090+func changeSettings (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = if ((ch.caller != an()))
10751091 then throw("Invalid changeSettings params")
1076- else go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)
1077-
1078-
1079-
1080-@Callable(cg)
1081-func initialize (cH,cJ,gs,gp,gq,gr,gt,hv,hw,hx,hy,gu,gv,gw,gx,dR,gy,gz) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cH))
1092+ else gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)
1093+
1094+
1095+
1096+@Callable(ch)
1097+func initialize (cI,cK,gw,gt,gu,gv,gx,hz,hA,hB,hC,gy,gz,gA,gB,dV,gC,gD) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cI))
10821098 then true
1083- else (0 >= cJ))
1099+ else (0 >= cK))
10841100 then true
1085- else (0 >= gs))
1086- then true
1087- else (0 >= gp))
1088- then true
1089- else (0 >= gq))
1090- then true
1091- else (0 >= gr))
1101+ else (0 >= gw))
10921102 then true
10931103 else (0 >= gt))
10941104 then true
10951105 else (0 >= gu))
10961106 then true
10971107 else (0 >= gv))
10981108 then true
1099- else (0 >= gw))
1100- then true
11011109 else (0 >= gx))
1102- then true
1103- else (0 >= dR))
11041110 then true
11051111 else (0 >= gy))
11061112 then true
1107- else (gy > aK))
1108- then true
11091113 else (0 >= gz))
11101114 then true
1111- else cx())
1115+ else (0 >= gA))
1116+ then true
1117+ else (0 >= gB))
1118+ then true
1119+ else (0 >= dV))
1120+ then true
1121+ else (0 >= gC))
1122+ then true
1123+ else (gC > aL))
1124+ then true
1125+ else (0 >= gD))
1126+ then true
1127+ else cy())
11121128 then throw("Invalid initialize parameters")
1113- else ((((gX(cH, cJ, 0, 0, 0, 0, 0, 0) ++ go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)) ++ gA((lastBlock.timestamp + gs), 0, 0, 0, 0)) ++ hi(0)) ++ [BooleanEntry(l, true), StringEntry(c, hv), StringEntry(a, hw), StringEntry(b, hx), StringEntry(U, hy)])
1114-
1115-
1116-
1117-@Callable(cg)
1118-func decreasePosition (hg,hz,hA) = {
1119- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1120- if ((hB == hB))
1129+ else ((((hb(cI, cK, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)) ++ gE((lastBlock.timestamp + gw), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(m, true), StringEntry(d, hz), StringEntry(a, hA), StringEntry(b, hB), StringEntry(V, hC)])
1130+
1131+
1132+
1133+@Callable(ch)
1134+func decreasePosition (hk,hD,hE) = {
1135+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1136+ if ((hF == hF))
11211137 then {
1122- let cp = cf(cg)
1123- if (if (if (if (if ((0 >= hg))
1124- then true
1125- else !(cx()))
1126- then true
1127- else !(ch(aR(aK, hz), bE(), true)))
1128- then true
1129- else !(cw(cp)))
1130- then true
1131- else cy())
1138+ let cq = cg(ch)
1139+ if (if (if (if (if (if ((0 >= hk))
1140+ then true
1141+ else !(cy()))
1142+ then true
1143+ else !(ci(aS(aL, hD), bF(), true)))
1144+ then true
1145+ else !(cx(cq)))
1146+ then true
1147+ else cz())
1148+ then true
1149+ else dH())
11321150 then throw("Invalid decreasePosition parameters")
11331151 else {
1134- let hC = co(cp)
1135- let fW = hC._1
1136- let hD = hC._2
1137- let hE = hC._3
1138- let hF = hC._4
1139- let hG = if ((fW > 0))
1140- then aF
1141- else aE
1142- let hH = (hG == aE)
1143- let hI = aT(hg, hz)
1144- let hJ = ei(cp, aN)
1145- let hK = hJ._1
1146- let eh = hJ._2
1147- let hL = if ((hK > hI))
1152+ let hG = cp(cq)
1153+ let ga = hG._1
1154+ let hH = hG._2
1155+ let hI = hG._3
1156+ let hJ = hG._4
1157+ let hK = if ((ga > 0))
1158+ then aG
1159+ else aF
1160+ let hL = (hK == aF)
1161+ let hM = aU(hk, hD)
1162+ let hN = em(cq, aO)
1163+ let hO = hN._1
1164+ let el = hN._2
1165+ let hP = if ((hO > hM))
11481166 then {
1149- let hM = cP(hH, hI)
1150- let eC = hM._1
1151- let cQ = hM._2
1152- let cR = hM._3
1153- let eK = hM._4
1154- let hN = ba(eC)
1155- if (if ((hA != 0))
1156- then (hA > hN)
1167+ let hQ = cQ(hL, hM)
1168+ let eG = hQ._1
1169+ let cR = hQ._2
1170+ let cS = hQ._3
1171+ let eO = hQ._4
1172+ let hR = bb(eG)
1173+ if (if ((hE != 0))
1174+ then (hE > hR)
11571175 else false)
1158- then throw(((("Too little base asset exchanged, got " + toString(hN)) + " expected ") + toString(hA)))
1176+ then throw(((("Too little base asset exchanged, got " + toString(hR)) + " expected ") + toString(hE)))
11591177 else {
1160- let eH = aR(aT(eh, hN), ba(fW))
1161- let hO = dd(fW, hD, hF, eH)
1162- let dm = hO._1
1163- let dn = hO._2
1164- let di = hO._3
1165- let eD = hI
1166- let hP = (eh - eH)
1167- let hQ = if ((fW > 0))
1168- then ((hK - eD) - hP)
1169- else ((hP + hK) - eD)
1170- let hR = (fW + eC)
1171- $Tuple12(hR, dm, ba(hQ), cm(hR), cR, cQ, eK, (bK() - hI), (cb() - (if ((hR > 0))
1172- then ba(eC)
1173- else 0)), (ca() - (if ((0 > hR))
1174- then ba(eC)
1175- else 0)), (bM() - (if ((hR > 0))
1176- then hI
1177- else 0)), (bL() - (if ((0 > hR))
1178- then hI
1178+ let eL = aS(aU(el, hR), bb(ga))
1179+ let hS = de(ga, hH, hJ, eL)
1180+ let dn = hS._1
1181+ let do = hS._2
1182+ let dj = hS._3
1183+ let eH = hM
1184+ let hT = (el - eL)
1185+ let hU = if ((ga > 0))
1186+ then ((hO - eH) - hT)
1187+ else ((hT + hO) - eH)
1188+ let hV = (ga + eG)
1189+ $Tuple12(hV, dn, bb(hU), cn(hV), cS, cR, eO, (bL() - hM), (cc() - (if ((hV > 0))
1190+ then bb(eG)
1191+ else 0)), (cb() - (if ((0 > hV))
1192+ then bb(eG)
1193+ else 0)), (bN() - (if ((hV > 0))
1194+ then hM
1195+ else 0)), (bM() - (if ((0 > hV))
1196+ then hM
11791197 else 0)))
11801198 }
11811199 }
11821200 else throw("Close position first")
1183- let hR = hL._1
1184- let hS = hL._2
1185- let hT = hL._3
1186- let hU = hL._4
1187- let cR = hL._5
1188- let cQ = hL._6
1189- let eK = hL._7
1190- let eN = hL._8
1191- let eL = hL._9
1192- let eM = hL._10
1193- let hV = hL._11
1194- let hW = hL._12
1195- let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1196- if ((hX == hX))
1197- then (gK(cp, hR, hS, hT, hU) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW))
1201+ let hV = hP._1
1202+ let hW = hP._2
1203+ let hX = hP._3
1204+ let hY = hP._4
1205+ let cS = hP._5
1206+ let cR = hP._6
1207+ let eO = hP._7
1208+ let eR = hP._8
1209+ let eP = hP._9
1210+ let eQ = hP._10
1211+ let hZ = hP._11
1212+ let ia = hP._12
1213+ let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1214+ if ((ib == ib))
1215+ then (gO(cq, hV, hW, hX, hY) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia))
11981216 else throw("Strict value is not equal to itself.")
11991217 }
12001218 }
12011219 else throw("Strict value is not equal to itself.")
12021220 }
12031221
12041222
12051223
1206-@Callable(cg)
1207-func increasePosition (hG,hz,hA,hY) = {
1208- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1209- if ((hB == hB))
1224+@Callable(ch)
1225+func increasePosition (hK,hD,hE,ic) = {
1226+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1227+ if ((hF == hF))
12101228 then {
1211- let cp = cf(cg)
1212- let hZ = cg.payments[0].amount
1213- let aA = cg.payments[0].assetId
1214- let ia = toBase58String(value(aA))
1215- let ib = (aA == ao())
1216- let ic = az(ia)
1217- if (if (if (if (if (if (if (if (if ((hG != aE))
1218- then (hG != aF)
1229+ let cq = cg(ch)
1230+ let id = ch.payments[0].amount
1231+ let aB = ch.payments[0].assetId
1232+ let ie = toBase58String(value(aB))
1233+ let if = (aB == ap())
1234+ let ig = aA(ie)
1235+ if (if (if (if (if (if (if (if (if (if ((hK != aF))
1236+ then (hK != aG)
12191237 else false)
12201238 then true
1221- else (0 >= hZ))
1222- then true
1223- else !(cx()))
1224- then true
1225- else if (!(ib))
1226- then !(ic)
1239+ else (0 >= id))
1240+ then true
1241+ else !(cy()))
1242+ then true
1243+ else if (!(if))
1244+ then !(ig)
12271245 else false)
12281246 then true
1229- else !(fV(cp, ia)))
1230- then true
1231- else !(ch(aR(aK, hz), bE(), true)))
1232- then true
1233- else cy())
1247+ else !(fZ(cq, ie)))
1248+ then true
1249+ else !(ci(aS(aL, hD), bF(), true)))
12341250 then true
12351251 else cz())
1252+ then true
1253+ else cA())
1254+ then true
1255+ else dH())
12361256 then throw("Invalid increasePosition parameters")
12371257 else {
1238- let id = gd(cp, gi(cg))
1239- let fT = id._1
1240- let fU = id._2
1241- let ie = aT(hZ, fT)
1242- let hg = (hZ - ie)
1243- let if = if (ic)
1258+ let ih = gh(cq, gm(ch))
1259+ let fX = ih._1
1260+ let fY = ih._2
1261+ let ii = aU(id, fX)
1262+ let hk = (id - ii)
1263+ let ij = if (ig)
12441264 then {
1245- let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1246- if ((ig == ig))
1265+ let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1266+ if ((ik == ik))
12471267 then {
1248- let ih = assetBalance(this, ao())
1249- if ((ih == ih))
1268+ let il = assetBalance(this, ap())
1269+ if ((il == il))
12501270 then {
1251- let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1252- if ((ii == ii))
1271+ let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1272+ if ((im == im))
12531273 then {
1254- let ij = assetBalance(this, ao())
1255- if ((ij == ij))
1274+ let in = assetBalance(this, ap())
1275+ if ((in == in))
12561276 then {
1257- let ik = (ij - ih)
1258- if ((ik == ik))
1259- then ik
1277+ let io = (in - il)
1278+ if ((io == io))
1279+ then io
12601280 else throw("Strict value is not equal to itself.")
12611281 }
12621282 else throw("Strict value is not equal to itself.")
12631283 }
12641284 else throw("Strict value is not equal to itself.")
12651285 }
12661286 else throw("Strict value is not equal to itself.")
12671287 }
12681288 else throw("Strict value is not equal to itself.")
12691289 }
1270- else ie
1271- if ((if == if))
1290+ else ii
1291+ if ((ij == ij))
12721292 then {
1273- let il = invoke(au(), "acceptPaymentWithLink", [cp, hY], [AttachedPayment(ao(), if)])
1274- if ((il == il))
1293+ let ip = invoke(av(), "acceptPaymentWithLink", [cq, ic], [AttachedPayment(ap(), ij)])
1294+ if ((ip == ip))
12751295 then {
1276- let im = {
1277- let cr = il
1278- if ($isInstanceOf(cr, "Int"))
1296+ let iq = {
1297+ let cs = ip
1298+ if ($isInstanceOf(cs, "Int"))
12791299 then {
1280- let gg = cr
1281- gg
1300+ let gk = cs
1301+ gk
12821302 }
12831303 else throw("Invalid referrerFee")
12841304 }
1285- let in = (if - im)
1286- let io = co(cp)
1287- let fW = io._1
1288- let hD = io._2
1289- let hE = io._3
1290- let hF = io._4
1291- let gI = (fW == 0)
1292- let ip = if ((fW > 0))
1293- then (hG == aE)
1294- else (hG == aF)
1295- let iq = if (!(gI))
1296- then ip
1305+ let ir = (ij - iq)
1306+ let is = cp(cq)
1307+ let ga = is._1
1308+ let hH = is._2
1309+ let hI = is._3
1310+ let hJ = is._4
1311+ let gM = (ga == 0)
1312+ let it = if ((ga > 0))
1313+ then (hK == aF)
1314+ else (hK == aG)
1315+ let iu = if (!(gM))
1316+ then it
12971317 else false
1298- let hH = (hG == aE)
1299- let ir = if (if (gI)
1318+ let hL = (hK == aF)
1319+ let iv = if (if (gM)
13001320 then true
1301- else iq)
1321+ else iu)
13021322 then {
1303- let hI = aT(hg, hz)
1304- let is = cP(hH, hI)
1305- let cT = is._1
1306- let cQ = is._2
1307- let cR = is._3
1308- let eK = is._4
1309- if (if ((hA != 0))
1310- then (hA > ba(cT))
1323+ let hM = aU(hk, hD)
1324+ let iw = cQ(hL, hM)
1325+ let cU = iw._1
1326+ let cR = iw._2
1327+ let cS = iw._3
1328+ let eO = iw._4
1329+ if (if ((hE != 0))
1330+ then (hE > bb(cU))
13111331 else false)
1312- then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(hA)))
1332+ then throw(((("Limit error: " + toString(bb(cU))) + " < ") + toString(hE)))
13131333 else {
1314- let hR = (fW + cT)
1315- let hV = (bM() + (if ((hR > 0))
1316- then hI
1334+ let hV = (ga + cU)
1335+ let hZ = (bN() + (if ((hV > 0))
1336+ then hM
13171337 else 0))
1318- let hW = (bL() + (if ((0 > hR))
1319- then hI
1338+ let ia = (bM() + (if ((0 > hV))
1339+ then hM
13201340 else 0))
1321- let it = aR(hI, hz)
1322- let iu = dd(fW, hD, hF, it)
1323- let dm = iu._1
1324- let ec = iu._2
1325- let ed = iu._3
1326- if (!(dK(cQ, cR)))
1341+ let ix = aS(hM, hD)
1342+ let iy = de(ga, hH, hJ, ix)
1343+ let dn = iy._1
1344+ let eg = iy._2
1345+ let eh = iy._3
1346+ if (!(dO(cR, cS)))
13271347 then throw("Over max spread limit")
1328- else if (!(dO(hV, hW)))
1348+ else if (!(dS(hZ, ia)))
13291349 then throw("Over max open notional")
1330- else $Tuple12(hR, dm, (hE + hI), cm(hR), cR, cQ, eK, (bK() + hI), (cb() + (if ((hR > 0))
1331- then ba(cT)
1332- else 0)), (ca() + (if ((0 > hR))
1333- then ba(cT)
1334- else 0)), hV, hW)
1350+ else $Tuple12(hV, dn, (hI + hM), cn(hV), cS, cR, eO, (bL() + hM), (cc() + (if ((hV > 0))
1351+ then bb(cU)
1352+ else 0)), (cb() + (if ((0 > hV))
1353+ then bb(cU)
1354+ else 0)), hZ, ia)
13351355 }
13361356 }
13371357 else {
1338- let hI = aT(hg, hz)
1339- let iv = ei(toString(cg.caller), aN)
1340- let hK = iv._1
1341- let eh = iv._2
1342- if ((hK > hI))
1358+ let hM = aU(hk, hD)
1359+ let iz = em(toString(ch.caller), aO)
1360+ let hO = iz._1
1361+ let el = iz._2
1362+ if ((hO > hM))
13431363 then throw("Use decreasePosition to decrease position size")
13441364 else throw("Close position first")
13451365 }
1346- let hR = ir._1
1347- let hS = ir._2
1348- let hT = ir._3
1349- let hU = ir._4
1350- let cR = ir._5
1351- let cQ = ir._6
1352- let eK = ir._7
1353- let eN = ir._8
1354- let eL = ir._9
1355- let eM = ir._10
1356- let hV = ir._11
1357- let hW = ir._12
1358- let iw = gk(in)
1359- let gm = iw._1
1360- let gn = iw._2
1361- let ix = if (ib)
1366+ let hV = iv._1
1367+ let hW = iv._2
1368+ let hX = iv._3
1369+ let hY = iv._4
1370+ let cS = iv._5
1371+ let cR = iv._6
1372+ let eO = iv._7
1373+ let eR = iv._8
1374+ let eP = iv._9
1375+ let eQ = iv._10
1376+ let hZ = iv._11
1377+ let ia = iv._12
1378+ let iA = go(ir)
1379+ let gq = iA._1
1380+ let gr = iA._2
1381+ let iB = if (if)
13621382 then {
1363- let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1364- if ((ix == ix))
1383+ let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1384+ if ((iB == iB))
13651385 then nil
13661386 else throw("Strict value is not equal to itself.")
13671387 }
13681388 else nil
1369- if ((ix == ix))
1389+ if ((iB == iB))
13701390 then {
1371- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1372- if ((iy == iy))
1391+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1392+ if ((iC == iC))
13731393 then {
1374- let iz = invoke(as(), "notifyFees", [cp, in], nil)
1375- if ((iz == iz))
1394+ let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1395+ if ((iD == iD))
13761396 then {
1377- let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1378- if ((hX == hX))
1379- then ((((((gK(cp, hR, hS, hT, hU) ++ gH(gI, cp)) ++ gG(cp, ia)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
1397+ let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1398+ if ((ib == ib))
1399+ then ((((((gO(cq, hV, hW, hX, hY) ++ gL(gM, cq)) ++ gK(cq, ie)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
13801400 else throw("Strict value is not equal to itself.")
13811401 }
13821402 else throw("Strict value is not equal to itself.")
13831403 }
13841404 else throw("Strict value is not equal to itself.")
13851405 }
13861406 else throw("Strict value is not equal to itself.")
13871407 }
13881408 else throw("Strict value is not equal to itself.")
13891409 }
13901410 else throw("Strict value is not equal to itself.")
13911411 }
13921412 }
13931413 else throw("Strict value is not equal to itself.")
13941414 }
13951415
13961416
13971417
1398-@Callable(cg)
1418+@Callable(ch)
13991419 func addMargin () = {
1400- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1401- if ((hB == hB))
1420+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1421+ if ((hF == hF))
14021422 then {
1403- let cp = toString(cg.caller)
1404- let hZ = cg.payments[0].amount
1405- let aA = cg.payments[0].assetId
1406- let ia = toBase58String(value(aA))
1407- let ib = (aA == ao())
1408- let ic = az(ia)
1409- if (if (if (if (if (if (if (!(ib))
1410- then !(ic)
1423+ let cq = toString(ch.caller)
1424+ let id = ch.payments[0].amount
1425+ let aB = ch.payments[0].assetId
1426+ let ie = toBase58String(value(aB))
1427+ let if = (aB == ap())
1428+ let ig = aA(ie)
1429+ if (if (if (if (if (if (if (if (!(if))
1430+ then !(ig)
14111431 else false)
14121432 then true
1413- else !(cw(toString(cg.caller))))
1414- then true
1415- else !(fX(cp, ia)))
1416- then true
1417- else !(cx()))
1418- then true
1419- else cy())
1433+ else !(cx(toString(ch.caller))))
1434+ then true
1435+ else !(gb(cq, ie)))
1436+ then true
1437+ else !(cy()))
14201438 then true
14211439 else cz())
1440+ then true
1441+ else cA())
1442+ then true
1443+ else dH())
14221444 then throw("Invalid addMargin parameters")
14231445 else {
1424- let iA = gd(cp, gi(cg))
1425- let fT = iA._1
1426- let fU = iA._2
1427- let ie = aT(hZ, fT)
1428- let hg = (hZ - ie)
1429- let if = if (ic)
1446+ let iE = gh(cq, gm(ch))
1447+ let fX = iE._1
1448+ let fY = iE._2
1449+ let ii = aU(id, fX)
1450+ let hk = (id - ii)
1451+ let ij = if (ig)
14301452 then {
1431- let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1432- if ((ig == ig))
1453+ let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1454+ if ((ik == ik))
14331455 then {
1434- let ih = assetBalance(this, ao())
1435- if ((ih == ih))
1456+ let il = assetBalance(this, ap())
1457+ if ((il == il))
14361458 then {
1437- let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1438- if ((ii == ii))
1459+ let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1460+ if ((im == im))
14391461 then {
1440- let ij = assetBalance(this, ao())
1441- if ((ij == ij))
1462+ let in = assetBalance(this, ap())
1463+ if ((in == in))
14421464 then {
1443- let ik = (ij - ih)
1444- if ((ik == ik))
1445- then ik
1465+ let io = (in - il)
1466+ if ((io == io))
1467+ then io
14461468 else throw("Strict value is not equal to itself.")
14471469 }
14481470 else throw("Strict value is not equal to itself.")
14491471 }
14501472 else throw("Strict value is not equal to itself.")
14511473 }
14521474 else throw("Strict value is not equal to itself.")
14531475 }
14541476 else throw("Strict value is not equal to itself.")
14551477 }
1456- else ie
1457- if ((if == if))
1478+ else ii
1479+ if ((ij == ij))
14581480 then {
1459- let il = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), if)])
1460- if ((il == il))
1481+ let ip = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ij)])
1482+ if ((ip == ip))
14611483 then {
1462- let im = {
1463- let cr = il
1464- if ($isInstanceOf(cr, "Int"))
1484+ let iq = {
1485+ let cs = ip
1486+ if ($isInstanceOf(cs, "Int"))
14651487 then {
1466- let gg = cr
1467- gg
1488+ let gk = cs
1489+ gk
14681490 }
14691491 else throw("Invalid referrerFee")
14701492 }
1471- let in = (if - im)
1472- let iB = co(cp)
1473- let fW = iB._1
1474- let hD = iB._2
1475- let hE = iB._3
1476- let hF = iB._4
1477- let iC = gk(in)
1478- let gm = iC._1
1479- let gn = iC._2
1480- let ix = if (ib)
1493+ let ir = (ij - iq)
1494+ let iF = cp(cq)
1495+ let ga = iF._1
1496+ let hH = iF._2
1497+ let hI = iF._3
1498+ let hJ = iF._4
1499+ let iG = go(ir)
1500+ let gq = iG._1
1501+ let gr = iG._2
1502+ let iB = if (if)
14811503 then {
1482- let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1483- if ((ix == ix))
1504+ let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1505+ if ((iB == iB))
14841506 then nil
14851507 else throw("Strict value is not equal to itself.")
14861508 }
14871509 else nil
1488- if ((ix == ix))
1510+ if ((iB == iB))
14891511 then {
1490- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1491- if ((iy == iy))
1512+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1513+ if ((iC == iC))
14921514 then {
1493- let iz = invoke(as(), "notifyFees", [cp, in], nil)
1494- if ((iz == iz))
1495- then (((gK(cp, fW, (hD + hg), hE, hF) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
1515+ let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1516+ if ((iD == iD))
1517+ then (((gO(cq, ga, (hH + hk), hI, hJ) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
14961518 else throw("Strict value is not equal to itself.")
14971519 }
14981520 else throw("Strict value is not equal to itself.")
14991521 }
15001522 else throw("Strict value is not equal to itself.")
15011523 }
15021524 else throw("Strict value is not equal to itself.")
15031525 }
15041526 else throw("Strict value is not equal to itself.")
15051527 }
15061528 }
15071529 else throw("Strict value is not equal to itself.")
15081530 }
15091531
15101532
15111533
1512-@Callable(cg)
1513-func removeMargin (hg) = {
1514- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1515- if ((hB == hB))
1534+@Callable(ch)
1535+func removeMargin (hk) = {
1536+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1537+ if ((hF == hF))
15161538 then {
1517- let cp = toString(cg.caller)
1518- if (if (if (if ((0 >= hg))
1519- then true
1520- else !(cw(cp)))
1521- then true
1522- else !(cx()))
1523- then true
1524- else cy())
1539+ let cq = toString(ch.caller)
1540+ if (if (if (if (if ((0 >= hk))
1541+ then true
1542+ else !(cx(cq)))
1543+ then true
1544+ else !(cy()))
1545+ then true
1546+ else cz())
1547+ then true
1548+ else dH())
15251549 then throw("Invalid removeMargin parameters")
15261550 else {
1527- let iD = co(cp)
1528- let fW = iD._1
1529- let hD = iD._2
1530- let hE = iD._3
1531- let hF = iD._4
1532- let iE = -(hg)
1533- let iF = dd(fW, hD, hF, iE)
1534- let dm = iF._1
1535- let dn = iF._2
1536- if ((dn != 0))
1551+ let iH = cp(cq)
1552+ let ga = iH._1
1553+ let hH = iH._2
1554+ let hI = iH._3
1555+ let hJ = iH._4
1556+ let iI = -(hk)
1557+ let iJ = de(ga, hH, hJ, iI)
1558+ let dn = iJ._1
1559+ let do = iJ._2
1560+ if ((do != 0))
15371561 then throw("Invalid removed margin amount")
15381562 else {
1539- let iG = en(dm, dn, hE)
1540- if (!(ch(iG, bE(), true)))
1541- then throw(((("Too much margin removed: " + toString(iG)) + " < ") + toString(bE())))
1563+ let iK = er(dn, do, hI)
1564+ if (!(ci(iK, bF(), true)))
1565+ then throw(((("Too much margin removed: " + toString(iK)) + " < ") + toString(bF())))
15421566 else {
1543- let iH = toBase58String(ao())
1544- let iI = ga(cp)
1545- let iJ = iI._1
1546- let iK = iI._2
1547- let iL = if ((hg > iJ))
1548- then iJ
1549- else hg
1550- let iM = if ((iJ > hg))
1567+ let iL = toBase58String(ap())
1568+ let iM = ge(cq)
1569+ let iN = iM._1
1570+ let iO = iM._2
1571+ let iP = if ((hk > iN))
1572+ then iN
1573+ else hk
1574+ let iQ = if ((iN > hk))
15511575 then 0
1552- else (hg - iJ)
1553- let iN = (iJ - iL)
1554- let iO = if ((iN > 0))
1576+ else (hk - iN)
1577+ let iR = (iN - iP)
1578+ let iS = if ((iR > 0))
15551579 then nil
1556- else gG(cp, iH)
1557- let iP = if (((iL + iM) != hg))
1558- then throw(((((("toRepay=" + toString(iL)) + " + toWithdraw=") + toString(iM)) + " != ") + toString(hg)))
1580+ else gK(cq, iL)
1581+ let iT = if (((iP + iQ) != hk))
1582+ then throw(((((("toRepay=" + toString(iP)) + " + toWithdraw=") + toString(iQ)) + " != ") + toString(hk)))
15591583 else nil
1560- if ((iP == iP))
1584+ if ((iT == iT))
15611585 then {
1562- let iQ = if ((iM > 0))
1586+ let iU = if ((iQ > 0))
15631587 then {
1564- let iQ = invoke(ar(), "withdrawLocked", [iM], nil)
1565- if ((iQ == iQ))
1588+ let iU = invoke(as(), "withdrawLocked", [iQ], nil)
1589+ if ((iU == iU))
15661590 then nil
15671591 else throw("Strict value is not equal to itself.")
15681592 }
15691593 else nil
1570- if ((iQ == iQ))
1594+ if ((iU == iU))
15711595 then {
1572- let iR = if ((iL > 0))
1596+ let iV = if ((iP > 0))
15731597 then {
1574- let iS = invoke(aw(), "repay", [cp, iL, iK], nil)
1575- if ((iS == iS))
1576- then [ScriptTransfer(cg.caller, iL, fromBase58String(iK))]
1598+ let iW = invoke(ax(), "repay", [cq, iP, iO], nil)
1599+ if ((iW == iW))
1600+ then [ScriptTransfer(ch.caller, iP, fromBase58String(iO))]
15771601 else throw("Strict value is not equal to itself.")
15781602 }
15791603 else nil
1580- if ((iR == iR))
1581- then ((((gK(cp, fW, dm, hE, cm(fW)) ++ (if ((iM > 0))
1582- then hf(cg.caller, iM)
1583- else nil)) ++ hi((bC() - hg))) ++ iO) ++ iR)
1604+ if ((iV == iV))
1605+ then ((((gO(cq, ga, dn, hI, cn(ga)) ++ (if ((iQ > 0))
1606+ then hj(ch.caller, iQ)
1607+ else nil)) ++ hm((bD() - hk))) ++ iS) ++ iV)
15841608 else throw("Strict value is not equal to itself.")
15851609 }
15861610 else throw("Strict value is not equal to itself.")
15871611 }
15881612 else throw("Strict value is not equal to itself.")
15891613 }
15901614 }
15911615 }
15921616 }
15931617 else throw("Strict value is not equal to itself.")
15941618 }
15951619
15961620
15971621
1598-@Callable(cg)
1599-func closePosition (gL,iT) = {
1600- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1601- if ((hB == hB))
1622+@Callable(ch)
1623+func closePosition (gP,iX) = {
1624+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1625+ if ((hF == hF))
16021626 then {
1603- let cp = cf(cg)
1604- let iU = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
1605- if (if (if (if (if (!(cw(cp)))
1606- then true
1607- else !(cx()))
1608- then true
1609- else cy())
1610- then true
1611- else (0 >= gL))
1612- then true
1613- else (0 > iT))
1627+ let cq = cg(ch)
1628+ let iY = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
1629+ if (if (if (if (if (if (!(cx(cq)))
1630+ then true
1631+ else !(cy()))
1632+ then true
1633+ else cz())
1634+ then true
1635+ else (0 >= gP))
1636+ then true
1637+ else (0 > iX))
1638+ then true
1639+ else dH())
16141640 then throw("Invalid closePosition parameters")
16151641 else {
1616- let iV = co(cp)
1617- let fW = iV._1
1618- let hD = iV._2
1619- let hE = iV._3
1620- let hF = iV._4
1621- let iW = if ((ba(fW) > gL))
1642+ let iZ = cp(cq)
1643+ let ga = iZ._1
1644+ let hH = iZ._2
1645+ let hI = iZ._3
1646+ let hJ = iZ._4
1647+ let ja = if ((bb(ga) > gP))
16221648 then {
1623- let hG = if ((fW > 0))
1624- then aF
1625- else aE
1626- let hH = (hG == aE)
1627- let iX = dy((fW > 0), gL, true)
1628- let eD = iX._1
1629- let cQ = iX._2
1630- let cR = iX._3
1631- let eK = iX._4
1632- let eC = if ((fW > 0))
1633- then -(gL)
1634- else gL
1635- let iY = ei(cp, aN)
1636- let hK = iY._1
1637- let eh = iY._2
1638- let iZ = er(cp, aN)
1639- let ja = aR(ba(eC), ba(fW))
1640- let eH = aT(eh, ja)
1641- let jb = dd(fW, hD, hF, eH)
1642- let dm = jb._1
1643- let jc = jb._2
1644- let di = jb._3
1645- let hP = (eh - eH)
1646- let hQ = if ((fW > 0))
1647- then ((hK - eD) - hP)
1648- else ((hP + hK) - eD)
1649- let hT = ba(hQ)
1650- let jd = aT(hT, iZ)
1651- let hR = (fW + eC)
1652- let je = cm(hR)
1653- let eN = (bK() - eD)
1654- if (if ((iT != 0))
1655- then (iT > eD)
1649+ let hK = if ((ga > 0))
1650+ then aG
1651+ else aF
1652+ let hL = (hK == aF)
1653+ let jb = dz((ga > 0), gP, true)
1654+ let eH = jb._1
1655+ let cR = jb._2
1656+ let cS = jb._3
1657+ let eO = jb._4
1658+ let eG = if ((ga > 0))
1659+ then -(gP)
1660+ else gP
1661+ let jc = em(cq, aO)
1662+ let hO = jc._1
1663+ let el = jc._2
1664+ let jd = ev(cq, aO)
1665+ let je = aS(bb(eG), bb(ga))
1666+ let eL = aU(el, je)
1667+ let jf = de(ga, hH, hJ, el)._1
1668+ let jg = de(ga, hH, hJ, eL)
1669+ let dn = jg._1
1670+ let jh = jg._2
1671+ let dj = jg._3
1672+ let hT = (el - eL)
1673+ let hU = if ((ga > 0))
1674+ then ((hO - eH) - hT)
1675+ else ((hT + hO) - eH)
1676+ let hX = bb(hU)
1677+ let ji = aU(hX, jd)
1678+ let hV = (ga + eG)
1679+ let jj = cn(hV)
1680+ let eR = (bL() - eH)
1681+ if (if ((iX != 0))
1682+ then (iX > eH)
16561683 else false)
1657- then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1658- else $Tuple15(hR, jd, hT, je, jc, eH, (ba((dm - jd)) + eH), cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1659- then ba(eC)
1660- else 0)), (ca() - (if ((0 > hR))
1661- then ba(eC)
1662- else 0)), (bM() - (if ((hR > 0))
1663- then eD
1664- else 0)), (bL() - (if ((0 > hR))
1665- then eD
1684+ then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1685+ else $Tuple15(hV, ji, hX, jj, jh, eL, (jf - ji), cR, cS, eO, eR, (cc() - (if ((hV > 0))
1686+ then bb(eG)
1687+ else 0)), (cb() - (if ((0 > hV))
1688+ then bb(eG)
1689+ else 0)), (bN() - (if ((hV > 0))
1690+ then eH
1691+ else 0)), (bM() - (if ((0 > hV))
1692+ then eH
16661693 else 0)))
16671694 }
1668- else if ((gL > ba(fW)))
1695+ else if ((gP > bb(ga)))
16691696 then throw("Invalid closePosition parameters")
16701697 else {
1671- let jf = eE(cp, true)
1672- let eD = jf._1
1673- let jc = jf._2
1674- let eH = jf._3
1675- let eI = jf._4
1676- let cQ = jf._5
1677- let cR = jf._6
1678- let eK = jf._7
1679- let eN = jf._8
1680- let ed = jf._9
1681- let eL = jf._10
1682- let eM = jf._11
1683- let hV = jf._12
1684- let hW = jf._13
1685- if (if ((iT != 0))
1686- then (iT > eD)
1698+ let jk = eI(cq, true)
1699+ let eH = jk._1
1700+ let jh = jk._2
1701+ let eL = jk._3
1702+ let eM = jk._4
1703+ let cR = jk._5
1704+ let cS = jk._6
1705+ let eO = jk._7
1706+ let eR = jk._8
1707+ let eh = jk._9
1708+ let eP = jk._10
1709+ let eQ = jk._11
1710+ let hZ = jk._12
1711+ let ia = jk._13
1712+ if (if ((iX != 0))
1713+ then (iX > eH)
16871714 else false)
1688- then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1689- else $Tuple15(0, 0, 0, 0, jc, eH, eI, cQ, cR, eK, eN, eL, eM, hV, hW)
1715+ then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1716+ else $Tuple15(0, 0, 0, 0, jh, eL, eM, cR, cS, eO, eR, eP, eQ, hZ, ia)
16901717 }
1691- let hR = iW._1
1692- let jd = iW._2
1693- let hT = iW._3
1694- let je = iW._4
1695- let jc = iW._5
1696- let eH = iW._6
1697- let eI = iW._7
1698- let cQ = iW._8
1699- let cR = iW._9
1700- let eK = iW._10
1701- let eN = iW._11
1702- let eL = iW._12
1703- let eM = iW._13
1704- let hV = iW._14
1705- let hW = iW._15
1706- if ((jc > 0))
1718+ let hV = ja._1
1719+ let ji = ja._2
1720+ let hX = ja._3
1721+ let jj = ja._4
1722+ let jh = ja._5
1723+ let eL = ja._6
1724+ let eM = ja._7
1725+ let cR = ja._8
1726+ let cS = ja._9
1727+ let eO = ja._10
1728+ let eR = ja._11
1729+ let eP = ja._12
1730+ let eQ = ja._13
1731+ let hZ = ja._14
1732+ let ia = ja._15
1733+ if ((jh > 0))
17071734 then throw("Unable to close position with bad debt")
17081735 else {
1709- let jg = ba(eI)
1710- let jh = (bC() - jg)
1711- let ji = if ((0 > jh))
1712- then $Tuple2(0, ba(jh))
1713- else $Tuple2(jh, 0)
1714- let jj = ji._1
1715- let jk = ji._2
1716- let jl = ga(cp)
1717- let iJ = jl._1
1718- let iK = jl._2
1719- let jm = if ((iJ > 0))
1720- then if ((jg >= iJ))
1736+ let jl = bb(eM)
1737+ let jm = (bD() - jl)
1738+ let jn = if ((0 > jm))
1739+ then $Tuple2(0, bb(jm))
1740+ else $Tuple2(jm, 0)
1741+ let jo = jn._1
1742+ let jp = jn._2
1743+ let jq = ge(cq)
1744+ let iN = jq._1
1745+ let iO = jq._2
1746+ let jr = if ((iN > 0))
1747+ then if ((jl >= iN))
17211748 then {
1722- let iS = invoke(aw(), "repay", [cp, iJ, iK], nil)
1723- if ((iS == iS))
1724- then $Tuple2([ScriptTransfer(iU, iJ, fromBase58String(iK))], (jg - iJ))
1749+ let iW = invoke(ax(), "repay", [cq, iN, iO], nil)
1750+ if ((iW == iW))
1751+ then $Tuple2([ScriptTransfer(iY, iN, fromBase58String(iO))], (jl - iN))
17251752 else throw("Strict value is not equal to itself.")
17261753 }
17271754 else {
1728- let jn = invoke(aw(), "realizePartiallyAndClose", [cp, jg, iK], nil)
1729- if ((jn == jn))
1730- then $Tuple2([ScriptTransfer(iU, jg, fromBase58String(iK))], 0)
1755+ let js = invoke(ax(), "realizePartiallyAndClose", [cq, jl, iO], nil)
1756+ if ((js == js))
1757+ then $Tuple2([ScriptTransfer(iY, jl, fromBase58String(iO))], 0)
17311758 else throw("Strict value is not equal to itself.")
17321759 }
1733- else $Tuple2(nil, jg)
1734- if ((jm == jm))
1760+ else $Tuple2(nil, jl)
1761+ if ((jr == jr))
17351762 then {
1736- let jo = jm._2
1737- let jp = jm._1
1738- let jq = if ((jo > 0))
1763+ let jt = jr._2
1764+ let ju = jr._1
1765+ let jv = if ((jt > 0))
17391766 then {
1740- let jq = invoke(ar(), "withdrawLocked", [jo], nil)
1741- if ((jq == jq))
1767+ let jv = invoke(as(), "withdrawLocked", [jt], nil)
1768+ if ((jv == jv))
17421769 then nil
17431770 else throw("Strict value is not equal to itself.")
17441771 }
17451772 else nil
1746- if ((jq == jq))
1773+ if ((jv == jv))
17471774 then {
1748- let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1749- if ((hX == hX))
1750- then (((((if ((hR == 0))
1751- then he(cp)
1752- else gK(cp, hR, jd, hT, je)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ (if ((jo > 0))
1753- then hf(iU, jo)
1754- else nil)) ++ hi(jj)) ++ jp)
1775+ let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1776+ if ((ib == ib))
1777+ then (((((if ((hV == 0))
1778+ then hi(cq)
1779+ else gO(cq, hV, ji, hX, jj)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ (if ((jt > 0))
1780+ then hj(iY, jt)
1781+ else nil)) ++ hm(jo)) ++ ju)
17551782 else throw("Strict value is not equal to itself.")
17561783 }
17571784 else throw("Strict value is not equal to itself.")
17581785 }
17591786 else throw("Strict value is not equal to itself.")
17601787 }
17611788 }
17621789 }
17631790 else throw("Strict value is not equal to itself.")
17641791 }
17651792
17661793
17671794
1768-@Callable(cg)
1769-func liquidate (cp) = {
1770- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1771- if ((hB == hB))
1795+@Callable(ch)
1796+func liquidate (cq) = {
1797+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1798+ if ((hF == hF))
17721799 then {
1773- let jr = er(cp, aN)
1774- let iG = if (dT())
1800+ let jw = ev(cq, aO)
1801+ let iK = if (dX())
17751802 then {
1776- let js = er(cp, aO)
1777- bb(jr, js)
1803+ let jx = ev(cq, aP)
1804+ bc(jw, jx)
17781805 }
1779- else jr
1780- if (if (if (if (!(ch(iG, bR(), false)))
1781- then true
1782- else !(cw(cp)))
1783- then true
1784- else !(cx()))
1785- then true
1786- else cy())
1806+ else jw
1807+ if (if (if (if (if (!(ci(iK, bS(), false)))
1808+ then true
1809+ else !(cx(cq)))
1810+ then true
1811+ else !(cy()))
1812+ then true
1813+ else cz())
1814+ then true
1815+ else dH())
17871816 then throw("Unable to liquidate")
1788- else if (if (if ((jr > bS()))
1789- then (bT() > 0)
1817+ else if (if (if ((jw > bT()))
1818+ then (bU() > 0)
17901819 else false)
1791- then (aK > bT())
1820+ then (aL > bU())
17921821 else false)
17931822 then {
1794- let jt = co(cp)
1795- let fW = jt._1
1796- let hD = jt._2
1797- let hE = jt._3
1798- let hF = jt._4
1799- let hG = if ((fW > 0))
1800- then aF
1801- else aE
1802- let hH = (hG == aE)
1803- let eD = ex(cp, fW)
1804- let ju = ei(cp, aN)
1805- let hK = ju._1
1806- let eh = ju._2
1807- let jv = cP(hH, eD)
1808- let eC = jv._1
1809- let cQ = jv._2
1810- let cR = jv._3
1811- let eK = jv._4
1812- let jw = aR(ba(eC), ba(fW))
1813- let eH = aT(eh, jw)
1814- let jx = dd(fW, hD, hF, eH)
1815- let dm = jx._1
1816- let dn = jx._2
1817- let di = jx._3
1818- let hP = (eh - eH)
1819- let hQ = if ((fW > 0))
1820- then ((hK - eD) - hP)
1821- else ((hP + hK) - eD)
1822- let jy = aT(eD, bS())
1823- let jz = (jy / 2)
1824- let gn = (jy - jz)
1825- let jd = (dm - jy)
1826- let hR = (fW + eC)
1827- let hT = ba(hQ)
1828- let je = cm(hR)
1829- let eN = (bK() - eD)
1830- let jh = (bC() - jy)
1831- let jA = if ((0 > jh))
1832- then $Tuple2(0, ba(jh))
1833- else $Tuple2(jh, 0)
1834- let jB = jA._1
1835- let jk = jA._2
1836- let jC = ga(cp)
1837- let iJ = jC._1
1838- let iK = jC._2
1839- let jD = if ((iJ > 0))
1823+ let jy = cp(cq)
1824+ let ga = jy._1
1825+ let hH = jy._2
1826+ let hI = jy._3
1827+ let hJ = jy._4
1828+ let hK = if ((ga > 0))
1829+ then aG
1830+ else aF
1831+ let hL = (hK == aF)
1832+ let eH = eB(cq, ga)
1833+ let jz = em(cq, aO)
1834+ let hO = jz._1
1835+ let el = jz._2
1836+ let jA = cQ(hL, eH)
1837+ let eG = jA._1
1838+ let cR = jA._2
1839+ let cS = jA._3
1840+ let eO = jA._4
1841+ let jB = aS(bb(eG), bb(ga))
1842+ let eL = aU(el, jB)
1843+ let jC = de(ga, hH, hJ, eL)
1844+ let dn = jC._1
1845+ let do = jC._2
1846+ let dj = jC._3
1847+ let hT = (el - eL)
1848+ let hU = if ((ga > 0))
1849+ then ((hO - eH) - hT)
1850+ else ((hT + hO) - eH)
1851+ let jD = aU(eH, bT())
1852+ let jE = (jD / 2)
1853+ let gr = (jD - jE)
1854+ let ji = (dn - jD)
1855+ let hV = (ga + eG)
1856+ let hX = bb(hU)
1857+ let jj = cn(hV)
1858+ let eR = (bL() - eH)
1859+ let jm = (bD() - jD)
1860+ let jF = if ((0 > jm))
1861+ then $Tuple2(0, bb(jm))
1862+ else $Tuple2(jm, 0)
1863+ let jG = jF._1
1864+ let jp = jF._2
1865+ let jH = ge(cq)
1866+ let iN = jH._1
1867+ let iO = jH._2
1868+ let jI = if ((iN > 0))
18401869 then {
1841- let jE = aT(iJ, jw)
1842- let jn = invoke(aw(), "realizePartially", [cp, iK, jE], nil)
1843- if ((jn == jn))
1870+ let jJ = aU(iN, jB)
1871+ let js = invoke(ax(), "realizePartially", [cq, iO, jJ], nil)
1872+ if ((js == js))
18441873 then nil
18451874 else throw("Strict value is not equal to itself.")
18461875 }
18471876 else nil
1848- if ((jD == jD))
1877+ if ((jI == jI))
18491878 then {
1850- let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1851- if ((jq == jq))
1879+ let jv = invoke(as(), "withdrawLocked", [jD], nil)
1880+ if ((jv == jv))
18521881 then {
1853- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1854- if ((iy == iy))
1882+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1883+ if ((iC == iC))
18551884 then {
1856- let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1857- if ((hX == hX))
1858- then (((gK(cp, hR, jd, hT, je) ++ gX(cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1859- then ba(eC)
1860- else 0)), (ca() - (if ((0 > hR))
1861- then ba(eC)
1862- else 0)), (bM() - (if ((hR > 0))
1863- then eD
1864- else 0)), (bL() - (if ((0 > hR))
1865- then eD
1866- else 0)))) ++ hf(cg.caller, jz)) ++ hi(jB))
1885+ let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1886+ if ((ib == ib))
1887+ then (((gO(cq, hV, ji, hX, jj) ++ hb(cR, cS, eO, eR, (cc() - (if ((hV > 0))
1888+ then bb(eG)
1889+ else 0)), (cb() - (if ((0 > hV))
1890+ then bb(eG)
1891+ else 0)), (bN() - (if ((hV > 0))
1892+ then eH
1893+ else 0)), (bM() - (if ((0 > hV))
1894+ then eH
1895+ else 0)))) ++ hj(ch.caller, jE)) ++ hm(jG))
18671896 else throw("Strict value is not equal to itself.")
18681897 }
18691898 else throw("Strict value is not equal to itself.")
18701899 }
18711900 else throw("Strict value is not equal to itself.")
18721901 }
18731902 else throw("Strict value is not equal to itself.")
18741903 }
18751904 else {
1876- let jF = eE(cp, false)
1877- let ec = jF._1
1878- let dn = jF._2
1879- let ed = jF._3
1880- let ee = jF._4
1881- let cQ = jF._5
1882- let cR = jF._6
1883- let eK = jF._7
1884- let eN = jF._8
1885- let eD = jF._9
1886- let eL = jF._10
1887- let eM = jF._11
1888- let hV = jF._12
1889- let hW = jF._13
1890- let jy = aT(eD, bS())
1891- let jz = (jy / 2)
1892- let gn = (jy - jz)
1893- let jh = (bC() - jy)
1894- let jG = if ((0 > jh))
1895- then $Tuple2(0, ba(jh))
1896- else $Tuple2(jh, 0)
1897- let jB = jG._1
1898- let jk = jG._2
1899- let jH = ga(cp)
1900- let iJ = jH._1
1901- let iK = jH._2
1902- let jD = if ((iJ > 0))
1905+ let jK = eI(cq, false)
1906+ let eg = jK._1
1907+ let do = jK._2
1908+ let eh = jK._3
1909+ let ei = jK._4
1910+ let cR = jK._5
1911+ let cS = jK._6
1912+ let eO = jK._7
1913+ let eR = jK._8
1914+ let eH = jK._9
1915+ let eP = jK._10
1916+ let eQ = jK._11
1917+ let hZ = jK._12
1918+ let ia = jK._13
1919+ let jD = aU(eH, bT())
1920+ let jE = (jD / 2)
1921+ let gr = (jD - jE)
1922+ let jm = (bD() - jD)
1923+ let jL = if ((0 > jm))
1924+ then $Tuple2(0, bb(jm))
1925+ else $Tuple2(jm, 0)
1926+ let jG = jL._1
1927+ let jp = jL._2
1928+ let jM = ge(cq)
1929+ let iN = jM._1
1930+ let iO = jM._2
1931+ let jI = if ((iN > 0))
19031932 then {
1904- let jn = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iK], nil)
1905- if ((jn == jn))
1933+ let js = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iO], nil)
1934+ if ((js == js))
19061935 then nil
19071936 else throw("Strict value is not equal to itself.")
19081937 }
19091938 else nil
1910- if ((jD == jD))
1939+ if ((jI == jI))
19111940 then {
1912- let gg = if ((dn > 0))
1941+ let gk = if ((do > 0))
19131942 then {
1914- let jI = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1915- if ((jI == jI))
1943+ let jN = invoke(as(), "exchangeFreeAndLocked", [do], nil)
1944+ if ((jN == jN))
19161945 then nil
19171946 else throw("Strict value is not equal to itself.")
19181947 }
19191948 else nil
1920- if ((gg == gg))
1949+ if ((gk == gk))
19211950 then {
1922- let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1923- if ((jq == jq))
1951+ let jv = invoke(as(), "withdrawLocked", [jD], nil)
1952+ if ((jv == jv))
19241953 then {
1925- let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1926- if ((iy == iy))
1954+ let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1955+ if ((iC == iC))
19271956 then {
1928- let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1929- if ((hX == hX))
1930- then (((he(cp) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hf(cg.caller, jz)) ++ hi(jB))
1957+ let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1958+ if ((ib == ib))
1959+ then (((hi(cq) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hj(ch.caller, jE)) ++ hm(jG))
19311960 else throw("Strict value is not equal to itself.")
19321961 }
19331962 else throw("Strict value is not equal to itself.")
19341963 }
19351964 else throw("Strict value is not equal to itself.")
19361965 }
19371966 else throw("Strict value is not equal to itself.")
19381967 }
19391968 else throw("Strict value is not equal to itself.")
19401969 }
19411970 }
19421971 else throw("Strict value is not equal to itself.")
19431972 }
19441973
19451974
19461975
1947-@Callable(cg)
1976+@Callable(ch)
19481977 func payFunding () = {
1949- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1950- if ((hB == hB))
1978+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1979+ if ((hF == hF))
19511980 then {
1952- let jJ = bN()
1953- if (if (if ((jJ > lastBlock.timestamp))
1954- then true
1955- else !(cx()))
1956- then true
1957- else cy())
1958- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
1981+ let jO = bO()
1982+ if (if (if ((jO > lastBlock.timestamp))
1983+ then true
1984+ else !(cy()))
1985+ then true
1986+ else cz())
1987+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jO)))
19591988 else {
1960- let fG = dz()
1961- let jK = fF()
1962- let fJ = jK._1
1963- let fK = jK._2
1964- gA((jJ + bQ()), (bY() + fK), (bZ() + fJ), aR(fK, fG), aR(fJ, fG))
1989+ let fK = dA()
1990+ let jP = fJ()
1991+ let fN = jP._1
1992+ let fO = jP._2
1993+ gE((jO + bR()), (bZ() + fO), (ca() + fN), aS(fO, fK), aS(fN, fK))
19651994 }
19661995 }
19671996 else throw("Strict value is not equal to itself.")
19681997 }
19691998
19701999
19712000
1972-@Callable(cg)
2001+@Callable(ch)
19732002 func syncTerminalPriceToOracle () = {
1974- let cH = bF()
1975- let cJ = bG()
1976- let jL = fB(dz(), cH, cJ)
1977- let hr = jL._1
1978- let hs = jL._2
1979- let eI = jL._3
1980- let ht = if ((eI != 0))
2003+ let cI = bG()
2004+ let cK = bH()
2005+ let jQ = fF(dA(), cI, cK)
2006+ let hv = jQ._1
2007+ let hw = jQ._2
2008+ let eM = jQ._3
2009+ let hx = if ((eM != 0))
19812010 then {
1982- let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1983- if ((ht == ht))
2011+ let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2012+ if ((hx == hx))
19842013 then nil
19852014 else throw("Strict value is not equal to itself.")
19862015 }
19872016 else nil
1988- if ((ht == ht))
1989- then (gW(hr, hs) ++ gO(aR(aT(cH, hr), aT(cJ, hs))))
2017+ if ((hx == hx))
2018+ then (ha(hv, hw) ++ gS(aS(aU(cI, hv), aU(cK, hw))))
19902019 else throw("Strict value is not equal to itself.")
19912020 }
19922021
19932022
19942023
1995-@Callable(cg)
1996-func view_calcRemainMarginWithFundingPayment (cp) = {
1997- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1998- if ((hB == hB))
2024+@Callable(ch)
2025+func view_calcRemainMarginWithFundingPayment (cq) = {
2026+ let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2027+ if ((hF == hF))
19992028 then {
2000- let jM = co(cp)
2001- let cs = jM._1
2002- let ek = jM._2
2003- let et = jM._3
2004- let em = jM._4
2005- let jN = ei(cp, aN)
2006- let dZ = jN._1
2007- let eh = jN._2
2008- let jO = dd(cs, ek, em, eh)
2009- let dm = jO._1
2010- let dn = jO._2
2011- let di = jO._3
2012- throw((((((aP(dm) + aP(di)) + aP(ew(cp))) + aP(eh)) + aP(dn)) + aP(dZ)))
2029+ let jR = cp(cq)
2030+ let ct = jR._1
2031+ let eo = jR._2
2032+ let ex = jR._3
2033+ let eq = jR._4
2034+ let jS = em(cq, aO)
2035+ let ed = jS._1
2036+ let el = jS._2
2037+ let jT = de(ct, eo, eq, el)
2038+ let dn = jT._1
2039+ let do = jT._2
2040+ let dj = jT._3
2041+ throw((((((aQ(dn) + aQ(dj)) + aQ(eA(cq))) + aQ(el)) + aQ(do)) + aQ(ed)))
20132042 }
20142043 else throw("Strict value is not equal to itself.")
20152044 }
20162045
20172046
20182047
2019-@Callable(cg)
2020-func view_getPegAdjustCost (gP) = {
2021- let cH = bF()
2022- let cJ = bG()
2023- let fA = fB(gP, cH, cJ)
2024- throw(toString(fA._3))
2025- }
2026-
2027-
2028-
2029-@Callable(cg)
2048+@Callable(ch)
2049+func view_getPegAdjustCost (gT) = {
2050+ let cI = bG()
2051+ let cK = bH()
2052+ let fE = fF(gT, cI, cK)
2053+ throw(toString(fE._3))
2054+ }
2055+
2056+
2057+
2058+@Callable(ch)
20302059 func view_getTerminalAmmPrice () = {
2031- let jP = fe()
2032- let fi = jP._1
2033- let fj = jP._2
2034- let hm = aR(aT(fi, bH()), aT(fj, bI()))
2035- throw(toString(hm))
2036- }
2037-
2038-
2039-
2040-@Callable(cg)
2060+ let jU = fi()
2061+ let fm = jU._1
2062+ let fn = jU._2
2063+ let hq = aS(aU(fm, bI()), aU(fn, bJ()))
2064+ throw(toString(hq))
2065+ }
2066+
2067+
2068+
2069+@Callable(ch)
20412070 func view_getFunding () = {
2042- let fG = dz()
2043- let jQ = fF()
2044- let fJ = jQ._1
2045- let fK = jQ._2
2046- let jR = aR(fK, fG)
2047- let jS = aR(fJ, fG)
2048- throw((((aP(jR) + aP(jS)) + aP(eO())) + aP(dz())))
2049- }
2050-
2051-
2052-
2053-@Callable(cg)
2054-func view_getBorrowedByTrader (cp) = {
2055- let jT = ga(cp)
2056- let iJ = jT._1
2057- let iK = jT._2
2058- throw((aP(iJ) + iK))
2059- }
2060-
2061-
2062-
2063-@Callable(cg)
2071+ let fK = dA()
2072+ let jV = fJ()
2073+ let fN = jV._1
2074+ let fO = jV._2
2075+ let jW = aS(fO, fK)
2076+ let jX = aS(fN, fK)
2077+ throw((((aQ(jW) + aQ(jX)) + aQ(eS())) + aQ(dA())))
2078+ }
2079+
2080+
2081+
2082+@Callable(ch)
2083+func view_getBorrowedByTrader (cq) = {
2084+ let jY = ge(cq)
2085+ let iN = jY._1
2086+ let iO = jY._2
2087+ throw((aQ(iN) + iO))
2088+ }
2089+
2090+
2091+
2092+@Callable(ch)
20642093 func computeSpotPrice () = {
2065- let fA = dS()
2066- $Tuple2(nil, fA)
2067- }
2068-
2069-
2070-
2071-@Callable(cg)
2072-func computeFeeForTraderWithArtifact (cp,fM) = {
2073- let fA = gd(cp, fM)
2074- $Tuple2(nil, fA)
2075- }
2076-
2077-
2078-@Verifier(jU)
2079-func jV () = sigVerify(jU.bodyBytes, jU.proofs[0], an())
2094+ let fE = dW()
2095+ $Tuple2(nil, fE)
2096+ }
2097+
2098+
2099+
2100+@Callable(ch)
2101+func computeFeeForTraderWithArtifact (cq,fQ) = {
2102+ let fE = gh(cq, fQ)
2103+ $Tuple2(nil, fE)
2104+ }
2105+
2106+
2107+@Verifier(jZ)
2108+func ka () = sigVerify(jZ.bodyBytes, jZ.proofs[0], ao())
20802109

github/deemru/w8io/873ac7e 
737.32 ms