tx · G9pSu3mXWdRCHBgGai5LwsqyC6wHzJpMSdpHd2YyPPfm

3MwaLXWor2GmhvHbwWBHHqTg8v64gAL3bNe:  -0.07500000 Waves

2023.08.04 11:14 [2695583] smart account 3MwaLXWor2GmhvHbwWBHHqTg8v64gAL3bNe > SELF 0.00000000 Waves

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

github/deemru/w8io/169f3d6 
239.62 ms