tx · C3uNvt6wbSrYbmQQdmGrSnGM7Bh1vcbirJjBL9nuhX6G

3Mpd4hwQJJqyvqeE3ukACWYuUonjAQcmQxo:  -0.08000000 Waves

2023.05.15 20:49 [2579404] smart account 3Mpd4hwQJJqyvqeE3ukACWYuUonjAQcmQxo > SELF 0.00000000 Waves

{ "type": 13, "id": "C3uNvt6wbSrYbmQQdmGrSnGM7Bh1vcbirJjBL9nuhX6G", "fee": 8000000, "feeAssetId": null, "timestamp": 1684172973380, "version": 2, "chainId": 84, "sender": "3Mpd4hwQJJqyvqeE3ukACWYuUonjAQcmQxo", "senderPublicKey": "HjuaYzrXzh6phGZx1AmjeuZNPCQjDSGQgpwcNAH48Fv7", "proofs": [ "666gGwcvCeb5bvAKLX4jzjnQTEfhKWjuo6HWXmhTLkiByEGp9BKygZETAD8X6mscB6k1CJh8viU1eCM81VMJnV7b" ], "script": "base64:BgJyCAISABIAEgASABIDCgEBEgMKAQESDwoNAQEBAQEBAQEBAQEBARIUChIBAQEBAQEBCAgIAQEBAQEBAQESBgoEAQEBCBIAEgMKAQESBQoDAQEEEgMKAQgSABIAEgASAwoBCBIDCgEBEgASABIAEgQKAggIwAEADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlAA1rX3F1b3RlT3JhY2xlAg1rX3F1b3RlT3JhY2xlAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAKa19zZXF1ZW5jZQIKa19zZXF1ZW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA9rX3Bvc2l0aW9uQXNzZXQCD2tfcG9zaXRpb25Bc3NldAANa19wb3NpdGlvbkZlZQINa19wb3NpdGlvbkZlZQAea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wAhNrX3Bvc2l0aW9uVGltZXN0YW1wAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQAC2tfY2xvc2VPbmx5AgtrX2Nsb3NlT25seQAFa19mZWUCBWtfZmVlAA1rX3JvbGxvdmVyRmVlAg5rX3JvbGxvdmVyX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAEWtfbWF4T3Blbk5vdGlvbmFsAhFrX21heE9wZW5Ob3Rpb25hbAAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAEGtfbWF4T3JhY2xlRGVsYXkCEGtfbWF4T3JhY2xlRGVsYXkADWtfZnVuZGluZ01vZGUCDWtfZnVuZGluZ01vZGUADWtfbGFzdERhdGFTdHICDWtfbGFzdERhdGFTdHIADmtfbGFzdE1pbnV0ZUlkAg5rX2xhc3RNaW51dGVJZAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlABNrX3R3YXBEYXRhTGFzdFByaWNlAhNrX3R3YXBEYXRhTGFzdFByaWNlABprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAIaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AEmtfbmV4dEZ1bmRpbmdCbG9jawIea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wABFrX2xvbmdGdW5kaW5nUmF0ZQIRa19sb25nRnVuZGluZ1JhdGUAEmtfc2hvcnRGdW5kaW5nUmF0ZQISa19zaG9ydEZ1bmRpbmdSYXRlABNrX3F1b3RlQXNzZXRSZXNlcnZlAghrX3F0QXN0UgASa19iYXNlQXNzZXRSZXNlcnZlAghrX2JzQXN0UgASa19xdW90ZUFzc2V0V2VpZ2h0AghrX3F0QXN0VwARa19iYXNlQXNzZXRXZWlnaHQCCGtfYnNBc3RXABNrX3RvdGFsUG9zaXRpb25TaXplAhNrX3RvdGFsUG9zaXRpb25TaXplABdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIXa190b3RhbExvbmdQb3NpdGlvblNpemUAGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIYa190b3RhbFNob3J0UG9zaXRpb25TaXplABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAhZrX29wZW5JbnRlcmVzdE5vdGlvbmFsABNrX29wZW5JbnRlcmVzdFNob3J0AhNrX29wZW5JbnRlcmVzdFNob3J0ABJrX29wZW5JbnRlcmVzdExvbmcCEmtfb3BlbkludGVyZXN0TG9uZwAIa19sYXN0VHgCCGtfbGFzdFR4ABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfdmF1bHRfYWRkcmVzcwIPa192YXVsdF9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAg9TdGFraW5nIG5vdCBzZXQBDHZhdWx0QWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3ZhdWx0X2FkZHJlc3MCDVZhdWx0IG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCDU1pbmVyIG5vdCBzZXQBDW9yZGVyc0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUQa19vcmRlcnNfYWRkcmVzcwIOT3JkZXJzIG5vdCBzZXQBD3JlZmVycmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX3JlZmVycmFsX2FkZHJlc3MCEFJlZmVycmFsIG5vdCBzZXQBEW5mdE1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwITTkZUIE1hbmFnZXIgbm90IHNldAANa190b2tlbl9wYXJhbQINa190b2tlbl9wYXJhbQAMa190b2tlbl90eXBlAgxrX3Rva2VuX3R5cGUAGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQINZmVlX3JlZHVjdGlvbgAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAA9NSU5VVEVTX0lOX1lFQVIJAGgCAKCKIAUMREVDSU1BTF9VTklUAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0AwkAAAIJAJADAQUFX2xpc3QAAAIACQC5CQIFBV9saXN0AgEsAQlzdHJUb0xpc3QBBF9zdHIDCQAAAgUEX3N0cgIABQNuaWwJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwAEkZVTkRJTkdfQVNZTU1FVFJJQwABABFGVU5ESU5HX1NZTU1FVFJJQwACAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPcm9sbG92ZXJGZWVSYXRlAAkBA2ludAEFDWtfcm9sbG92ZXJGZWUBD2luaXRNYXJnaW5SYXRpbwAJAQNpbnQBBRFrX2luaXRNYXJnaW5SYXRpbwEGcXRBc3RSAAkBA2ludAEFE2tfcXVvdGVBc3NldFJlc2VydmUBBmJzQXN0UgAJAQNpbnQBBRJrX2Jhc2VBc3NldFJlc2VydmUBBnF0QXN0VwAJAQVpbnRPcgIFEmtfcXVvdGVBc3NldFdlaWdodAUMREVDSU1BTF9VTklUAQZic0FzdFcACQEFaW50T3ICBRFrX2Jhc2VBc3NldFdlaWdodAUMREVDSU1BTF9VTklUARF0b3RhbFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRNrX3RvdGFsUG9zaXRpb25TaXplARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARFvcGVuSW50ZXJlc3RTaG9ydAAJAQNpbnQBBRNrX29wZW5JbnRlcmVzdFNob3J0ARBvcGVuSW50ZXJlc3RMb25nAAkBA2ludAEFEmtfb3BlbkludGVyZXN0TG9uZwEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAAJAQNpbnQBBRJrX25leHRGdW5kaW5nQmxvY2sBEGZ1bmRpbmdQZXJpb2RSYXcACQEDaW50AQUPa19mdW5kaW5nUGVyaW9kARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFDERFQ0lNQUxfVU5JVAEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQdTRUNPTkRTARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBA2ludAEFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwETbGlxdWlkYXRpb25GZWVSYXRpbwAJAQNpbnQBBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8BF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkBA2ludAEFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8BC3NwcmVhZExpbWl0AAkBA2ludAEFDWtfc3ByZWFkTGltaXQBDm1heFByaWNlSW1wYWN0AAkBA2ludAEFEGtfbWF4UHJpY2VJbXBhY3QBDm1heFByaWNlU3ByZWFkAAkBA2ludAEFEGtfbWF4UHJpY2VTcHJlYWQBD21heE9wZW5Ob3Rpb25hbAAJAQNpbnQBBRFrX21heE9wZW5Ob3Rpb25hbAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQxsYXN0U2VxdWVuY2UACQEFaW50T3ICBQprX3NlcXVlbmNlAAABE2ZlZVRvU3Rha2Vyc1BlcmNlbnQACQEDaW50AQUVa19mZWVUb1N0YWtlcnNQZXJjZW50AQ5tYXhPcmFjbGVEZWxheQAJAQNpbnQBBRBrX21heE9yYWNsZURlbGF5AQtmdW5kaW5nTW9kZQAJAQVpbnRPcgIFDWtfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwENbGFzdFRpbWVzdGFtcAAIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQ9nZXRBY3R1YWxDYWxsZXIBAWkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBDW9yZGVyc0FkZHJlc3MAAghrX3NlbmRlcgkApQgBCAUBaQZjYWxsZXIBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DDF9tYXJnaW5SYXRpbxBfYmFzZU1hcmdpblJhdGlvFF9sYXJnZXJUaGFuT3JFcXVhbFRvBBRyZW1haW5pbmdNYXJnaW5SYXRpbwkAZQIFDF9tYXJnaW5SYXRpbwUQX2Jhc2VNYXJnaW5SYXRpbwMDBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZgIAAAUUcmVtYWluaW5nTWFyZ2luUmF0aW8HCQACAQkArAICCQCsAgIJAKwCAgIQSW52YWxpZCBtYXJnaW46IAkApAMBBQxfbWFyZ2luUmF0aW8CAyA8IAkApAMBBRBfYmFzZU1hcmdpblJhdGlvAwMJAQEhAQUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGcCBRRyZW1haW5pbmdNYXJnaW5SYXRpbwAABwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPiAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCXCgUFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQdfdHJhZGVyCQCXCgUAAAAAAAAAAAAAARBnZXRQb3NpdGlvbkFzc2V0AQdfdHJhZGVyBBBwb3NpdGlvbkFzc2V0T3B0CQCdCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUHX3RyYWRlcgQHJG1hdGNoMAUQcG9zaXRpb25Bc3NldE9wdAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEDXBvc2l0aW9uQXNzZXQFByRtYXRjaDAFDXBvc2l0aW9uQXNzZXQJANgEAQkBCnF1b3RlQXNzZXQAAQ5nZXRQb3NpdGlvbkZlZQEHX3RyYWRlcgQOcG9zaXRpb25GZWVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUHX3RyYWRlcgQHJG1hdGNoMAUOcG9zaXRpb25GZWVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAtwb3NpdGlvbkZlZQUHJG1hdGNoMAULcG9zaXRpb25GZWUJAQNmZWUAARNyZXF1aXJlT3BlblBvc2l0aW9uAQdfdHJhZGVyAwkAAAIICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAAAJAAIBAhBObyBvcGVuIHBvc2l0aW9uBgENZ2V0T3JhY2xlRGF0YQEDa2V5BA1vcmFjbGVEYXRhU3RyCQCdCAIFBHRoaXMFA2tleQMDCQEJaXNEZWZpbmVkAQUNb3JhY2xlRGF0YVN0cgkBAiE9AgkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgIABwQKb3JhY2xlRGF0YQkAtQkCCQEFdmFsdWUBBQ1vcmFjbGVEYXRhU3RyAgEsBA1vcmFjbGVBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQpvcmFjbGVEYXRhAAAJAKwCAgIbSW52YWxpZCBvcmFjbGUgYWRkcmVzcyBpbjogCQEFdmFsdWUBBQ1vcmFjbGVEYXRhU3RyBAhwcmljZUtleQkAkQMCBQpvcmFjbGVEYXRhAAEECGJsb2NrS2V5CQCRAwIFCm9yYWNsZURhdGEAAgQHb3BlbktleQkAkQMCBQpvcmFjbGVEYXRhAAMJAJYKBAUNb3JhY2xlQWRkcmVzcwUIcHJpY2VLZXkFCGJsb2NrS2V5BQdvcGVuS2V5BQR1bml0AQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQljbG9zZU9ubHkACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFC2tfY2xvc2VPbmx5BwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQBDWNhbGNJbnZhcmlhbnQCB19xdEFzdFIHX2JzQXN0UgQHYnF0QXN0UgkAtgIBBQdfcXRBc3RSBAdiYnNBc3RSCQC2AgEFB19ic0FzdFIJAQVibXVsZAIFB2JxdEFzdFIFB2Jic0FzdFIBCXN3YXBJbnB1dAIGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50BAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQdfcXRBc3RXBAFrCQENY2FsY0ludmFyaWFudAIFB19xdEFzdFIFB19ic0FzdFIEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIDBQZfaXNBZGQJAGQCBQdfcXRBc3RSBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQJAGUCBQdfcXRBc3RSBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQEFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBA2FicwEJAGUCBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFB19ic0FzdFIEFWFtb3VudEJhc2VBc3NldEJvdWdodAMFBl9pc0FkZAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEBLQEFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQNJHQwMTY4NzcxNzA0NwkBDXVwZGF0ZVJlc2VydmUDBQZfaXNBZGQFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE2ODc3MTcwNDcCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjg3NzE3MDQ3Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE2ODc3MTcwNDcCXzMEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAttYXJrZXRQcmljZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAADCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBQdfcXRBc3RSAhQgYmVmb3JlIGJhc2UgYXNzZXQ6IAkApAMBBQdfYnNBc3RSAiEgcXVvdGUgYXNzZXQgYW1vdW50IHRvIGV4Y2hhbmdlOiAJAKQDAQURX3F1b3RlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIOIG1hcmtldFByaWNlOiAJAKQDAQULbWFya2V0UHJpY2UJAJYKBAUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEBD2NhbGNSb2xsb3ZlckZlZQISX29sZFBvc2l0aW9uTWFyZ2luIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBA9wb3NpdGlvbk1pbnV0ZXMJAGgCCQBpAgkAaQIJAGUCCQENbGFzdFRpbWVzdGFtcAAFIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wAOgHADwFDERFQ0lNQUxfVU5JVAQLcm9sbG92ZXJGZWUJAQRkaXZkAgkBBG11bGQCCQEEbXVsZAIFEl9vbGRQb3NpdGlvbk1hcmdpbgUPcG9zaXRpb25NaW51dGVzCQEPcm9sbG92ZXJGZWVSYXRlAAUPTUlOVVRFU19JTl9ZRUFSBQtyb2xsb3ZlckZlZQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBRBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEC3JvbGxvdmVyRmVlCQEPY2FsY1JvbGxvdmVyRmVlAgUSX29sZFBvc2l0aW9uTWFyZ2luBSBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAQMc2lnbmVkTWFyZ2luCQBkAgkAZQIJAGUCBQxfbWFyZ2luRGVsdGEFC3JvbGxvdmVyRmVlBQ5mdW5kaW5nUGF5bWVudAUSX29sZFBvc2l0aW9uTWFyZ2luBA0kdDAxOTMwMjE5NDI5AwkAZgIAAAUMc2lnbmVkTWFyZ2luCQCUCgIAAAkBA2FicwEFDHNpZ25lZE1hcmdpbgkAlAoCCQEDYWJzAQUMc2lnbmVkTWFyZ2luAAAEDHJlbWFpbk1hcmdpbggFDSR0MDE5MzAyMTk0MjkCXzEEB2JhZERlYnQIBQ0kdDAxOTMwMjE5NDI5Al8yCQCWCgQFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUOZnVuZGluZ1BheW1lbnQFC3JvbGxvdmVyRmVlARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQLcHJpY2VCZWZvcmUJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0AwkAAAIFEF9iYXNlQXNzZXRBbW91bnQAAAkAAgECGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAWsJAQ1jYWxjSW52YXJpYW50AgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyAwUGX2lzQWRkCQBkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQJAGUCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAQPcXVvdGVBc3NldEFmdGVyCQCgAwEJAQViZGl2ZAIFAWsJALYCAQUYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBA9xdW90ZUFzc2V0RGVsdGEJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyBRJfcXVvdGVBc3NldFJlc2VydmUEDnF1b3RlQXNzZXRTb2xkCQEEbXVsZAIFD3F1b3RlQXNzZXREZWx0YQURX3F1b3RlQXNzZXRXZWlnaHQEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDIwNjkxMjA4NTMJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFD3F1b3RlQXNzZXREZWx0YQUQX2Jhc2VBc3NldEFtb3VudAQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAyMDY5MTIwODUzAl8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMjA2OTEyMDg1MwJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAyMDY5MTIwODUzAl8zBAttYXJrZXRQcmljZQkBBGRpdmQCBQ5xdW90ZUFzc2V0U29sZAUQX2Jhc2VBc3NldEFtb3VudAQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmAwMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUSX3F1b3RlQXNzZXRSZXNlcnZlAhQgYmVmb3JlIGJhc2UgYXNzZXQ6IAkApAMBBRFfYmFzZUFzc2V0UmVzZXJ2ZQIgIGJhc2UgYXNzZXQgYW1vdW50IHRvIGV4Y2hhbmdlOiAJAKQDAQUQX2Jhc2VBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg8gbWFya2V0IHByaWNlOiAJAKQDAQULbWFya2V0UHJpY2UJAJkKBwUOcXVvdGVBc3NldFNvbGQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkBASEBBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAFC3ByaWNlSW1wYWN0AQpzd2FwT3V0cHV0AwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdAkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHBQZfaXNBZGQFEF9iYXNlQXNzZXRBbW91bnQFFF9jaGVja01heFByaWNlSW1wYWN0CQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAETZ2V0T3JhY2xlUHJpY2VWYWx1ZQMGb3JhY2xlCHByaWNlS2V5CGJsb2NrS2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQMJAQIhPQIFCGJsb2NrS2V5AgAEDGN1cnJlbnRCbG9jawgFCWxhc3RCbG9jawZoZWlnaHQED2xhc3RPcmFjbGVCbG9jawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUIYmxvY2tLZXkJAKwCAgkArAICCQCsAgICIkNhbiBub3QgZ2V0IG9yYWNsZSBibG9jay4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFCGJsb2NrS2V5AwkAZgIJAGUCBQxjdXJyZW50QmxvY2sFD2xhc3RPcmFjbGVCbG9jawkBDm1heE9yYWNsZURlbGF5AAkAAgEJAKwCAgkArAICCQCsAgICJk9yYWNsZSBzdGFsZSBkYXRhLiBMYXN0IG9yYWNsZSBibG9jazogCQCkAwEFD2xhc3RPcmFjbGVCbG9jawIQIGN1cnJlbnQgYmxvY2s6IAkApAMBBQxjdXJyZW50QmxvY2sFCWxhc3RWYWx1ZQUJbGFzdFZhbHVlAQ5nZXRPcmFjbGVQcmljZQAECmJhc2VPcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDWdldE9yYWNsZURhdGEBBQxrX2Jhc2VPcmFjbGUCGU5vIGJhc2UgYXNzZXQgb3JhY2xlIGRhdGEED2Jhc2VPcmFjbGVQcmljZQkBE2dldE9yYWNsZVByaWNlVmFsdWUDCAUKYmFzZU9yYWNsZQJfMQgFCmJhc2VPcmFjbGUCXzIIBQpiYXNlT3JhY2xlAl8zBAtxdW90ZU9yYWNsZQkBDWdldE9yYWNsZURhdGEBBQ1rX3F1b3RlT3JhY2xlBBBxdW90ZU9yYWNsZVByaWNlAwkBCWlzRGVmaW5lZAEFC3F1b3RlT3JhY2xlBAxxdW90ZU9yYWNsZVYJAQV2YWx1ZQEFC3F1b3RlT3JhY2xlCQETZ2V0T3JhY2xlUHJpY2VWYWx1ZQMIBQxxdW90ZU9yYWNsZVYCXzEIBQxxdW90ZU9yYWNsZVYCXzIIBQxxdW90ZU9yYWNsZVYCXzMFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQ9iYXNlT3JhY2xlUHJpY2UFEHF1b3RlT3JhY2xlUHJpY2UBDmlzTWFya2V0Q2xvc2VkAAQKYmFzZU9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQENZ2V0T3JhY2xlRGF0YQEFDGtfYmFzZU9yYWNsZQIZTm8gYmFzZSBhc3NldCBvcmFjbGUgZGF0YQQGb3JhY2xlCAUKYmFzZU9yYWNsZQJfMQQHb3BlbktleQgFCmJhc2VPcmFjbGUCXzQDCQECIT0CBQdvcGVuS2V5AgAEBmlzT3BlbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCbCAIFBm9yYWNsZQUHb3BlbktleQkArAICCQCsAgIJAKwCAgIrQ2FuIG5vdCBnZXQgb3JhY2xlIGlzIG9wZW4vY2xvc2VkLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUHb3BlbktleQkBASEBBQZpc09wZW4HAQxhYnNQcmljZURpZmYFDF9vcmFjbGVQcmljZRJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUHX3F0QXN0VwdfYnNBc3RXBApwcmljZUFmdGVyCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXBAxhdmVyYWdlUHJpY2UJAQRkaXZkAgkAZAIFDF9vcmFjbGVQcmljZQUKcHJpY2VBZnRlcgkAaAIAAgUMREVDSU1BTF9VTklUBAxhYnNQcmljZURpZmYJAQRkaXZkAgkBA2FicwEJAGUCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIFDGF2ZXJhZ2VQcmljZQUMYWJzUHJpY2VEaWZmARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AhJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUEC29yYWNsZVByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEEmFic1ByaWNlRGlmZkJlZm9yZQkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlCQEGcXRBc3RSAAkBBmJzQXN0UgAFB19xdEFzdFcFB19ic0FzdFcEEWFic1ByaWNlRGlmZkFmdGVyCQEMYWJzUHJpY2VEaWZmBQULb3JhY2xlUHJpY2UFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUFB19xdEFzdFcFB19ic0FzdFcDAwkAZgIFEWFic1ByaWNlRGlmZkFmdGVyCQEObWF4UHJpY2VTcHJlYWQACQBmAgURYWJzUHJpY2VEaWZmQWZ0ZXIFEmFic1ByaWNlRGlmZkJlZm9yZQcJAAIBCQCsAgIJAKwCAgkArAICAg1QcmljZSBzcHJlYWQgCQCkAwEFEWFic1ByaWNlRGlmZkFmdGVyAhQgPiBtYXggcHJpY2Ugc3ByZWFkIAkApAMBCQEObWF4UHJpY2VTcHJlYWQABgEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCEV9sb25nT3Blbk5vdGlvbmFsEl9zaG9ydE9wZW5Ob3Rpb25hbAQQX21heE9wZW5Ob3Rpb25hbAkBD21heE9wZW5Ob3Rpb25hbAADCQBmAgURX2xvbmdPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAAIBCQCsAgIJAKwCAgkArAICAhNMb25nIG9wZW4gbm90aW9uYWwgCQCkAwEFEV9sb25nT3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAMJAGYCBRJfc2hvcnRPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAAIBCQCsAgIJAKwCAgkArAICAhRTaG9ydCBvcGVuIG5vdGlvbmFsIAkApAMBBRJfc2hvcnRPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsBgEMZ2V0U3BvdFByaWNlAAQSX3F1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RSAAQRX2Jhc2VBc3NldFJlc2VydmUJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYNX3Bvc2l0aW9uU2l6ZQdfb3B0aW9uEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ1fcG9zaXRpb25TaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsAwkAAAIFB19vcHRpb24FD1BOTF9PUFRJT05fU1BPVAQTb3V0UG9zaXRpb25Ob3Rpb25hbAgJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAJfMQUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJAQ5nZXRPcmFjbGVQcmljZQAFEHBvc2l0aW9uTm90aW9uYWwBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHDV9wb3NpdGlvblNpemUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0B19vcHRpb24DCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIVSW52YWxpZCBwb3NpdGlvbiBzaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsCQEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYFDV9wb3NpdGlvblNpemUFB19vcHRpb24FEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BA11bnJlYWxpemVkUG5sAwUHaXNTaG9ydAkAZQIFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAUQcG9zaXRpb25Ob3Rpb25hbAkAZQIFEHBvc2l0aW9uTm90aW9uYWwFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAkAlAoCBRBwb3NpdGlvbk5vdGlvbmFsBQ11bnJlYWxpemVkUG5sASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyODczMTI4ODU5CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyODczMTI4ODU5Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI4NzMxMjg4NTkCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjg3MzEyODg1OQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyODczMTI4ODU5Al80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcABQdfb3B0aW9uAQ9jYWxjTWFyZ2luUmF0aW8DDV9yZW1haW5NYXJnaW4IX2JhZERlYnQRX3Bvc2l0aW9uTm90aW9uYWwJAQRkaXZkAgkAZQIFDV9yZW1haW5NYXJnaW4FCF9iYWREZWJ0BRFfcG9zaXRpb25Ob3Rpb25hbAEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyOTM3NDI5NTE1CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyOTM3NDI5NTE1Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI5Mzc0Mjk1MTUCXzIEA3BvbggFDSR0MDI5Mzc0Mjk1MTUCXzMEFnBvc2l0aW9uTGFzdFVwZGF0ZWRDUEYIBQ0kdDAyOTM3NDI5NTE1Al80BBFwb3NpdGlvblRpbWVzdGFtcAgFDSR0MDI5Mzc0Mjk1MTUCXzUEDSR0MDI5NTIxMjk2MTQJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyOTUyMTI5NjE0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjk1MjEyOTYxNAJfMgQNJHQwMjk2MTkyOTgzMQkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FFnBvc2l0aW9uTGFzdFVwZGF0ZWRDUEYFEXBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyOTYxOTI5ODMxAl8xBAdiYWREZWJ0CAUNJHQwMjk2MTkyOTgzMQJfMgkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUQcG9zaXRpb25Ob3Rpb25hbAEOZ2V0TWFyZ2luUmF0aW8BB190cmFkZXIJARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCB190cmFkZXINX3Bvc2l0aW9uU2l6ZQQMbWF4aW11bVJhdGlvCQEEdm1heAIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABBhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUFDG1heGltdW1SYXRpbwQKc3dhcFJlc3VsdAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUHBBxtYXhFeGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUKc3dhcFJlc3VsdAJfMQQLcHJpY2VJbXBhY3QIBQpzd2FwUmVzdWx0Al83AwkAZgIJAQ5tYXhQcmljZUltcGFjdAAFC3ByaWNlSW1wYWN0BRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwABFWludGVybmFsQ2xvc2VQb3NpdGlvbgcHX3RyYWRlcgVfc2l6ZQRfZmVlFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbhRfY2hlY2tNYXhQcmljZUltcGFjdApfbGlxdWlkYXRlBA0kdDAzMDg5ODMxMDU0CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDAzMDg5ODMxMDU0Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDMwODk4MzEwNTQCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzA4OTgzMTA1NAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAzMDg5ODMxMDU0Al80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDMwODk4MzEwNTQCXzUEDmlzTG9uZ1Bvc2l0aW9uCQBmAgUPb2xkUG9zaXRpb25TaXplAAAEEmFic09sZFBvc2l0aW9uU2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQMDCQBnAgUSYWJzT2xkUG9zaXRpb25TaXplBQVfc2l6ZQkAZgIFBV9zaXplAAAHBA5pc1BhcnRpYWxDbG9zZQkAZgIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUEDSR0MDMxMzQ2MzE3OTcJAQpzd2FwT3V0cHV0AwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQVfc2l6ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDAzMTM0NjMxNzk3Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzEzNDYzMTc5NwJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzEzNDYzMTc5NwJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDMxMzQ2MzE3OTcCXzQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkBAS0BBQVfc2l6ZQUFX3NpemUEDSR0MDMyMDEyMzIyMTkJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDMyMDEyMzIyMTkCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAzMjAxMjMyMjE5Al8yBA1yZWFsaXplZFJhdGlvCQEEZGl2ZAIJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUFEmFic09sZFBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUNcmVhbGl6ZWRSYXRpbwQNJHQwMzI1NjAzMjgwNgkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQScmVtYWluTWFyZ2luQmVmb3JlCAUNJHQwMzI1NjAzMjgwNgJfMQQCeDEIBQ0kdDAzMjU2MDMyODA2Al8yBAJ4MggFDSR0MDMyNTYwMzI4MDYCXzMEC3JvbGxvdmVyRmVlCAUNJHQwMzI1NjAzMjgwNgJfNAQPcG9zaXRpb25CYWREZWJ0CAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAULcmVhbGl6ZWRQbmwCXzIEEHJlYWxpemVkQ2xvc2VGZWUJAQRtdWxkAgkBBG11bGQCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQ1yZWFsaXplZFJhdGlvBQRfZmVlBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBA0kdDAzNDIxMjM0NTk4AwkAAAIFD25ld1Bvc2l0aW9uU2l6ZQAACQCUCgIAAAAACQCUCgIJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM0MjEyMzQ1OTgCXzEEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzQyMTIzNDU5OAJfMgQRb3Blbk5vdGlvbmFsRGVsdGEJAGUCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwEC21hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkBBG11bGQCCQBkAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFEnVucmVhbGl6ZWRQbmxBZnRlcgULbWFyZ2luUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAQRtdWxkAgkAZQIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIEEW1hcmdpblRvVHJhZGVyUmF3CQBlAgkAZQIFEnJlbWFpbk1hcmdpbkJlZm9yZQkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBRByZWFsaXplZENsb3NlRmVlBA5tYXJnaW5Ub1RyYWRlcgMJAGYCAAAFEW1hcmdpblRvVHJhZGVyUmF3AwUKX2xpcXVpZGF0ZQAACQACAQI3SW52YWxpZCBpbnRlcm5hbENsb3NlUG9zaXRpb24gcGFyYW1zOiB1bmFibGUgdG8gcGF5IGZlZQURbWFyZ2luVG9UcmFkZXJSYXcEEW5ld1Bvc2l0aW9uTWFyZ2luAwUMX2FkZFRvTWFyZ2luCQBkAgUebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvBQ5tYXJnaW5Ub1RyYWRlcgUebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvAwMJAQIhPQIFFF9taW5RdW90ZUFzc2V0QW1vdW50AAAJAGYCBRRfbWluUXVvdGVBc3NldEFtb3VudAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQCAyA8IAkApAMBBRRfbWluUXVvdGVBc3NldEFtb3VudAkAowoRBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYFD3Bvc2l0aW9uQmFkRGVidAULcmVhbGl6ZWRQbmwDAwUMX2FkZFRvTWFyZ2luBQ5pc1BhcnRpYWxDbG9zZQcAAAUObWFyZ2luVG9UcmFkZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQ5pc0xvbmdQb3NpdGlvbgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkBASEBBQ5pc0xvbmdQb3NpdGlvbgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkBASEBBQ5pc0xvbmdQb3NpdGlvbgURb3Blbk5vdGlvbmFsRGVsdGEAAAkAZAIFEHJlYWxpemVkQ2xvc2VGZWUFC3JvbGxvdmVyRmVlBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQACAQkArAICCQCsAgIJAKwCAgI9SW52YWxpZCBpbnRlcm5hbENsb3NlUG9zaXRpb24gcGFyYW1zOiBpbnZhbGlkIHBvc2l0aW9uIHNpemU6IAkApAMBBQVfc2l6ZQIGIG1heDogCQCkAwEFEmFic09sZFBvc2l0aW9uU2l6ZQEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIJAQ1sYXN0VGltZXN0YW1wAADoBwA8BA1zdGFydE1pbnV0ZUlkCQBlAgUIbWludXRlSWQFDVRXQVBfSU5URVJWQUwEB2xpc3RTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABARsaXN0CQC1CQIFB2xpc3RTdHICASwKAQhmaWx0ZXJGbgILYWNjdW11bGF0b3IEbmV4dAMJAGcCBQ1zdGFydE1pbnV0ZUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUEbmV4dAkArAICAh9nZXRUd2FwU3BvdFByaWNlOiBpbnZhbGlkIGludDogBQdsaXN0U3RyCQDNCAIFC2FjY3VtdWxhdG9yCQENcGFyc2VJbnRWYWx1ZQEFBG5leHQFC2FjY3VtdWxhdG9yBAVsaXN0RgoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmaWx0ZXJGbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAhtYXhJbmRleAMJAGYCCQCQAwEFBWxpc3RGAAAJAJYDAQUFbGlzdEYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFBGxpc3QAAAkArAICAh9nZXRUd2FwU3BvdFByaWNlOiBpbnZhbGlkIGludDogBQdsaXN0U3RyBAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzkzMzUzOTUxNAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzkzMzUzOTUxNAJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDM5MzM1Mzk1MTQCXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDM5MzM1Mzk1MTQCXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBAFrCQEFYm11bGQCBQFxBQFiBARuZXdCCQC3AgIFAWIFAnN6BARuZXdRCQEFYmRpdmQCBQFrBQRuZXdCBAF6CQEFYmRpdmQCBQRuZXdRBQRuZXdCBAZyZXN1bHQJAQViZGl2ZAIFAXAFAXoJAKADAQUGcmVzdWx0ARRnZXRTeW5jVGVybWluYWxQcmljZQMOX3Rlcm1pbmFsUHJpY2UHX3F0QXN0UgdfYnNBc3RSBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAQJbmV3UXRBc3RXCQEEZGl2ZAIJAQRtdWxkAgUOX3Rlcm1pbmFsUHJpY2UFB19ic0FzdFIFB19xdEFzdFIJAJUKAwUJbmV3UXRBc3RXBQxERUNJTUFMX1VOSVQAAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBAluZXdRdEFzdFcJARNnZXRRdW90ZUFzc2V0V2VpZ2h0BAUHX2JzQXN0UgUNX3Bvc2l0aW9uU2l6ZQUHX3F0QXN0UgUOX3Rlcm1pbmFsUHJpY2UECW5ld0JzQXN0VwUMREVDSU1BTF9VTklUBA1tYXJnaW5Ub1ZhdWx0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFB19xdEFzdFIFCW5ld1F0QXN0VwUHX2JzQXN0UgUJbmV3QnNBc3RXBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJUKAwUJbmV3UXRBc3RXBQluZXdCc0FzdFcFDW1hcmdpblRvVmF1bHQBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAECXNwb3RQcmljZQkBDGdldFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQlzcG90UHJpY2UFD3VuZGVybHlpbmdQcmljZQMDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAGCQEOaXNNYXJrZXRDbG9zZWQACQCVCgMAAAAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkDCQAAAgkBC2Z1bmRpbmdNb2RlAAUSRlVORElOR19BU1lNTUVUUklDBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24AAAQZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEDnByZW1pdW1Ub1ZhdWx0CQBlAgUZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgUYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZAwkAAAIJAQtmdW5kaW5nTW9kZQAFEkZVTkRJTkdfQVNZTU1FVFJJQwQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAAAEGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQOcHJlbWl1bVRvVmF1bHQJAGUCBRhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24FGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAJUKAwUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQBDmdldEFkanVzdGVkRmVlAgtfYXJ0aWZhY3RJZBBfYmFzZUZlZURpc2NvdW50BApiYXNlRmVlUmF3CQEDZmVlAAQHYmFzZUZlZQkBBG11bGQCBQpiYXNlRmVlUmF3BRBfYmFzZUZlZURpc2NvdW50BA0kdDA0NDA4OTQ0NTg0AwkBAiE9AgULX2FydGlmYWN0SWQCAAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQULX2FydGlmYWN0SWQDCQAAAgUMYXJ0aWZhY3RLaW5kBRhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUECXJlZHVjdGlvbgkBBGludEECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Rva2VuX3BhcmFtBQtfYXJ0aWZhY3RJZAQLYWRqdXN0ZWRGZWUJAQRtdWxkAgUHYmFzZUZlZQUJcmVkdWN0aW9uCQCUCgIFC2FkanVzdGVkRmVlBgkAAgECGUludmFsaWQgYXR0YWNoZWQgYXJ0aWZhY3QJAJQKAgUHYmFzZUZlZQcEC2FkanVzdGVkRmVlCAUNJHQwNDQwODk0NDU4NAJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDQwODk0NDU4NAJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0ARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIHX3RyYWRlcghfYXNzZXRJZAQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQMJAAACBQ9vbGRQb3NpdGlvblNpemUAAAYJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkAQtpc1NhbWVBc3NldAIHX3RyYWRlcghfYXNzZXRJZAkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQQZG9HZXRGZWVEaXNjb3VudAkA/AcECQEMbWluZXJBZGRyZXNzAAISY29tcHV0ZUZlZURpc2NvdW50CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFEGRvR2V0RmVlRGlzY291bnQFEGRvR2V0RmVlRGlzY291bnQEC2ZlZURpc2NvdW50BAckbWF0Y2gwBRBkb0dldEZlZURpc2NvdW50AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECIUludmFsaWQgY29tcHV0ZUZlZURpc2NvdW50IHJlc3VsdAQNJHQwNDUyNjQ0NTMzOAkBDmdldEFkanVzdGVkRmVlAgULX2FydGlmYWN0SWQFC2ZlZURpc2NvdW50BAthZGp1c3RlZEZlZQgFDSR0MDQ1MjY0NDUzMzgCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDQ1MjY0NDUzMzgCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0QXJ0aWZhY3RJZAEBaQQKYXJ0aWZhY3RJZAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJANgEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEkludmFsaWQgYXJ0aWZhY3RJZAIABQphcnRpZmFjdElkAQ1kaXN0cmlidXRlRmVlAQpfZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMJAQRtdWxkAgUKX2ZlZUFtb3VudAkBE2ZlZVRvU3Rha2Vyc1BlcmNlbnQABApmZWVUb1ZhdWx0CQBlAgUKX2ZlZUFtb3VudAUMZmVlVG9TdGFrZXJzCQCUCgIFDGZlZVRvU3Rha2VycwUKZmVlVG9WYXVsdAEOdXBkYXRlU2V0dGluZ3MNEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfaW5pdE1hcmdpblJhdGlvBRBfaW5pdE1hcmdpblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8FBF9tbXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwUUX2xpcXVpZGF0aW9uRmVlUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFD2tfZnVuZGluZ1BlcmlvZAUOX2Z1bmRpbmdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIFBWtfZmVlBQRfZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3NwcmVhZExpbWl0BQxfc3ByZWFkTGltaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VJbXBhY3QFD19tYXhQcmljZUltcGFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlU3ByZWFkBQ9fbWF4UHJpY2VTcHJlYWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbWF4T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFFF9mZWVUb1N0YWtlcnNQZXJjZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heE9yYWNsZURlbGF5BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19yb2xsb3ZlckZlZQUMX3JvbGxvdmVyRmVlBQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXICDl9pc05ld1Bvc2l0aW9uCF9hZGRyZXNzAwUOX2lzTmV3UG9zaXRpb24ED2N1cnJlbnRTZXF1ZW5jZQkBDGxhc3RTZXF1ZW5jZQAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQUIX2FkZHJlc3MJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa19zZXF1ZW5jZQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABBQNuaWwFA25pbAERdXBkYXRlUG9zaXRpb25GZWUDDl9pc05ld1Bvc2l0aW9uCF9hZGRyZXNzBF9mZWUDBQ5faXNOZXdQb3NpdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUIX2FkZHJlc3MFBF9mZWUFA25pbAUDbmlsAQ51cGRhdGVQb3NpdGlvbgYIX2FkZHJlc3MFX3NpemUHX21hcmdpbg1fb3Blbk5vdGlvbmFsIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sYXRlc3RUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFCF9hZGRyZXNzBRBfbGF0ZXN0VGltZXN0YW1wBQNuaWwBCmFwcGVuZFR3YXABBl9wcmljZQQIbWludXRlSWQJAGkCCQBpAgkBDWxhc3RUaW1lc3RhbXAAAOgHADwEEHByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAMJAGYCBRBwcmV2aW91c01pbnV0ZUlkBQhtaW51dGVJZAkAAgECEVRXQVAgb3V0LW9mLW9yZGVyBAxsYXN0TWludXRlSWQDCQAAAgUQcHJldmlvdXNNaW51dGVJZAAABQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAMJAGYCBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUQcHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUQcHJldmlvdXNNaW51dGVJZAUGX3ByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQlwcmV2UHJpY2UEBGxpc3QJAQtwdXNoVG9RdWV1ZQMJAQlzdHJUb0xpc3QBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAUNVFdBUF9JTlRFUlZBTAkApAMBBQhtaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBl9wcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfbGFzdE1pbnV0ZUlkBQhtaW51dGVJZAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX2xhc3REYXRhU3RyCQEJbGlzdFRvU3RyAQUEbGlzdAUDbmlsBBh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQAAAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQZfcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFCXByZXZQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBl9wcmljZQUDbmlsARF1cGRhdGVBbW1SZXNlcnZlcwIHX3F0QXN0UgdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFIFA25pbAEQdXBkYXRlQW1tV2VpZ2h0cwIHX3F0QXN0VwdfYnNBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3F1b3RlQXNzZXRXZWlnaHQFB19xdEFzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfYmFzZUFzc2V0V2VpZ2h0BQdfYnNBc3RXBQNuaWwBCXVwZGF0ZUFtbQgHX3F0QXN0UgdfYnNBc3RSF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyFV9vcGVuSW50ZXJlc3ROb3Rpb25hbBZfdG90YWxMb25nUG9zaXRpb25TaXplF190b3RhbFNob3J0UG9zaXRpb25TaXplFl90b3RhbExvbmdPcGVuTm90aW9uYWwXX3RvdGFsU2hvcnRPcGVuTm90aW9uYWwEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAMJAQIhPQIJAGUCBRZfdG90YWxMb25nUG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYSW52YWxpZCBBTU0gc3RhdGUgZGF0YTogCQCkAwEFFl90b3RhbExvbmdQb3NpdGlvblNpemUCBCArICAJAKQDAQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCBCAhPSAJAKQDAQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAM4IAgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19vcGVuSW50ZXJlc3RMb25nBRZfdG90YWxMb25nT3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX29wZW5JbnRlcmVzdFNob3J0BRdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAUDbmlsCQEKYXBwZW5kVHdhcAEJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcBDmRlbGV0ZVBvc2l0aW9uAQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFCF9hZGRyZXNzBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwWAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIWSW52YWxpZCB1bnBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhtJbnZhbGlkIHNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BgUDbmlsAWkBDnVuc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIHVuc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkHBQNuaWwBaQEMYWRkTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAhtJbnZhbGlkIGFkZExpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkBA0kdDA1NDc0NTU0ODk2CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA1NDc0NTU0ODk2Al8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA1NDc0NTU0ODk2Al8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNTQ3NDU1NDg5NgJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgURX3F1b3RlQXNzZXRBbW91bnQAAAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBA2FicwEJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZQIFB19ic0FzdFIFF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlBA0kdDA1NTgyODU1OTc5CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA1NTgyODU1OTc5Al8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA1NTgyODU1OTc5Al8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNTU4Mjg1NTk3OQJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jaGFuZ2VTZXR0aW5ncw0QX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIGNoYW5nZVNldHRpbmdzIHBhcmFtcwkBDnVwZGF0ZVNldHRpbmdzDQUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQFpAQppbml0aWFsaXplEgdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUPX2Jhc2VPcmFjbGVEYXRhEF9xdW90ZU9yYWNsZURhdGEMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUDAwMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAGcCAAAFEF9tYXhPcGVuTm90aW9uYWwGCQBnAgAABRRfZmVlVG9TdGFrZXJzUGVyY2VudAYJAGYCBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUMREVDSU1BTF9VTklUBgkAZwIAAAUPX21heE9yYWNsZURlbGF5BgkAZwIAAAUMX3JvbGxvdmVyRmVlBgkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0IBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAAACQEOdXBkYXRlU2V0dGluZ3MNBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQUMX3JvbGxvdmVyRmVlCQENdXBkYXRlRnVuZGluZwUJAGQCCQENbGFzdFRpbWVzdGFtcAAFDl9mdW5kaW5nUGVyaW9kAAAAAAAAAAAJAQ11cGRhdGVCYWxhbmNlAQAACQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgkAzAgCCQELU3RyaW5nRW50cnkCBQxrX2Jhc2VPcmFjbGUFD19iYXNlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX3F1b3RlT3JhY2xlBRBfcXVvdGVPcmFjbGVEYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDF9jb29yZGluYXRvcgUDbmlsAWkBEGluY3JlYXNlUG9zaXRpb24ECl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQAAwMDAwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIFB190cmFkZXIFC19hc3NldElkU3RyBgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDU5NzU3NTk5MDYJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyCQENZ2V0QXJ0aWZhY3RJZAEFAWkEC2FkanVzdGVkRmVlCAUNJHQwNTk3NTc1OTkwNgJfMQQMYnVybkFydGlmYWN0CAUNJHQwNTk3NTc1OTkwNgJfMgQHX2Ftb3VudAkBBGRpdmQCBQpfcmF3QW1vdW50CQBkAgkBBG11bGQCBQthZGp1c3RlZEZlZQUJX2xldmVyYWdlBQxERUNJTUFMX1VOSVQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQJAGUCBQpfcmF3QW1vdW50BQdfYW1vdW50BA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAIVYWNjZXB0UGF5bWVudFdpdGhMaW5rCQDMCAIFB190cmFkZXIJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRNkaXN0cmlidXRlRmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDYwNDAyNjA1NzAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDYwNDAyNjA1NzACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjA0MDI2MDU3MAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2MDQwMjYwNTcwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDYwNDAyNjA1NzACXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjA0MDI2MDU3MAJfNQQNaXNOZXdQb3NpdGlvbgkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABA9pc1NhbWVEaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkAAAIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAQOZXhwYW5kRXhpc3RpbmcDCQEBIQEFDWlzTmV3UG9zaXRpb24FD2lzU2FtZURpcmVjdGlvbgcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDYwODU5NjM5ODADAwUNaXNOZXdQb3NpdGlvbgYFDmV4cGFuZEV4aXN0aW5nBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA2MTM2ODYxNTQxCQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0CAUNJHQwNjEzNjg2MTU0MQJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDYxMzY4NjE1NDECXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDYxMzY4NjE1NDECXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2MTM2ODYxNTQxAl80AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABQxvcGVuTm90aW9uYWwAAAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUMb3Blbk5vdGlvbmFsAAAEDSR0MDYyMDg3NjIzNjIJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDYyMDg3NjIzNjICXzEEAngxCAUNJHQwNjIwODc2MjM2MgJfMgQCeDIIBQ0kdDA2MjA4NzYyMzYyAl8zBAtyb2xsb3ZlckZlZQgFDSR0MDYyMDg3NjIzNjICXzQDCQEBIQEJARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQACAQIVT3ZlciBtYXggc3ByZWFkIGxpbWl0AwkBASEBCQEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIWT3ZlciBtYXggb3BlbiBub3Rpb25hbAkAoAoOBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplCQENbGFzdFRpbWVzdGFtcAAFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgULcm9sbG92ZXJGZWUEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDYzNjgwNjM3OTYJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA2MzY4MDYzNzk2Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNjM2ODA2Mzc5NgJfMgMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAAIBAi5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDYwODU5NjM5ODACXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwNjA4NTk2Mzk4MAJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2MDg1OTYzOTgwAl8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDYwODU5NjM5ODACXzQEFG5ld1Bvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjA4NTk2Mzk4MAJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjA4NTk2Mzk4MAJfNgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDYwODU5NjM5ODACXzcEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2MDg1OTYzOTgwAl84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNjA4NTk2Mzk4MAJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA2MDg1OTYzOTgwA18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNjA4NTk2Mzk4MANfMTEEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjA4NTk2Mzk4MANfMTIEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDYwODU5NjM5ODADXzEzBAtyb2xsb3ZlckZlZQgFDSR0MDYwODU5NjM5ODADXzE0BA0kdDA2Mzk4NjY0MDU3CQENZGlzdHJpYnV0ZUZlZQEJAGQCBQlmZWVBbW91bnQFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2Mzk4NjY0MDU3Al8xBApmZWVUb1ZhdWx0CAUNJHQwNjM5ODY2NDA1NwJfMgQFc3Rha2UDCQBnAgUHX2Ftb3VudAULcm9sbG92ZXJGZWUJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAJAGUCBQdfYW1vdW50BQtyb2xsb3ZlckZlZQUDbmlsCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCCQBlAgULcm9sbG92ZXJGZWUFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQMZGVwb3NpdFZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFDGRlcG9zaXRWYXVsdAUMZGVwb3NpdFZhdWx0BAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYFFG5ld1Bvc2l0aW9uVGltZXN0YW1wCQEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIFDWlzTmV3UG9zaXRpb24FB190cmFkZXIJARF1cGRhdGVQb3NpdGlvbkZlZQMFDWlzTmV3UG9zaXRpb24FB190cmFkZXIFC2FkanVzdGVkRmVlCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQHX2Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQAAwMDAwMDAwkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpc1NhbWVBc3NldAIFB190cmFkZXIFC19hc3NldElkU3RyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA2NjE2ODY2MzM2CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2NjE2ODY2MzM2Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDY2MTY4NjYzMzYCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjYxNjg2NjMzNgJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2NjE2ODY2MzM2Al80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDY2MTY4NjYzMzYCXzUEBXN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvblRpbWVzdGFtcAQWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwMJAGYCBQtyb2xsb3ZlckZlZQAABA0kdDA2NjYyMTY2NjgwCQENZGlzdHJpYnV0ZUZlZQEFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2NjYyMTY2NjgwAl8xBApmZWVUb1ZhdWx0CAUNJHQwNjY2MjE2NjY4MAJfMgQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUMZmVlVG9TdGFrZXJzBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAQEtAQUKZmVlVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0CQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgkAZQIFEW9sZFBvc2l0aW9uTWFyZ2luBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4BB19hbW91bnQEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgMDAwMDCQBnAgAABQdfYW1vdW50BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAh9JbnZhbGlkIHJlbW92ZU1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA2Nzc5MjY3OTYwCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2Nzc5MjY3OTYwAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDY3NzkyNjc5NjACXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjc3OTI2Nzk2MAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2Nzc5MjY3OTYwAl80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDY3NzkyNjc5NjACXzUEDSR0MDY3OTY2NjgyMTUJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAJAQEtAQUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNjc5NjY2ODIxNQJfMQQHYmFkRGVidAgFDSR0MDY3OTY2NjgyMTUCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNjc5NjY2ODIxNQJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA2Nzk2NjY4MjE1Al80AwkBAiE9AgUHYmFkRGVidAAACQACAQIdSW52YWxpZCByZW1vdmVkIG1hcmdpbiBhbW91bnQEC21hcmdpblJhdGlvCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBD2luaXRNYXJnaW5SYXRpbwAGCQACAQkArAICCQCsAgIJAKwCAgIZVG9vIG11Y2ggbWFyZ2luIHJlbW92ZWQ6IAkApAMBBQttYXJnaW5SYXRpbwIDIDwgCQCkAwEJAQ9pbml0TWFyZ2luUmF0aW8ABA0kdDA2ODYwMTY4NjYwCQENZGlzdHJpYnV0ZUZlZQEFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2ODYwMTY4NjYwAl8xBApmZWVUb1ZhdWx0CAUNJHQwNjg2MDE2ODY2MAJfMgQWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwMJAGYCBQtyb2xsb3ZlckZlZQAABAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAQEtAQUKZmVlVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0CQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCCQBkAgUHX2Ftb3VudAUMZmVlVG9TdGFrZXJzBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplCQENbGFzdFRpbWVzdGFtcAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUHX2Ftb3VudAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDWNsb3NlUG9zaXRpb24DBV9zaXplFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyBAtwb3NpdGlvbkZlZQkBDmdldFBvc2l0aW9uRmVlAQUHX3RyYWRlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfNQQNJHQwNzAzMTc3MDkwMgkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgcFB190cmFkZXIFBV9zaXplBQtwb3NpdGlvbkZlZQUUX21pblF1b3RlQXNzZXRBbW91bnQFDF9hZGRUb01hcmdpbgYGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MDMxNzcwOTAyAl8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDcwMzE3NzA5MDICXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzAzMTc3MDkwMgJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MDMxNzcwOTAyAl80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MDMxNzcwOTAyAl81BAtyZWFsaXplZFBubAgFDSR0MDcwMzE3NzA5MDICXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzAzMTc3MDkwMgJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwMzE3NzA5MDICXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwMzE3NzA5MDICXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MDMxNzcwOTAyA18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcwMzE3NzA5MDIDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDcwMzE3NzA5MDIDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MDMxNzcwOTAyA18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MDMxNzcwOTAyA18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzAzMTc3MDkwMgNfMTUEC3JlYWxpemVkRmVlCAUNJHQwNzAzMTc3MDkwMgNfMTYDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAipJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogYmFkIGRlYnQDCQBnAgUUb2xkUG9zaXRpb25UaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAkAAgECU0ludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzOiB3YWl0IGF0IGxlYXN0IDEgYmxvY2sgYmVmb3JlIGNsb3NpbmcgdGhlIHBvc2l0aW9uBA5pc1BhcnRpYWxDbG9zZQkBAiE9AgUPbmV3UG9zaXRpb25TaXplAAAEDndpdGhkcmF3QW1vdW50CQBkAgUObWFyZ2luVG9UcmFkZXIFC3JlYWxpemVkRmVlBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDWFtbU5ld0JhbGFuY2UDCQBmAgAABQphbW1CYWxhbmNlAAAFCmFtbUJhbGFuY2UEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDndpdGhkcmF3QW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA0kdDA3MTU3NDcxNjMzCQENZGlzdHJpYnV0ZUZlZQEFC3JlYWxpemVkRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA3MTU3NDcxNjMzAl8xBApmZWVUb1ZhdWx0CAUNJHQwNzE1NzQ3MTYzMwJfMgQMZGVwb3NpdFZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFDGRlcG9zaXRWYXVsdAUMZGVwb3NpdFZhdWx0BAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQtyZWFsaXplZEZlZQUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgMFDmlzUGFydGlhbENsb3NlCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgMJAGYCBQ5tYXJnaW5Ub1RyYWRlcgAACQEId2l0aGRyYXcCBQ5fdHJhZGVyQWRkcmVzcwUObWFyZ2luVG9UcmFkZXIFA25pbAkBDXVwZGF0ZUJhbGFuY2UBBQ1hbW1OZXdCYWxhbmNlCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAQdfdHJhZGVyBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEFmxpcXVpZGF0aW9uTWFyZ2luUmF0aW8DCQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEEW9yYWNsZU1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFEVBOTF9PUFRJT05fT1JBQ0xFCQEEdm1heAIFD3Nwb3RNYXJnaW5SYXRpbwURb3JhY2xlTWFyZ2luUmF0aW8FD3Nwb3RNYXJnaW5SYXRpbwMDAwMDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwUWbGlxdWlkYXRpb25NYXJnaW5SYXRpbwkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQQUaXNQYXJ0aWFsTGlxdWlkYXRpb24DAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcED29sZFBvc2l0aW9uU2l6ZQgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEED3Bvc2l0aW9uU2l6ZUFicwkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQNJHQwNzM5NDY3NDI2OQMFFGlzUGFydGlhbExpcXVpZGF0aW9uBA9saXF1aWRhdGlvblNpemUJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEEGxpcXVpZGF0aW9uUmF0aW8JAQRkaXZkAgkBA2FicwEFD2xpcXVpZGF0aW9uU2l6ZQUPcG9zaXRpb25TaXplQWJzCQCUCgIFEGxpcXVpZGF0aW9uUmF0aW8JAQNhYnMBBQ9saXF1aWRhdGlvblNpemUJAJQKAgAABQ9wb3NpdGlvblNpemVBYnMEEGxpcXVpZGF0aW9uUmF0aW8IBQ0kdDA3Mzk0Njc0MjY5Al8xBA9saXF1aWRhdGlvblNpemUIBQ0kdDA3Mzk0Njc0MjY5Al8yBA0kdDA3NDI3NTc0OTEzCQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uBwUHX3RyYWRlcgMFFGlzUGFydGlhbExpcXVpZGF0aW9uBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8AAAAGBwYED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDc0Mjc1NzQ5MTMCXzEEEW5ld1Bvc2l0aW9uTWFyZ2luCAUNJHQwNzQyNzU3NDkxMwJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA3NDI3NTc0OTEzAl8zBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDc0Mjc1NzQ5MTMCXzQED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDc0Mjc1NzQ5MTMCXzUEC3JlYWxpemVkUG5sCAUNJHQwNzQyNzU3NDkxMwJfNgQObWFyZ2luVG9UcmFkZXIIBQ0kdDA3NDI3NTc0OTEzAl83BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzQyNzU3NDkxMwJfOAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzQyNzU3NDkxMwJfOQQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDc0Mjc1NzQ5MTMDXzEwBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNzQyNzU3NDkxMwNfMTEEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNzQyNzU3NDkxMwNfMTIED3RvdGFsU2hvcnRBZnRlcggFDSR0MDc0Mjc1NzQ5MTMDXzEzBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc0Mjc1NzQ5MTMDXzE0BBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3NDI3NTc0OTEzA18xNQQSbGlxdWlkYXRpb25QZW5hbHR5CAUNJHQwNzQyNzU3NDkxMwNfMTYED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBApmZWVUb1ZhdWx0CQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDW5ld0FtbUJhbGFuY2UDCQBmAgAABQphbW1CYWxhbmNlAAAFCmFtbUJhbGFuY2UEC2xvY2tCYWREZWJ0AwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAABAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAGQCBQ9wb3NpdGlvbkJhZERlYnQFEmxpcXVpZGF0aW9uUGVuYWx0eQUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFEmxpcXVpZGF0aW9uUGVuYWx0eQUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCAwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24JAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnBheUZ1bmRpbmcABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQENbGFzdFRpbWVzdGFtcAAGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgEJAKwCAgkArAICCQCsAgICIUludmFsaWQgZnVuZGluZyBibG9jayB0aW1lc3RhbXA6IAkApAMBCQENbGFzdFRpbWVzdGFtcAACAyA8IAkApAMBBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwNzY5MDA3Njk2MgkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDc2OTAwNzY5NjICXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3NjkwMDc2OTYyAl8yCQENdXBkYXRlRnVuZGluZwUJAGQCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGQCCQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRNsb25nUHJlbWl1bUZyYWN0aW9uCQBkAgkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUABAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEDSR0MDc3Mzk0Nzc3NjAJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFB19xdEFzdFIFB19ic0FzdFIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA3NzM5NDc3NzYwAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA3NzM5NDc3NzYwAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNzczOTQ3Nzc2MAJfMwQQbWFyZ2luVG9WYXVsdEFkagMDCQBmAgAABQ1tYXJnaW5Ub1ZhdWx0CQBmAgkBA2FicwEFDW1hcmdpblRvVmF1bHQJAQhjYmFsYW5jZQAHCQEBLQEJAQhjYmFsYW5jZQAFDW1hcmdpblRvVmF1bHQEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBRBtYXJnaW5Ub1ZhdWx0QWRqAAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBRBtYXJnaW5Ub1ZhdWx0QWRqBQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJAM4IAgkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUQbWFyZ2luVG9WYXVsdEFkagkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFE25ld1F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgUHX2JzQXN0UgUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGVuc3VyZUNhbGxlZE9uY2UAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIiSW52YWxpZCBzYXZlQ3VycmVudFR4SWQgcGFyYW1ldGVycwQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCGtfbGFzdFR4AgADCQECIT0CBQZsYXN0VHgJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCBQhrX2xhc3RUeAUGbGFzdFR4BQNuaWwJAAIBAilDYW4gbm90IGNhbGwgdkFNTSBtZXRob2RzIHR3aWNlIGluIG9uZSB0eAFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQNJHQwNzg5MTk3OTA0MwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwNzg5MTk3OTA0MwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA3ODkxOTc5MDQzAl8yBANwb24IBQ0kdDA3ODkxOTc5MDQzAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDc4OTE5NzkwNDMCXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNzg5MTk3OTA0MwJfNQQNJHQwNzkwNDY3OTE0NwkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwNzkwNDY3OTE0NwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDc5MDQ2NzkxNDcCXzIEDSR0MDc5MTUwNzkzNzQJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDc5MTUwNzkzNzQCXzEEB2JhZERlYnQIBQ0kdDA3OTE1MDc5Mzc0Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDc5MTUwNzkzNzQCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNzkxNTA3OTM3NAJfNAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0CQEBcwEFEHBvc2l0aW9uTm90aW9uYWwJAQFzAQULcm9sbG92ZXJGZWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdmlld19nZXRQZWdBZGp1c3RDb3N0AQZfcHJpY2UEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQGcmVzdWx0CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDBQZfcHJpY2UFB19xdEFzdFIFB19ic0FzdFIJAAIBCQCkAwEIBQZyZXN1bHQCXzMBaQEYdmlld19nZXRUZXJtaW5hbEFtbVByaWNlAAQNJHQwNzk4MTA3OTg5MQkBE2dldFRlcm1pbmFsQW1tU3RhdGUABBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwNzk4MTA3OTg5MQJfMQQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwNzk4MTA3OTg5MQJfMgQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RXAAkBBG11bGQCBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUJAQZic0FzdFcACQACAQkApAMBBQVwcmljZQFpAQ92aWV3X2dldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDgwMTA2ODAxNjgJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MDEwNjgwMTY4Al8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwODAxMDY4MDE2OAJfMgQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJARBnZXRUd2FwU3BvdFByaWNlAAkBAXMBCQEOZ2V0T3JhY2xlUHJpY2UAAWkBEGNvbXB1dGVTcG90UHJpY2UABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEBnJlc3VsdAkBDGdldFNwb3RQcmljZQAJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQGcmVzdWx0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgULX2FydGlmYWN0SWQJAJQKAgUDbmlsBQZyZXN1bHQBAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5sx+Ksw==", "height": 2579404, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HeGCV1eDjNHk3XcpZYYzYJNjDwzePLTBBb4FpFxdra4a Next: E5pv1MNRP9aLsoQcKb1GkzRjSrWCGUrcop3xgcnceBUX Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_baseOracle"
55
66 let b = "k_quoteOracle"
77
88 let c = "k_balance"
99
1010 let d = "k_sequence"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionSequence"
2121
2222 let j = "k_positionAsset"
2323
2424 let k = "k_positionFee"
2525
2626 let l = "k_positionTimestamp"
2727
2828 let m = "k_initialized"
2929
3030 let n = "k_paused"
3131
3232 let o = "k_closeOnly"
3333
3434 let p = "k_fee"
3535
3636 let q = "k_rollover_fee"
3737
3838 let r = "k_fundingPeriod"
3939
4040 let s = "k_initMarginRatio"
4141
4242 let t = "k_mmr"
4343
4444 let u = "k_liquidationFeeRatio"
4545
4646 let v = "k_partLiquidationRatio"
4747
4848 let w = "k_spreadLimit"
4949
5050 let x = "k_maxPriceImpact"
5151
5252 let y = "k_maxPriceSpread"
5353
5454 let z = "k_maxOpenNotional"
5555
5656 let A = "k_feeToStakersPercent"
5757
5858 let B = "k_maxOracleDelay"
5959
6060 let C = "k_fundingMode"
6161
6262 let D = "k_lastDataStr"
6363
6464 let E = "k_lastMinuteId"
6565
6666 let F = "k_twapDataLastCumulativePrice"
6767
6868 let G = "k_twapDataLastPrice"
6969
7070 let H = "k_twapDataPreviousMinuteId"
7171
7272 let I = "k_latestLongPremiumFraction"
7373
7474 let J = "k_latestShortPremiumFraction"
7575
7676 let K = "k_nextFundingBlockMinTimestamp"
7777
7878 let L = "k_longFundingRate"
7979
8080 let M = "k_shortFundingRate"
8181
8282 let N = "k_qtAstR"
8383
8484 let O = "k_bsAstR"
8585
8686 let P = "k_qtAstW"
8787
8888 let Q = "k_bsAstW"
8989
9090 let R = "k_totalPositionSize"
9191
9292 let S = "k_totalLongPositionSize"
9393
9494 let T = "k_totalShortPositionSize"
9595
9696 let U = "k_openInterestNotional"
9797
9898 let V = "k_openInterestShort"
9999
100100 let W = "k_openInterestLong"
101101
102102 let X = "k_lastTx"
103103
104104 let Y = "k_coordinatorAddress"
105105
106106 let Z = "k_vault_address"
107107
108108 let aa = "k_admin_address"
109109
110110 let ab = "k_quote_asset"
111111
112112 let ac = "k_quote_staking"
113113
114114 let ad = "k_staking_address"
115115
116116 let ae = "k_miner_address"
117117
118118 let af = "k_orders_address"
119119
120120 let ag = "k_referral_address"
121121
122122 let ah = "k_exchange_address"
123123
124124 let ai = "k_nft_manager_address"
125125
126126 func aj (ak,al) = ((ak + "_") + al)
127127
128128
129129 func am () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
130130
131131
132132 func an () = addressFromString(getStringValue(am(), aa))
133133
134134
135135 func ao () = fromBase58String(getStringValue(am(), ab))
136136
137137
138138 func ap () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Quote asset staking not set")
139139
140140
141141 func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Staking not set")
142142
143143
144144 func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), Z)), "Vault not set")
145145
146146
147147 func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Miner not set")
148148
149149
150150 func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Orders not set")
151151
152152
153153 func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ag)), "Referral not set")
154154
155155
156156 func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ai)), "NFT Manager not set")
157157
158158
159159 let aw = "k_token_param"
160160
161161 let ax = "k_token_type"
162162
163163 let ay = "fee_reduction"
164164
165165 let az = 1
166166
167167 let aA = 2
168168
169169 let aB = 15
170170
171171 let aC = 1000
172172
173173 let aD = 6
174174
175175 let aE = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
176176
177177 let aF = (525600 * aE)
178178
179179 let aG = (86400 * aE)
180180
181181 let aH = 1
182182
183183 let aI = 2
184184
185185 func aJ (aK) = (toString(aK) + ",")
186186
187187
188188 func aL (aK,aM) = fraction(aK, aE, aM, HALFEVEN)
189189
190190
191191 func aN (aK,aM) = fraction(aK, aM, aE, HALFEVEN)
192192
193193
194194 func aO (aK,aM) = fraction(aK, toBigInt(aE), aM, HALFEVEN)
195195
196196
197197 func aP (aK,aM) = fraction(aK, aM, toBigInt(aE), HALFEVEN)
198198
199199
200200 func aQ (aK) = if ((aK > 0))
201201 then aK
202202 else -(aK)
203203
204204
205205 func aR (aK,aM) = if ((aK >= aM))
206206 then aK
207207 else aM
208208
209209
210210 func aS (aT) = if ((size(aT) == 0))
211211 then ""
212212 else makeString(aT, ",")
213213
214214
215215 func aU (aV) = if ((aV == ""))
216216 then nil
217217 else split(aV, ",")
218218
219219
220220 func aW (aT,aX,aY) = if ((size(aT) > aX))
221221 then (removeByIndex(aT, 0) :+ aY)
222222 else (aT :+ aY)
223223
224224
225225 func aZ (ba) = valueOrErrorMessage(getInteger(this, ba), ("no value for " + ba))
226226
227227
228228 func bb (ba,bc) = valueOrElse(getInteger(this, ba), bc)
229229
230230
231231 func bd (al,ak) = {
232232 let be = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
233233 be
234234 }
235235
236236
237237 func bf (al,ak) = {
238238 let be = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
239239 be
240240 }
241241
242242
243243 let bg = 1
244244
245245 let bh = 2
246246
247247 func bi () = aZ(c)
248248
249249
250250 func bj () = aZ(p)
251251
252252
253253 func bk () = aZ(q)
254254
255255
256256 func bl () = aZ(s)
257257
258258
259259 func bm () = aZ(N)
260260
261261
262262 func bn () = aZ(O)
263263
264264
265265 func bo () = bb(P, aE)
266266
267267
268268 func bp () = bb(Q, aE)
269269
270270
271271 func bq () = aZ(R)
272272
273273
274274 func br () = aZ(U)
275275
276276
277277 func bs () = aZ(V)
278278
279279
280280 func bt () = aZ(W)
281281
282282
283283 func bu () = aZ(K)
284284
285285
286286 func bv () = aZ(r)
287287
288288
289289 func bw () = (bv() * aE)
290290
291291
292292 func bx () = (bv() * aC)
293293
294294
295295 func by () = aZ(t)
296296
297297
298298 func bz () = aZ(u)
299299
300300
301301 func bA () = aZ(v)
302302
303303
304304 func bB () = aZ(w)
305305
306306
307307 func bC () = aZ(x)
308308
309309
310310 func bD () = aZ(y)
311311
312312
313313 func bE () = aZ(z)
314314
315315
316316 func bF () = aZ(I)
317317
318318
319319 func bG () = aZ(J)
320320
321321
322322 func bH () = aZ(T)
323323
324324
325325 func bI () = aZ(S)
326326
327327
328328 func bJ () = bb(d, 0)
329329
330330
331331 func bK () = aZ(A)
332332
333333
334334 func bL () = aZ(B)
335335
336336
337337 func bM () = bb(C, bg)
338338
339339
340340 func bN () = lastBlock.timestamp
341341
342342
343343 func bO (bP) = valueOrElse(getString(at(), "k_sender"), toString(bP.caller))
344344
345345
346346 func bQ (bR,bS,bT) = {
347347 let bU = (bR - bS)
348348 if (if (bT)
349349 then (0 > bU)
350350 else false)
351351 then throw(((("Invalid margin: " + toString(bR)) + " < ") + toString(bS)))
352352 else if (if (!(bT))
353353 then (bU >= 0)
354354 else false)
355355 then throw(((("Invalid margin: " + toString(bR)) + " > ") + toString(bS)))
356356 else true
357357 }
358358
359359
360360 func bV (bW) = if ((bW == 0))
361361 then throw("Should not be called with _positionSize == 0")
362362 else if ((bW > 0))
363363 then bF()
364364 else bG()
365365
366366
367367 func bX (bY) = {
368368 let bZ = getInteger(this, aj(e, bY))
369369 let ca = bZ
370370 if ($isInstanceOf(ca, "Int"))
371371 then {
372372 let cb = ca
373373 $Tuple5(cb, getIntegerValue(this, aj(f, bY)), getIntegerValue(this, aj(g, bY)), getIntegerValue(this, aj(h, bY)), getIntegerValue(this, aj(l, bY)))
374374 }
375375 else $Tuple5(0, 0, 0, 0, 0)
376376 }
377377
378378
379379 func cc (bY) = {
380380 let cd = getString(this, aj(j, bY))
381381 let ca = cd
382382 if ($isInstanceOf(ca, "String"))
383383 then {
384384 let ce = ca
385385 ce
386386 }
387387 else toBase58String(ao())
388388 }
389389
390390
391391 func cf (bY) = {
392392 let cg = getInteger(this, aj(k, bY))
393393 let ca = cg
394394 if ($isInstanceOf(ca, "Int"))
395395 then {
396396 let ch = ca
397397 ch
398398 }
399399 else bj()
400400 }
401401
402402
403403 func ci (bY) = if ((bX(bY)._1 == 0))
404404 then throw("No open position")
405405 else true
406406
407407
408408 func cj (ck) = {
409409 let cl = getString(this, ck)
410410 if (if (isDefined(cl))
411411 then (value(cl) != "")
412412 else false)
413413 then {
414414 let cm = split(value(cl), ",")
415415 let cn = valueOrErrorMessage(addressFromString(cm[0]), ("Invalid oracle address in: " + value(cl)))
416416 let co = cm[1]
417417 let cp = cm[2]
418418 let cq = cm[3]
419419 $Tuple4(cn, co, cp, cq)
420420 }
421421 else unit
422422 }
423423
424424
425425 func cr () = valueOrElse(getBoolean(this, m), false)
426426
427427
428428 func cs () = valueOrElse(getBoolean(this, n), false)
429429
430430
431431 func ct () = valueOrElse(getBoolean(this, o), false)
432432
433433
434434 func cu (cv,cw,cx) = if (cv)
435435 then {
436436 let cy = (bn() - cx)
437437 if ((0 >= cy))
438438 then throw("Tx lead to base asset reserve <= 0, revert")
439439 else $Tuple3((bm() + cw), cy, (bq() + cx))
440440 }
441441 else {
442442 let cz = (bm() - cw)
443443 if ((0 >= cz))
444444 then throw("Tx lead to base quote reserve <= 0, revert")
445445 else $Tuple3(cz, (bn() + cx), (bq() - cx))
446446 }
447447
448448
449449 func cA (cB,cC) = {
450450 let cD = toBigInt(cB)
451451 let cE = toBigInt(cC)
452452 aP(cD, cE)
453453 }
454454
455455
456456 func cF (cv,cw) = {
457457 let cB = bm()
458458 let cC = bn()
459459 let cG = bo()
460460 let cH = bp()
461461 let cI = aL(cw, cG)
462462 let ba = cA(cB, cC)
463463 let cJ = if (cv)
464464 then (cB + cI)
465465 else (cB - cI)
466466 let cK = toInt(aO(ba, toBigInt(cJ)))
467467 let cL = aQ((cK - cC))
468468 let cM = if (cv)
469469 then cL
470470 else -(cL)
471471 let cN = cu(cv, cI, cL)
472472 let cO = cN._1
473473 let cP = cN._2
474474 let cQ = cN._3
475475 let cR = aL(aN(cB, cG), aN(cC, cH))
476476 let cS = aL(cw, cL)
477477 let cT = aQ((cR - cS))
478478 let cU = (aE - aL(cR, (cR + cT)))
479479 let cV = bC()
480480 if ((cU > cV))
481481 then throw(((((((((((((("Price impact " + toString(cU)) + " > max price impact ") + toString(cV)) + " before quote asset: ") + toString(cB)) + " before base asset: ") + toString(cC)) + " quote asset amount to exchange: ") + toString(cw)) + " price before: ") + toString(cR)) + " marketPrice: ") + toString(cS)))
482482 else $Tuple4(cM, cO, cP, cQ)
483483 }
484484
485485
486486 func cW (cX,cY) = {
487487 let cZ = ((((bN() - cY) / 1000) / 60) * aE)
488488 let da = aL(aN(aN(cX, cZ), bk()), aF)
489489 da
490490 }
491491
492492
493493 func db (dc,cX,dd,cY,de) = {
494494 let df = if ((dc != 0))
495495 then {
496496 let dg = bV(dc)
497497 aN((dg - dd), dc)
498498 }
499499 else 0
500500 let da = cW(cX, cY)
501501 let dh = (((de - da) - df) + cX)
502502 let di = if ((0 > dh))
503503 then $Tuple2(0, aQ(dh))
504504 else $Tuple2(aQ(dh), 0)
505505 let dj = di._1
506506 let dk = di._2
507507 $Tuple4(dj, dk, df, da)
508508 }
509509
510510
511511 func dl (cv,cx,dm,dn,do,dp,dq) = {
512512 let cR = aL(aN(dn, do), aN(dp, dq))
513513 if ((cx == 0))
514514 then throw("Invalid base asset amount")
515515 else {
516516 let ba = cA(dn, dp)
517517 let dr = if (cv)
518518 then (dp + cx)
519519 else (dp - cx)
520520 let ds = toInt(aO(ba, toBigInt(dr)))
521521 let dt = aQ((ds - dn))
522522 let du = aN(dt, do)
523523 let cV = bC()
524524 let dv = cu(!(cv), dt, cx)
525525 let cO = dv._1
526526 let cP = dv._2
527527 let cQ = dv._3
528528 let cS = aL(du, cx)
529529 let cT = aQ((cR - cS))
530530 let cU = (aE - aL(cR, (cR + cT)))
531531 if (if ((cU > cV))
532532 then dm
533533 else false)
534534 then throw(((((((((((((("Price impact " + toString(cU)) + " > max price impact ") + toString(cV)) + " before quote asset: ") + toString(dn)) + " before base asset: ") + toString(dp)) + " base asset amount to exchange: ") + toString(cx)) + " price before: ") + toString(cR)) + " market price: ") + toString(cS)))
535535 else $Tuple7(du, cO, cP, cQ, (bI() - (if (cv)
536536 then aQ(cx)
537537 else 0)), (bH() - (if (!(cv))
538538 then aQ(cx)
539539 else 0)), cU)
540540 }
541541 }
542542
543543
544544 func dw (cv,cx,dm) = dl(cv, cx, dm, bm(), bo(), bn(), bp())
545545
546546
547547 func dx (dy,co,cp) = {
548548 let dz = valueOrErrorMessage(getInteger(dy, co), ((("Can not get oracle price. Oracle: " + toString(dy)) + " key: ") + co))
549549 if ((cp != ""))
550550 then {
551551 let dA = lastBlock.height
552552 let dB = valueOrErrorMessage(getInteger(dy, cp), ((("Can not get oracle block. Oracle: " + toString(dy)) + " key: ") + cp))
553553 if (((dA - dB) > bL()))
554554 then throw(((("Oracle stale data. Last oracle block: " + toString(dB)) + " current block: ") + toString(dA)))
555555 else dz
556556 }
557557 else dz
558558 }
559559
560560
561561 func dC () = {
562562 let dD = valueOrErrorMessage(cj(a), "No base asset oracle data")
563563 let dE = dx(dD._1, dD._2, dD._3)
564564 let dF = cj(b)
565565 let dG = if (isDefined(dF))
566566 then {
567567 let dH = value(dF)
568568 dx(dH._1, dH._2, dH._3)
569569 }
570570 else aE
571571 aL(dE, dG)
572572 }
573573
574574
575575 func dI () = {
576576 let dD = valueOrErrorMessage(cj(a), "No base asset oracle data")
577577 let dy = dD._1
578578 let cq = dD._4
579579 if ((cq != ""))
580580 then {
581581 let dJ = valueOrErrorMessage(getBoolean(dy, cq), ((("Can not get oracle is open/closed. Oracle: " + toString(dy)) + " key: ") + cq))
582582 !(dJ)
583583 }
584584 else false
585585 }
586586
587587
588588 func dK (dL,dn,dp,cG,cH) = {
589589 let dM = aL(aN(dn, cG), aN(dp, cH))
590590 let dN = aL((dL + dM), (2 * aE))
591591 let dK = aL(aQ((dL - dM)), dN)
592592 dK
593593 }
594594
595595
596596 func dO (dn,dp) = {
597597 let dP = dC()
598598 let cG = bo()
599599 let cH = bp()
600600 let dQ = dK(dP, bm(), bn(), cG, cH)
601601 let dR = dK(dP, dn, dp, cG, cH)
602602 if (if ((dR > bD()))
603603 then (dR > dQ)
604604 else false)
605605 then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bD())))
606606 else true
607607 }
608608
609609
610610 func dS (dT,dU) = {
611611 let dV = bE()
612612 if ((dT > dV))
613613 then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
614614 else if ((dU > dV))
615615 then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
616616 else true
617617 }
618618
619619
620620 func dW () = {
621621 let dn = bm()
622622 let dp = bn()
623623 let cG = bo()
624624 let cH = bp()
625625 aL(aN(dn, cG), aN(dp, cH))
626626 }
627627
628628
629629 func dX () = {
630630 let dP = dC()
631631 let dY = dW()
632632 (aL(aQ((dP - dY)), dP) > bB())
633633 }
634634
635635
636636 func dZ (bW,ea,dn,do,dp,dq) = {
637637 let eb = aQ(bW)
638638 let ec = (0 > bW)
639639 let ed = if ((ea == aH))
640640 then {
641641 let ee = dl(!(ec), eb, false, dn, do, dp, dq)._1
642642 ee
643643 }
644644 else aN(eb, dC())
645645 ed
646646 }
647647
648648
649649 func ef (bW,eg,dn,do,dp,dq,ea) = if ((bW == 0))
650650 then throw("Invalid position size")
651651 else {
652652 let ec = (0 > bW)
653653 let ed = dZ(bW, ea, dn, do, dp, dq)
654654 let eh = if (ec)
655655 then (eg - ed)
656656 else (ed - eg)
657657 $Tuple2(ed, eh)
658658 }
659659
660660
661661 func ei (bY,ea) = {
662662 let ej = bX(bY)
663663 let cb = ej._1
664664 let ek = ej._2
665665 let el = ej._3
666666 let em = ej._4
667667 ef(cb, el, bm(), bo(), bn(), bp(), ea)
668668 }
669669
670670
671671 func en (eo,ep,eq) = aL((eo - ep), eq)
672672
673673
674674 func er (bY,ea) = {
675675 let es = bX(bY)
676676 let cb = es._1
677677 let ek = es._2
678678 let et = es._3
679679 let eu = es._4
680680 let ev = es._5
681681 let ew = ei(bY, ea)
682682 let ed = ew._1
683683 let eh = ew._2
684684 let ex = db(cb, ek, eu, ev, eh)
685685 let dj = ex._1
686686 let dk = ex._2
687687 en(dj, dk, ed)
688688 }
689689
690690
691691 func ey (bY) = er(bY, aH)
692692
693693
694694 func ez (bY,bW) = {
695695 let eA = aR(bA(), (aE - aL(ey(bY), by())))
696696 let eB = aN(aQ(bW), eA)
697697 let eC = dw((bW > 0), eB, false)
698698 let eD = eC._1
699699 let cU = eC._7
700700 if ((bC() > cU))
701701 then eB
702702 else aN(aQ(bW), bA())
703703 }
704704
705705
706706 func eE (bY,eF,eG,eH,eI,dm,eJ) = {
707707 let eK = bX(bY)
708708 let eL = eK._1
709709 let eM = eK._2
710710 let eN = eK._3
711711 let eO = eK._4
712712 let eP = eK._5
713713 let eQ = (eL > 0)
714714 let eR = aQ(eL)
715715 if (if ((eR >= eF))
716716 then (eF > 0)
717717 else false)
718718 then {
719719 let eS = (eR > eF)
720720 let eT = dw((eL > 0), eF, dm)
721721 let eU = eT._1
722722 let cJ = eT._2
723723 let cK = eT._3
724724 let eV = eT._4
725725 let eW = if ((eL > 0))
726726 then -(eF)
727727 else eF
728728 let eX = ei(bY, aH)
729729 let eY = eX._1
730730 let eh = eX._2
731731 let eZ = aL(aQ(eW), eR)
732732 let fa = aN(eh, eZ)
733733 let fb = db(eL, eM, eO, eP, eh)
734734 let fc = fb._1
735735 let fd = fb._2
736736 let fe = fb._3
737737 let da = fb._4
738738 let ff = db(eL, eM, eO, eP, fa)._2
739739 let fg = aN(aN(eY, eZ), eG)
740740 let fh = (eh - fa)
741741 let fi = if ((eL > 0))
742742 then ((eY - eU) - fh)
743743 else ((fh + eY) - eU)
744744 let fj = (eL + eW)
745745 let fk = if ((fj == 0))
746746 then $Tuple2(0, 0)
747747 else $Tuple2(aQ(fi), bV(fj))
748748 let fl = fk._1
749749 let fm = fk._2
750750 let fn = (eN - fl)
751751 let fo = er(bY, aH)
752752 let fp = if ((eL > 0))
753753 then (aN((fl + fh), fo) - fh)
754754 else (aN((fl - fh), fo) - fh)
755755 let fq = ((fc - (fp + fh)) - fg)
756756 let fr = if ((0 > fq))
757757 then if (eJ)
758758 then 0
759759 else throw("Invalid internalClosePosition params: unable to pay fee")
760760 else fq
761761 let fs = if (eI)
762762 then (fp + fr)
763763 else fp
764764 if (if ((eH != 0))
765765 then (eH > eU)
766766 else false)
767767 then throw(((("Limit error: " + toString(eU)) + " < ") + toString(eH)))
768768 else $Tuple17(fj, fs, fl, fm, ff, fa, if (if (eI)
769769 then eS
770770 else false)
771771 then 0
772772 else fr, cJ, cK, eV, (br() - fn), (bI() - (if (eQ)
773773 then aQ(eW)
774774 else 0)), (bH() - (if (!(eQ))
775775 then aQ(eW)
776776 else 0)), (bt() - (if (eQ)
777777 then fn
778778 else 0)), (bs() - (if (!(eQ))
779779 then fn
780780 else 0)), (fg + da), eU)
781781 }
782782 else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eF)) + " max: ") + toString(eR)))
783783 }
784784
785785
786786 func ft () = {
787787 let fu = ((bN() / 1000) / 60)
788788 let fv = (fu - aB)
789789 let fw = valueOrElse(getString(this, D), "")
790790 let fx = split(fw, ",")
791791 func fy (fz,fA) = if ((fv >= valueOrErrorMessage(parseInt(fA), ("getTwapSpotPrice: invalid int: " + fw))))
792792 then (fz :+ parseIntValue(fA))
793793 else fz
794794
795795 let fB = {
796796 let fC = fx
797797 let fD = size(fC)
798798 let fE = nil
799799 func fF (fG,fH) = if ((fH >= fD))
800800 then fG
801801 else fy(fG, fC[fH])
802802
803803 func fI (fG,fH) = if ((fH >= fD))
804804 then fG
805805 else throw("List size exceeds 20")
806806
807807 fI(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fE, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
808808 }
809809 let fJ = if ((size(fB) > 0))
810810 then max(fB)
811811 else valueOrErrorMessage(parseInt(fx[0]), ("getTwapSpotPrice: invalid int: " + fw))
812812 let fK = valueOrElse(getInteger(this, E), 0)
813813 let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fK))), 0)
814814 let fM = valueOrElse(getInteger(this, ((G + "_") + toString(fK))), 0)
815815 let fN = (fL + ((fu - fK) * fM))
816816 let fO = valueOrElse(getInteger(this, ((F + "_") + toString(fJ))), 0)
817817 let fP = valueOrElse(getInteger(this, ((G + "_") + toString(fJ))), 0)
818818 let fQ = (fO + ((fv - fJ) * fP))
819819 ((fN - fQ) / aB)
820820 }
821821
822822
823823 func fR () = {
824824 let bW = bq()
825825 if ((bW == 0))
826826 then $Tuple2(bm(), bn())
827827 else {
828828 let fS = (bW > 0)
829829 let fT = dw(fS, aQ(bW), false)
830830 let fU = fT._1
831831 let fV = fT._2
832832 let fW = fT._3
833833 $Tuple2(fV, fW)
834834 }
835835 }
836836
837837
838838 func fX (fY,bq,fZ,ga) = {
839839 let gb = toBigInt(fY)
840840 let gc = toBigInt(bq)
841841 let gd = toBigInt(fZ)
842842 let ge = toBigInt(ga)
843843 let ba = aP(gd, gb)
844844 let gf = (gb + gc)
845845 let gg = aO(ba, gf)
846846 let gh = aO(gg, gf)
847847 let gi = aO(ge, gh)
848848 toInt(gi)
849849 }
850850
851851
852852 func gj (gk,cB,cC) = {
853853 let bW = bq()
854854 if ((bW == 0))
855855 then {
856856 let gl = aL(aN(gk, cC), cB)
857857 $Tuple3(gl, aE, 0)
858858 }
859859 else {
860860 let fS = (bW > 0)
861861 let fU = dw(fS, aQ(bW), false)._1
862862 let gl = fX(cC, bW, cB, gk)
863863 let gm = aE
864864 let gn = ef(bW, fU, cB, gl, cC, gm, aH)._2
865865 $Tuple3(gl, gm, gn)
866866 }
867867 }
868868
869869
870870 func go () = {
871871 let gp = dC()
872872 let gq = dW()
873873 let gr = (gq - gp)
874874 if (if (if ((bH() == 0))
875875 then true
876876 else (bI() == 0))
877877 then true
878878 else dI())
879879 then $Tuple3(0, 0, 0)
880880 else if ((0 > gr))
881881 then {
882882 let gs = aL(aN(gr, bw()), aG)
883883 if ((bM() == bg))
884884 then {
885885 let gt = aL(aN(gs, bH()), bI())
886886 $Tuple3(gs, gt, 0)
887887 }
888888 else {
889889 let gu = aQ(aN(gs, bH()))
890890 let gv = aQ(aN(gs, bI()))
891891 let gw = (gu - gv)
892892 $Tuple3(gs, gs, gw)
893893 }
894894 }
895895 else {
896896 let gt = aL(aN(gr, bw()), aG)
897897 if ((bM() == bg))
898898 then {
899899 let gs = aL(aN(gt, bI()), bH())
900900 $Tuple3(gs, gt, 0)
901901 }
902902 else {
903903 let gv = aQ(aN(gt, bI()))
904904 let gu = aQ(aN(gt, bH()))
905905 let gw = (gv - gu)
906906 $Tuple3(gt, gt, gw)
907907 }
908908 }
909909 }
910910
911911
912912 func gx (gy,gz) = {
913913 let gA = bj()
914914 let gB = aN(gA, gz)
915915 let gC = if ((gy != ""))
916916 then {
917917 let gD = bd(av(), aj(ax, gy))
918918 if ((gD == ay))
919919 then {
920920 let gE = bf(av(), aj(aw, gy))
921921 let gF = aN(gB, gE)
922922 $Tuple2(gF, true)
923923 }
924924 else throw("Invalid attached artifact")
925925 }
926926 else $Tuple2(gB, false)
927927 let gF = gC._1
928928 let gG = gC._2
929929 $Tuple2(gF, gG)
930930 }
931931
932932
933933 func gH (bY,gI) = {
934934 let eL = bX(bY)._1
935935 if ((eL == 0))
936936 then true
937937 else (cc(bY) == gI)
938938 }
939939
940940
941941 func gJ (bY,gI) = (cc(bY) == gI)
942942
943943
944944 func gK (bY,gy) = {
945945 let gL = invoke(as(), "computeFeeDiscount", [bY], nil)
946946 if ((gL == gL))
947947 then {
948948 let gM = {
949949 let ca = gL
950950 if ($isInstanceOf(ca, "Int"))
951951 then {
952952 let gN = ca
953953 gN
954954 }
955955 else throw("Invalid computeFeeDiscount result")
956956 }
957957 let gO = gx(gy, gM)
958958 let gF = gO._1
959959 let gG = gO._2
960960 $Tuple2(gF, gG)
961961 }
962962 else throw("Strict value is not equal to itself.")
963963 }
964964
965965
966966 func gP (bP) = {
967967 let gQ = if ((size(bP.payments) > 1))
968968 then toBase58String(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifactId"))
969969 else ""
970970 gQ
971971 }
972972
973973
974974 func gR (gS) = {
975975 let gT = aN(gS, bK())
976976 let gU = (gS - gT)
977977 $Tuple2(gT, gU)
978978 }
979979
980980
981981 func gV (gW,gX,gY,gZ,eG,ha,hb,hc,hd,dV,he,hf,hg) = [IntegerEntry(s, gW), IntegerEntry(t, gX), IntegerEntry(u, gY), IntegerEntry(r, gZ), IntegerEntry(p, eG), IntegerEntry(w, ha), IntegerEntry(x, hb), IntegerEntry(v, hc), IntegerEntry(y, hd), IntegerEntry(z, dV), IntegerEntry(A, he), IntegerEntry(B, he), IntegerEntry(q, hg)]
982982
983983
984984 func hh (hi,hj,hk,hl,hm) = [IntegerEntry(K, hi), IntegerEntry(I, hj), IntegerEntry(J, hk), IntegerEntry(L, hl), IntegerEntry(M, hm)]
985985
986986
987987 func hn (ho,al) = if (ho)
988988 then {
989989 let hp = bJ()
990990 [IntegerEntry(aj(i, al), (hp + 1)), IntegerEntry(d, (hp + 1))]
991991 }
992992 else nil
993993
994994
995995 func hq (ho,al,eG) = if (ho)
996996 then [IntegerEntry(aj(k, al), eG)]
997997 else nil
998998
999999
10001000 func hr (al,eF,hs,ht,dg,hu) = [IntegerEntry(aj(e, al), eF), IntegerEntry(aj(f, al), hs), IntegerEntry(aj(g, al), ht), IntegerEntry(aj(h, al), dg), IntegerEntry(aj(l, al), hu)]
10011001
10021002
10031003 func hv (hw) = {
10041004 let fu = ((bN() / 1000) / 60)
10051005 let hx = valueOrElse(getInteger(this, E), 0)
10061006 if ((hx > fu))
10071007 then throw("TWAP out-of-order")
10081008 else {
10091009 let fK = if ((hx == 0))
10101010 then fu
10111011 else hx
10121012 if ((fu > hx))
10131013 then {
10141014 let hy = valueOrElse(getInteger(this, ((F + "_") + toString(hx))), 0)
10151015 let hz = valueOrElse(getInteger(this, ((G + "_") + toString(hx))), hw)
10161016 let hA = (hy + ((fu - fK) * hz))
10171017 let fx = aW(aU(valueOrElse(getString(this, D), "")), aB, toString(fu))
10181018 [IntegerEntry(aj(F, toString(fu)), hA), IntegerEntry(aj(G, toString(fu)), hw), IntegerEntry(aj(H, toString(fu)), hx), IntegerEntry(E, fu), StringEntry(D, aS(fx))]
10191019 }
10201020 else {
10211021 let hB = valueOrElse(getInteger(this, aj(H, toString(fu))), 0)
10221022 let hy = valueOrElse(getInteger(this, aj(F, toString(hB))), 0)
10231023 let hz = valueOrElse(getInteger(this, aj(G, toString(hB))), hw)
10241024 let hA = (hy + ((fu - hB) * hz))
10251025 [IntegerEntry(aj(F, toString(fu)), hA), IntegerEntry(aj(G, toString(fu)), hw)]
10261026 }
10271027 }
10281028 }
10291029
10301030
10311031 func hC (cB,cC) = [IntegerEntry(N, cB), IntegerEntry(O, cC)]
10321032
10331033
10341034 func hD (cG,cH) = [IntegerEntry(P, cG), IntegerEntry(Q, cH)]
10351035
10361036
10371037 func hE (cB,cC,hF,hG,hH,hI,hJ,hK) = {
10381038 let cG = bo()
10391039 let cH = bp()
10401040 if (((hH - hI) != hF))
10411041 then throw(((((("Invalid AMM state data: " + toString(hH)) + " + ") + toString(hI)) + " != ") + toString(hF)))
10421042 else ((hC(cB, cC) ++ [IntegerEntry(R, hF), IntegerEntry(U, hG), IntegerEntry(S, hH), IntegerEntry(T, hI), IntegerEntry(W, hJ), IntegerEntry(V, hK)]) ++ hv(aL(aN(cB, cG), aN(cC, cH))))
10431043 }
10441044
10451045
10461046 func hL (al) = [DeleteEntry(aj(e, al)), DeleteEntry(aj(f, al)), DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(k, al)), DeleteEntry(aj(l, al))]
10471047
10481048
10491049 func hM (al,hN) = {
10501050 let hO = assetBalance(this, ao())
10511051 if ((hN > hO))
10521052 then throw(((("Unable to withdraw " + toString(hN)) + " from contract balance ") + toString(hO)))
10531053 else [ScriptTransfer(al, hN, ao())]
10541054 }
10551055
10561056
10571057 func hP (bP) = if ((0 > bP))
10581058 then throw("Balance")
10591059 else [IntegerEntry(c, bP)]
10601060
10611061
10621062 func hQ (bP) = [ScriptTransfer(aq(), bP, ao())]
10631063
10641064
10651065 func hR (hS,bP) = if (hS)
10661066 then [Burn(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifact"), 1)]
10671067 else nil
10681068
10691069
10701070 @Callable(bP)
10711071 func pause () = if ((bP.caller != an()))
10721072 then throw("Invalid pause params")
10731073 else [BooleanEntry(n, true)]
10741074
10751075
10761076
10771077 @Callable(bP)
10781078 func unpause () = if ((bP.caller != an()))
10791079 then throw("Invalid unpause params")
10801080 else [BooleanEntry(n, false)]
10811081
10821082
10831083
10841084 @Callable(bP)
10851085 func setCloseOnly () = if ((bP.caller != an()))
10861086 then throw("Invalid setCloseOnly params")
10871087 else [BooleanEntry(o, true)]
10881088
10891089
10901090
10911091 @Callable(bP)
10921092 func unsetCloseOnly () = if ((bP.caller != an()))
10931093 then throw("Invalid unsetCloseOnly params")
10941094 else [BooleanEntry(o, false)]
10951095
10961096
10971097
10981098 @Callable(bP)
10991099 func addLiquidity (cw) = if (if ((bP.caller != an()))
11001100 then true
11011101 else (0 >= cw))
11021102 then throw("Invalid addLiquidity params")
11031103 else {
11041104 let cB = bm()
11051105 let cC = bn()
11061106 let cG = bo()
11071107 let cH = bp()
11081108 let hT = aL(aN(cB, cG), aN(cC, cH))
11091109 let hU = (cB + cw)
11101110 let hV = (aL(aN(hU, cG), hT) - cC)
11111111 let hW = (cC + hV)
11121112 let hX = gj(dC(), hU, hW)
11131113 let hY = hX._1
11141114 let hZ = hX._2
11151115 let gn = hX._3
11161116 let ia = if ((gn != 0))
11171117 then {
11181118 let ia = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
11191119 if ((ia == ia))
11201120 then nil
11211121 else throw("Strict value is not equal to itself.")
11221122 }
11231123 else nil
11241124 if ((ia == ia))
11251125 then (hC(hU, hW) ++ hD(hY, hZ))
11261126 else throw("Strict value is not equal to itself.")
11271127 }
11281128
11291129
11301130
11311131 @Callable(bP)
11321132 func removeLiquidity (cw) = if (if ((bP.caller != an()))
11331133 then true
11341134 else (cw >= 0))
11351135 then throw("Invalid removeLiquidity params")
11361136 else {
11371137 let cB = bm()
11381138 let cC = bn()
11391139 let cG = bo()
11401140 let cH = bp()
11411141 let hT = aL(aN(cB, cG), aN(cC, cH))
11421142 let hU = (cB - cw)
11431143 let ib = aQ((aL(aN(hU, cG), hT) - cC))
11441144 let hW = (cC - ib)
11451145 let ic = gj(dC(), hU, hW)
11461146 let hY = ic._1
11471147 let hZ = ic._2
11481148 let gn = ic._3
11491149 let ia = if ((gn != 0))
11501150 then {
11511151 let ia = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
11521152 if ((ia == ia))
11531153 then nil
11541154 else throw("Strict value is not equal to itself.")
11551155 }
11561156 else nil
11571157 if ((ia == ia))
11581158 then (hC(hU, hW) ++ hD(hY, hZ))
11591159 else throw("Strict value is not equal to itself.")
11601160 }
11611161
11621162
11631163
11641164 @Callable(bP)
11651165 func changeSettings (gW,gX,gY,gZ,eG,ha,hb,hc,hd,dV,he,hf,hg) = if ((bP.caller != an()))
11661166 then throw("Invalid changeSettings params")
11671167 else gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg)
11681168
11691169
11701170
11711171 @Callable(bP)
11721172 func initialize (cB,cC,gZ,gW,gX,gY,eG,id,ie,if,ha,hb,hc,hd,dV,he,hf,hg) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cB))
11731173 then true
11741174 else (0 >= cC))
11751175 then true
11761176 else (0 >= gZ))
11771177 then true
11781178 else (0 >= gW))
11791179 then true
11801180 else (0 >= gX))
11811181 then true
11821182 else (0 >= gY))
11831183 then true
11841184 else (0 >= eG))
11851185 then true
11861186 else (0 >= ha))
11871187 then true
11881188 else (0 >= hb))
11891189 then true
11901190 else (0 >= hc))
11911191 then true
11921192 else (0 >= hd))
11931193 then true
11941194 else (0 >= dV))
11951195 then true
11961196 else (0 >= he))
11971197 then true
11981198 else (he > aE))
11991199 then true
12001200 else (0 >= hf))
12011201 then true
12021202 else (0 >= hg))
12031203 then true
12041204 else cr())
12051205 then true
12061206 else (bP.caller != this))
12071207 then throw("Invalid initialize parameters")
12081208 else ((((hE(cB, cC, 0, 0, 0, 0, 0, 0) ++ gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg)) ++ hh((bN() + gZ), 0, 0, 0, 0)) ++ hP(0)) ++ [BooleanEntry(m, true), StringEntry(a, id), StringEntry(b, ie), StringEntry(Y, toString(addressFromStringValue(if)))])
12091209
12101210
12111211
12121212 @Callable(bP)
12131213 func increasePosition (ig,ih,ii,ij) = {
12141214 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
12151215 if ((ik == ik))
12161216 then {
12171217 let il = invoke(this, "ensureCalledOnce", nil, nil)
12181218 if ((il == il))
12191219 then {
12201220 let bY = bO(bP)
12211221 let im = bP.payments[0].amount
12221222 let gI = bP.payments[0].assetId
12231223 let in = toBase58String(value(gI))
12241224 let io = (gI == ao())
12251225 if (if (if (if (if (if (if (if (if (if ((ig != az))
12261226 then (ig != aA)
12271227 else false)
12281228 then true
12291229 else (0 >= im))
12301230 then true
12311231 else !(cr()))
12321232 then true
12331233 else !(io))
12341234 then true
12351235 else !(gH(bY, in)))
12361236 then true
12371237 else !(bQ(aL(aE, ih), bl(), true)))
12381238 then true
12391239 else cs())
12401240 then true
12411241 else ct())
12421242 then true
12431243 else dI())
12441244 then throw("Invalid increasePosition parameters")
12451245 else {
12461246 let ip = gK(bY, gP(bP))
12471247 let gF = ip._1
12481248 let gG = ip._2
12491249 let hN = aL(im, (aN(gF, ih) + aE))
12501250 let iq = (im - hN)
12511251 let ir = invoke(au(), "acceptPaymentWithLink", [bY, ij], [AttachedPayment(ao(), iq)])
12521252 if ((ir == ir))
12531253 then {
12541254 let is = {
12551255 let ca = ir
12561256 if ($isInstanceOf(ca, "Int"))
12571257 then {
12581258 let gN = ca
12591259 gN
12601260 }
12611261 else throw("Invalid referrerFee")
12621262 }
12631263 let it = (iq - is)
12641264 let iu = bX(bY)
12651265 let eL = iu._1
12661266 let eM = iu._2
12671267 let eN = iu._3
12681268 let eO = iu._4
12691269 let eP = iu._5
12701270 let iv = (eL == 0)
12711271 let iw = if ((eL > 0))
12721272 then (ig == az)
12731273 else (ig == aA)
12741274 let ix = if (!(iv))
12751275 then iw
12761276 else false
12771277 let iy = (ig == az)
12781278 let iz = if (if (iv)
12791279 then true
12801280 else ix)
12811281 then {
12821282 let iA = aN(hN, ih)
12831283 let iB = cF(iy, iA)
12841284 let cM = iB._1
12851285 let cJ = iB._2
12861286 let cK = iB._3
12871287 let eV = iB._4
12881288 if (if ((ii != 0))
12891289 then (ii > aQ(cM))
12901290 else false)
12911291 then throw(((("Limit error: " + toString(aQ(cM))) + " < ") + toString(ii)))
12921292 else {
12931293 let fj = (eL + cM)
12941294 let iC = (bt() + (if ((fj > 0))
12951295 then iA
12961296 else 0))
12971297 let iD = (bs() + (if ((0 > fj))
12981298 then iA
12991299 else 0))
13001300 let iE = db(eL, eM, eO, eP, hN)
13011301 let dj = iE._1
13021302 let fd = iE._2
13031303 let fe = iE._3
13041304 let da = iE._4
13051305 if (!(dO(cJ, cK)))
13061306 then throw("Over max spread limit")
13071307 else if (!(dS(iC, iD)))
13081308 then throw("Over max open notional")
13091309 else $Tuple14(fj, dj, (eN + iA), bV(fj), bN(), cK, cJ, eV, (br() + iA), (bI() + (if ((fj > 0))
13101310 then aQ(cM)
13111311 else 0)), (bH() + (if ((0 > fj))
13121312 then aQ(cM)
13131313 else 0)), iC, iD, da)
13141314 }
13151315 }
13161316 else {
13171317 let iA = aN(hN, ih)
13181318 let iF = ei(toString(bP.caller), aH)
13191319 let eY = iF._1
13201320 let eh = iF._2
13211321 if ((eY > iA))
13221322 then throw("Use decreasePosition to decrease position size")
13231323 else throw("Close position first")
13241324 }
13251325 let fj = iz._1
13261326 let iG = iz._2
13271327 let fl = iz._3
13281328 let iH = iz._4
13291329 let iI = iz._5
13301330 let cK = iz._6
13311331 let cJ = iz._7
13321332 let eV = iz._8
13331333 let iJ = iz._9
13341334 let iK = iz._10
13351335 let iL = iz._11
13361336 let iC = iz._12
13371337 let iD = iz._13
13381338 let da = iz._14
13391339 let iM = gR((it + da))
13401340 let gT = iM._1
13411341 let gU = iM._2
13421342 let iN = if ((hN >= da))
13431343 then invoke(ar(), "addLocked", nil, [AttachedPayment(ao(), (hN - da))])
13441344 else invoke(ar(), "withdrawLocked", [(da - hN)], nil)
13451345 if ((iN == iN))
13461346 then {
13471347 let iO = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
13481348 if ((iO == iO))
13491349 then {
13501350 let iP = invoke(as(), "notifyFees", [bY, it], nil)
13511351 if ((iP == iP))
13521352 then {
13531353 let iQ = invoke(as(), "notifyNotional", [bY, fl], nil)
13541354 if ((iQ == iQ))
13551355 then ((((((hr(bY, fj, iG, fl, iH, iI) ++ hn(iv, bY)) ++ hq(iv, bY, gF)) ++ hE(cJ, cK, eV, iJ, iK, iL, iC, iD)) ++ hQ(gT)) ++ hP(((bi() + hN) - da))) ++ hR(gG, bP))
13561356 else throw("Strict value is not equal to itself.")
13571357 }
13581358 else throw("Strict value is not equal to itself.")
13591359 }
13601360 else throw("Strict value is not equal to itself.")
13611361 }
13621362 else throw("Strict value is not equal to itself.")
13631363 }
13641364 else throw("Strict value is not equal to itself.")
13651365 }
13661366 }
13671367 else throw("Strict value is not equal to itself.")
13681368 }
13691369 else throw("Strict value is not equal to itself.")
13701370 }
13711371
13721372
13731373
13741374 @Callable(bP)
13751375 func addMargin () = {
13761376 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
13771377 if ((ik == ik))
13781378 then {
13791379 let il = invoke(this, "ensureCalledOnce", nil, nil)
13801380 if ((il == il))
13811381 then {
13821382 let bY = toString(bP.caller)
13831383 let hN = bP.payments[0].amount
13841384 let gI = bP.payments[0].assetId
13851385 let in = toBase58String(value(gI))
13861386 let io = (gI == ao())
13871387 if (if (if (if (if (if (if (!(io))
13881388 then true
13891389 else !(ci(toString(bP.caller))))
13901390 then true
13911391 else !(gJ(bY, in)))
13921392 then true
13931393 else !(cr()))
13941394 then true
13951395 else cs())
13961396 then true
13971397 else ct())
13981398 then true
13991399 else dI())
14001400 then throw("Invalid addMargin parameters")
14011401 else {
14021402 let iR = bX(bY)
14031403 let eL = iR._1
14041404 let eM = iR._2
14051405 let eN = iR._3
14061406 let eO = iR._4
14071407 let eP = iR._5
14081408 let iN = invoke(ar(), "addLocked", nil, [AttachedPayment(ao(), hN)])
14091409 if ((iN == iN))
14101410 then {
14111411 let da = cW(eM, eP)
14121412 let iS = if ((da > 0))
14131413 then {
14141414 let iT = gR(da)
14151415 let gT = iT._1
14161416 let gU = iT._2
14171417 let iU = invoke(ar(), "withdrawLocked", [gT], nil)
14181418 if ((iU == iU))
14191419 then {
14201420 let iV = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
14211421 if ((iV == iV))
14221422 then hQ(gT)
14231423 else throw("Strict value is not equal to itself.")
14241424 }
14251425 else throw("Strict value is not equal to itself.")
14261426 }
14271427 else nil
14281428 if ((iS == iS))
14291429 then ((hr(bY, eL, ((eM - da) + hN), eN, eO, bN()) ++ hP(((bi() + hN) - da))) ++ iS)
14301430 else throw("Strict value is not equal to itself.")
14311431 }
14321432 else throw("Strict value is not equal to itself.")
14331433 }
14341434 }
14351435 else throw("Strict value is not equal to itself.")
14361436 }
14371437 else throw("Strict value is not equal to itself.")
14381438 }
14391439
14401440
14411441
14421442 @Callable(bP)
14431443 func removeMargin (hN) = {
14441444 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
14451445 if ((ik == ik))
14461446 then {
14471447 let il = invoke(this, "ensureCalledOnce", nil, nil)
14481448 if ((il == il))
14491449 then {
14501450 let bY = toString(bP.caller)
14511451 if (if (if (if (if ((0 >= hN))
14521452 then true
14531453 else !(ci(bY)))
14541454 then true
14551455 else !(cr()))
14561456 then true
14571457 else cs())
14581458 then true
14591459 else dI())
14601460 then throw("Invalid removeMargin parameters")
14611461 else {
14621462 let iW = bX(bY)
14631463 let eL = iW._1
14641464 let eM = iW._2
14651465 let eN = iW._3
14661466 let eO = iW._4
14671467 let eP = iW._5
14681468 let iX = db(eL, eM, eO, eP, -(hN))
14691469 let dj = iX._1
14701470 let dk = iX._2
14711471 let df = iX._3
14721472 let da = iX._4
14731473 if ((dk != 0))
14741474 then throw("Invalid removed margin amount")
14751475 else {
14761476 let fo = en(dj, dk, eN)
14771477 if (!(bQ(fo, bl(), true)))
14781478 then throw(((("Too much margin removed: " + toString(fo)) + " < ") + toString(bl())))
14791479 else {
14801480 let iY = gR(da)
14811481 let gT = iY._1
14821482 let gU = iY._2
14831483 let iS = if ((da > 0))
14841484 then {
14851485 let iV = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
14861486 if ((iV == iV))
14871487 then hQ(gT)
14881488 else throw("Strict value is not equal to itself.")
14891489 }
14901490 else nil
14911491 if ((iS == iS))
14921492 then {
14931493 let iU = invoke(ar(), "withdrawLocked", [(hN + gT)], nil)
14941494 if ((iU == iU))
14951495 then (((hr(bY, eL, dj, eN, bV(eL), bN()) ++ hM(bP.caller, hN)) ++ hP(((bi() - hN) - da))) ++ iS)
14961496 else throw("Strict value is not equal to itself.")
14971497 }
14981498 else throw("Strict value is not equal to itself.")
14991499 }
15001500 }
15011501 }
15021502 }
15031503 else throw("Strict value is not equal to itself.")
15041504 }
15051505 else throw("Strict value is not equal to itself.")
15061506 }
15071507
15081508
15091509
15101510 @Callable(bP)
15111511 func closePosition (eF,eH,eI) = {
15121512 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
15131513 if ((ik == ik))
15141514 then {
15151515 let il = invoke(this, "ensureCalledOnce", nil, nil)
15161516 if ((il == il))
15171517 then {
15181518 let bY = bO(bP)
15191519 let iZ = valueOrErrorMessage(addressFromString(bY), "Invalid caller")
15201520 let ch = cf(bY)
15211521 if (if (if (if (if (if (!(ci(bY)))
15221522 then true
15231523 else !(cr()))
15241524 then true
15251525 else cs())
15261526 then true
15271527 else (0 >= eF))
15281528 then true
15291529 else (0 > eH))
15301530 then true
15311531 else dI())
15321532 then throw("Invalid closePosition parameters")
15331533 else {
15341534 let eP = bX(bY)._5
15351535 let ja = eE(bY, eF, ch, eH, eI, true, true)
15361536 let fj = ja._1
15371537 let fs = ja._2
15381538 let fl = ja._3
15391539 let fm = ja._4
15401540 let ff = ja._5
15411541 let fa = ja._6
15421542 let fr = ja._7
15431543 let cJ = ja._8
15441544 let cK = ja._9
15451545 let eV = ja._10
15461546 let iJ = ja._11
15471547 let iK = ja._12
15481548 let iL = ja._13
15491549 let iC = ja._14
15501550 let iD = ja._15
15511551 let jb = ja._16
15521552 if ((ff > 0))
15531553 then throw("Invalid closePosition parameters: bad debt")
15541554 else if ((eP >= bN()))
15551555 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15561556 else {
15571557 let eS = (fj != 0)
15581558 let jc = (fr + jb)
15591559 let jd = (bi() - jc)
15601560 let je = if ((0 > jd))
15611561 then 0
15621562 else jd
15631563 let iU = invoke(ar(), "withdrawLocked", [jc], nil)
15641564 if ((iU == iU))
15651565 then {
15661566 let jf = gR(jb)
15671567 let gT = jf._1
15681568 let gU = jf._2
15691569 let iO = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
15701570 if ((iO == iO))
15711571 then {
15721572 let iP = invoke(as(), "notifyFees", [bY, jb], nil)
15731573 if ((iP == iP))
15741574 then {
15751575 let iQ = invoke(as(), "notifyNotional", [bY, fl], nil)
15761576 if ((iQ == iQ))
15771577 then (((((if (eS)
15781578 then hr(bY, fj, fs, fl, fm, bN())
15791579 else hL(bY)) ++ hE(cJ, cK, eV, iJ, iK, iL, iC, iD)) ++ (if ((fr > 0))
15801580 then hM(iZ, fr)
15811581 else nil)) ++ hP(je)) ++ hQ(gT))
15821582 else throw("Strict value is not equal to itself.")
15831583 }
15841584 else throw("Strict value is not equal to itself.")
15851585 }
15861586 else throw("Strict value is not equal to itself.")
15871587 }
15881588 else throw("Strict value is not equal to itself.")
15891589 }
15901590 }
15911591 }
15921592 else throw("Strict value is not equal to itself.")
15931593 }
15941594 else throw("Strict value is not equal to itself.")
15951595 }
15961596
15971597
15981598
15991599 @Callable(bP)
16001600 func liquidate (bY) = {
16011601 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
16021602 if ((ik == ik))
16031603 then {
16041604 let jg = er(bY, aH)
16051605 let jh = if (dX())
16061606 then {
16071607 let ji = er(bY, aI)
16081608 aR(jg, ji)
16091609 }
16101610 else jg
16111611 if (if (if (if (if (!(bQ(jh, by(), false)))
16121612 then true
16131613 else !(ci(bY)))
16141614 then true
16151615 else !(cr()))
16161616 then true
16171617 else cs())
16181618 then true
16191619 else dI())
16201620 then throw("Unable to liquidate")
16211621 else {
16221622 let jj = if (if ((jg > bz()))
16231623 then (bA() > 0)
16241624 else false)
16251625 then (aE > bA())
16261626 else false
16271627 let eL = bX(bY)._1
16281628 let eb = aQ(eL)
16291629 let jk = if (jj)
16301630 then {
16311631 let jl = ez(bY, eL)
16321632 let jm = aL(aQ(jl), eb)
16331633 $Tuple2(jm, aQ(jl))
16341634 }
16351635 else $Tuple2(0, eb)
16361636 let jm = jk._1
16371637 let jl = jk._2
16381638 let jn = eE(bY, if (jj)
16391639 then jl
16401640 else eb, bz(), 0, true, false, true)
16411641 let fj = jn._1
16421642 let fs = jn._2
16431643 let fl = jn._3
16441644 let fm = jn._4
16451645 let ff = jn._5
16461646 let fa = jn._6
16471647 let fr = jn._7
16481648 let cJ = jn._8
16491649 let cK = jn._9
16501650 let eV = jn._10
16511651 let iJ = jn._11
16521652 let iK = jn._12
16531653 let iL = jn._13
16541654 let iC = jn._14
16551655 let iD = jn._15
16561656 let jo = jn._16
16571657 let jp = (jo / 2)
16581658 let gU = (jo - jp)
16591659 let jd = (bi() - jo)
16601660 let jq = if ((0 > jd))
16611661 then 0
16621662 else jd
16631663 let iV = if ((ff > 0))
16641664 then {
16651665 let iV = invoke(ar(), "exchangeFreeAndLocked", [(ff + jo)], nil)
16661666 if ((iV == iV))
16671667 then nil
16681668 else throw("Strict value is not equal to itself.")
16691669 }
16701670 else nil
16711671 if ((iV == iV))
16721672 then {
16731673 let iU = invoke(ar(), "withdrawLocked", [jo], nil)
16741674 if ((iU == iU))
16751675 then {
16761676 let jr = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
16771677 if ((jr == jr))
16781678 then {
16791679 let iQ = invoke(as(), "notifyNotional", [bY, fl], nil)
16801680 if ((iQ == iQ))
16811681 then ((((if (jj)
16821682 then hr(bY, fj, fs, fl, fm, bN())
16831683 else hL(bY)) ++ hE(cJ, cK, eV, iJ, iK, iL, iC, iD)) ++ hM(bP.caller, jp)) ++ hP(jq))
16841684 else throw("Strict value is not equal to itself.")
16851685 }
16861686 else throw("Strict value is not equal to itself.")
16871687 }
16881688 else throw("Strict value is not equal to itself.")
16891689 }
16901690 else throw("Strict value is not equal to itself.")
16911691 }
16921692 }
16931693 else throw("Strict value is not equal to itself.")
16941694 }
16951695
16961696
16971697
16981698 @Callable(bP)
16991699 func payFunding () = {
17001700 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
17011701 if ((ik == ik))
17021702 then {
17031703 let js = bu()
17041704 if (if (if ((js > bN()))
17051705 then true
17061706 else !(cr()))
17071707 then true
17081708 else cs())
17091709 then throw(((("Invalid funding block timestamp: " + toString(bN())) + " < ") + toString(js)))
17101710 else {
17111711 let gp = dC()
17121712 let jt = go()
17131713 let gs = jt._1
17141714 let gt = jt._2
17151715 hh((js + bx()), (bF() + gt), (bG() + gs), aL(gt, gp), aL(gs, gp))
17161716 }
17171717 }
17181718 else throw("Strict value is not equal to itself.")
17191719 }
17201720
17211721
17221722
17231723 @Callable(bP)
17241724 func syncTerminalPriceToOracle () = {
17251725 let cB = bm()
17261726 let cC = bn()
17271727 let ju = gj(dC(), cB, cC)
17281728 let hY = ju._1
17291729 let hZ = ju._2
17301730 let gn = ju._3
17311731 let jv = if (if ((0 > gn))
17321732 then (aQ(gn) > bi())
17331733 else false)
17341734 then -(bi())
17351735 else gn
17361736 let ia = if ((jv != 0))
17371737 then {
17381738 let ia = invoke(ar(), "exchangeFreeAndLocked", [jv], nil)
17391739 if ((ia == ia))
17401740 then nil
17411741 else throw("Strict value is not equal to itself.")
17421742 }
17431743 else nil
17441744 if ((ia == ia))
17451745 then ((hP((bi() + jv)) ++ hD(hY, hZ)) ++ hv(aL(aN(cB, hY), aN(cC, hZ))))
17461746 else throw("Strict value is not equal to itself.")
17471747 }
17481748
17491749
17501750
17511751 @Callable(bP)
17521752 func ensureCalledOnce () = if ((bP.caller != this))
17531753 then throw("Invalid saveCurrentTxId parameters")
17541754 else {
17551755 let jw = valueOrElse(getString(this, X), "")
17561756 if ((jw != toBase58String(bP.transactionId)))
17571757 then [StringEntry(X, jw)]
17581758 else throw("Can not call vAMM methods twice in one tx")
17591759 }
17601760
17611761
17621762
17631763 @Callable(bP)
17641764 func view_calcRemainMarginWithFundingPayment (bY) = {
17651765 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
17661766 if ((ik == ik))
17671767 then {
17681768 let jx = bX(bY)
17691769 let cb = jx._1
17701770 let ek = jx._2
17711771 let et = jx._3
17721772 let em = jx._4
17731773 let ev = jx._5
17741774 let jy = ei(bY, aH)
17751775 let ed = jy._1
17761776 let eh = jy._2
17771777 let jz = db(cb, ek, em, ev, eh)
17781778 let dj = jz._1
17791779 let dk = jz._2
17801780 let df = jz._3
17811781 let da = jz._4
17821782 throw(((((((aJ(dj) + aJ(df)) + aJ(ey(bY))) + aJ(eh)) + aJ(dk)) + aJ(ed)) + aJ(da)))
17831783 }
17841784 else throw("Strict value is not equal to itself.")
17851785 }
17861786
17871787
17881788
17891789 @Callable(bP)
17901790 func view_getPegAdjustCost (hw) = {
17911791 let cB = bm()
17921792 let cC = bn()
17931793 let gi = gj(hw, cB, cC)
17941794 throw(toString(gi._3))
17951795 }
17961796
17971797
17981798
17991799 @Callable(bP)
18001800 func view_getTerminalAmmPrice () = {
18011801 let jA = fR()
18021802 let fV = jA._1
18031803 let fW = jA._2
18041804 let hT = aL(aN(fV, bo()), aN(fW, bp()))
18051805 throw(toString(hT))
18061806 }
18071807
18081808
18091809
18101810 @Callable(bP)
18111811 func view_getFunding () = {
18121812 let gp = dC()
18131813 let jB = go()
18141814 let gs = jB._1
18151815 let gt = jB._2
18161816 let jC = aL(gt, gp)
18171817 let jD = aL(gs, gp)
18181818 throw((((aJ(jC) + aJ(jD)) + aJ(ft())) + aJ(dC())))
18191819 }
18201820
18211821
18221822
18231823 @Callable(bP)
18241824 func computeSpotPrice () = {
18251825 let ik = invoke(this, "syncTerminalPriceToOracle", nil, nil)
18261826 if ((ik == ik))
18271827 then {
18281828 let gi = dW()
18291829 $Tuple2(nil, gi)
18301830 }
18311831 else throw("Strict value is not equal to itself.")
18321832 }
18331833
18341834
18351835
18361836 @Callable(bP)
18371837 func computeFeeForTraderWithArtifact (bY,gy) = {
18381838 let gi = gK(bY, gy)
18391839 $Tuple2(nil, gi)
18401840 }
18411841
18421842
18431843 @Verifier(jE)
18441844 func jF () = {
18451845 let jG = getString(this, Y)
18461846 if (isDefined(jG))
18471847 then {
18481848 let jH = getString(addressFromStringValue(value(jG)), aa)
18491849 if (isDefined(jH))
18501850 then valueOrElse(getBoolean(addressFromStringValue(value(jH)), ((("status_" + toString(this)) + "_") + toBase58String(jE.id))), false)
18511851 else throw("unable to verify: admin not set in coordinator")
18521852 }
18531853 else sigVerify(jE.bodyBytes, jE.proofs[0], jE.senderPublicKey)
18541854 }
18551855

github/deemru/w8io/169f3d6 
188.82 ms