tx · GGjVSenaA7wbmfe3B3Nhf5DG6pAEPdeYFue7bYtmVZnj

3PQEjFmdcjd6wf1TrpkHSuDAk3zbfLSeikb:  -0.01400000 Waves

2021.05.06 14:07 [2578389] smart account 3PQEjFmdcjd6wf1TrpkHSuDAk3zbfLSeikb > SELF 0.00000000 Waves

{ "type": 13, "id": "GGjVSenaA7wbmfe3B3Nhf5DG6pAEPdeYFue7bYtmVZnj", "fee": 1400000, "feeAssetId": null, "timestamp": 1620299286789, "version": 1, "sender": "3PQEjFmdcjd6wf1TrpkHSuDAk3zbfLSeikb", "senderPublicKey": "Cgc99rnpwdJzVrVJSTWPrezgBZadcTgqYKPHZM3NofnR", "proofs": [ "KzJKRwMfaqUVuEYfZfEuqogw7mtCyoaDH4VPq1PYN3ErdzyMA8QtNEEkw4jNuZWPfA2sCqcLQMUs5jKN8rwdABT" ], "script": "base64:AAIEAAAAAAAAADAIAhIICgYICAEBCAgSBgoECAEIARIDCgEIEgMKAQgSBAoCCAESBAoCCAgSBAoCCAgAAABrAQAAAAxnZXRCb29sQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkHAAAAAANTRVACAAAAAl9fAAAAAAxrZXlBc3NldENvZGUAAAAAAAAAAAEAAAAACmtleUFzc2V0SWQAAAAAAAAAAAIAAAAADmtleUFzc2V0U3RhdHVzAAAAAAAAAAADAAAAABVrZXlBc3NldFByaWNlRGVjaW1hbHMAAAAAAAAAAAQAAAAAE2tleUFzc2V0QmFraW5nQXNzZXQAAAAAAAAAAAUAAAAAG2tleU92ZXJjb2xsYXRlcmFsUGVyY2VudGFnZQAAAAAAAAAABgAAAAAKa2V5TWluUG9vbAAAAAAAAAAABwAAAAAVa2V5UHJpY2VPcmFjbGVBZGRyZXNzAAAAAAAAAAAIAAAAABBrZXlNaW5CdXlQYXltZW50AAAAAAAAAAAJAAAAABFrZXlNaW5TZWxsUGF5bWVudAAAAAAAAAAACgAAAAASa2V5QnV5TG9ja0ludGVydmFsAAAAAAAAAAALAAAAABNrZXlTZWxsTG9ja0ludGVydmFsAAAAAAAAAAAMAAAAAAlrZXlCdXlGZWUAAAAAAAAAAA0AAAAACmtleVNlbGxGZWUAAAAAAAAAAA4AAAAAGGtleVBvb2xSZWRlbXB0aW9uVGltZW91dAAAAAAAAAAADwAAAAAha2V5V2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AAAAAAAAAAAQAAAAABhrZXlBc3NldEFjY291bnRQdWJsaWNTdHIAAAAAAAAAABEAAAAAIGtleUFzc2V0U3Rha2luZ1JlZmVycmFsUHVibGljU3RyAAAAAAAAAAASAAAAABtrZXlDcm9zc0V4Y2hhbmdlQ29lZmZpY2llbnQAAAAAAAAAABMAAAAAI2tleVN0YWtpbmdNaW5BbXRGcm9tU2VsbENvZWZmaWNpZW50AAAAAAAAAAAUAAAAABNrZXlQb29sU3RhYmlsaXR5RmVlAAAAAAAAAAAVAAAAAA5rZXlQcm90b2NvbEZlZQAAAAAAAAAAFgAAAAAOYWRtaW5QdWJsaWNLZXkCAAAALDNZU01zMnhYMzg1NzVrUXF5V3RIRWN5ZFUzemZEWHFjYml1RUxSaERodkI4AAAAABpuZXV0cmlub0NvbnRyYWN0QWRkcmVzc0tleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub0NvbnRyYWN0QWRkcmVzcwAAAAAZbmV1dHJpbm9TdGFraW5nQWRkcmVzc0tleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub1N0YWtpbmdBZGRyZXNzAAAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALCVzJXNfX2NvbW1vbkNvbmZpZ19fbWluaW11bVBvb2xGdW5kaW5nQW1vdW50AAAAABBpc0luaXRpYWxpemVkS2V5AgAAAB8lcyVzX19jb21tb25Db25maWdfX2luaXRpYWxpemVkAAAAAA5kZWJ0VG9rZW5JZEtleQIAAAAfJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRJZAAAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRFdGFsb25CYWxhbmNlAAAAABVkZWZvU3Rha2luZ0FkZHJlc3NLZXkCAAAAJiVzJXNfX2NvbW1vbkNvbmZpZ19fZGVmb1N0YWtpbmdBZGRyZXNzAAAAABpkZWZvU3Rha2luZ1BhY2VtYWtlclB1YktleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19kZWZvU3Rha2luZ1BhY2VtYWtlclB1YgAAAAASbmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAAObnNidEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAADm5ldXRyaW5vUnBkS2V5AgAAAAxycGRfY29udHJhY3QAAAAADmRlZm9Bc3NldElkS2V5AgAAAA8lc19fZGVmb0Fzc2V0SWQAAAAAFXNldEFzc2V0U2NyaXB0VHhJZEtleQIAAAATJXNfX2Fzc2V0U2NyaXB0VHhJZAEAAAARZ2V0QXNzZXRDb25maWdLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAIX19jb25maWcAAAAAHElkeFByZUluaXRpYWxpemVkQXNzZXRQdWJsaWMAAAAAAAAAAAAAAAAAK0lkeFByZUluaXRpYWxpemVkQXNzZXRTdGFraW5nUmVmZXJyYWxQdWJsaWMAAAAAAAAAAAEAAAAAIUlkeFByZUluaXRpYWxpemVkQXNzZXREZXNjcmlwdGlvbgAAAAAAAAAAAgEAAAAdZ2V0UHJlSW5pdGlhbGl6ZWRBc3NldERhdGFLZXkAAAABAAAACWFzc2V0Q29kZQkAASwAAAACAgAAAB8lcyVzX19wcmVJbml0aWFsaXplZEFzc2V0RGF0YV9fBQAAAAlhc3NldENvZGUBAAAAEGdldEFzc2V0UHJpY2VLZXkAAAABAAAACWFzc2V0Q29kZQkAASwAAAACAgAAAA0lcyVzX19wcmljZV9fBQAAAAlhc3NldENvZGUBAAAAFWdldEFzc2V0SW5pdEhlaWdodEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAAxfX2luaXRIZWlnaHQBAAAAGWdldEFzc2V0QWN0aXZhdGVIZWlnaHRLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAQX19hY3RpdmF0ZUhlaWdodAEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAANX19jdXJyZW50UG9vbAEAAAAYZ2V0QXNzZXRNYXhQb29sQW1vdW50S2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAxhc3NldEFkZHJlc3MCAAAACV9fbWF4UG9vbAEAAAAPZ2V0QXNzZXRNZXRhS2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAxhc3NldEFkZHJlc3MCAAAABl9fbWV0YQEAAAAYZ2V0QXNzZXRBZGRyZXNzQnlDb2RlS2V5AAAAAQAAAAlhc3NldENvZGUJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAlhc3NldENvZGUCAAAAFF9fYWRkcmVzc0J5QXNzZXRDb2RlAQAAABtnZXRBc3NldEFkZHJlc3NCeUFzc2V0SWRLZXkAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAdhc3NldElkAgAAABJfX2FkZHJlc3NCeUFzc2V0SWQBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVzJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgIAAAAGYW1vdW50BQAAAANuaWwFAAAAA1NFUAEAAAAlZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbk1heEFtb3VudEtleQAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAA4lcyVzJXMlc19fcG9vbAkABEwAAAACBQAAAAxhc3NldEFkZHJlc3MJAARMAAAAAgUAAAAQcG9vbE1ha2VyQWRkcmVzcwkABEwAAAACAgAAAAltYXhBbW91bnQFAAAAA25pbAUAAAADU0VQAQAAABtnZXRQb29sTWFrZXJMb2NrZWRBbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVzJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgIAAAAMbG9ja2VkQW1vdW50BQAAAANuaWwFAAAAA1NFUAEAAAAbZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAADiVzJXMlcyVzX19wb29sCQAETAAAAAIFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACBQAAABBwb29sTWFrZXJBZGRyZXNzCQAETAAAAAICAAAADHVubG9ja0hlaWdodAUAAAADbmlsBQAAAANTRVABAAAAH2dldFBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkAAAADAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzAAAAAWgJAAS5AAAAAgkABEwAAAACAgAAABAlcyVzJXMlZCVzX19wb29sCQAETAAAAAIFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACBQAAABBwb29sTWFrZXJBZGRyZXNzCQAETAAAAAIJAAGkAAAAAQUAAAABaAkABEwAAAACAgAAABBsaXF1aWRpdHlSZXF1ZXN0BQAAAANuaWwFAAAAA1NFUAEAAAAbZ2V0UG9vbFRvdGFsTG9ja2VkQW1vdW50S2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAwlcyVzJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAICAAAAEXRvdGFsTG9ja2VkQW1vdW50BQAAAANuaWwFAAAAA1NFUAEAAAAZZ2V0UG9vbE1pbkludmVzdEFtb3VudEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAMJXMlcyVzX19wb29sCQAETAAAAAIFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACAgAAAA9taW5JbnZlc3RBbW91bnQFAAAAA25pbAUAAAADU0VQAQAAABlnZXRQb29sTWluUmVkZWVtQW1vdW50S2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAwlcyVzJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAICAAAAD21pblJlZGVlbUFtb3VudAUAAAADbmlsBQAAAANTRVABAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABAAAADGFzc2V0QWRkcmVzcwkABLUAAAACCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAEWdldEFzc2V0Q29uZmlnS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAICAAAAIU5vIERFRk8gQXNzZXQgY29uZmlnIHByZXNlbnQgZm9yIAUAAAAMYXNzZXRBZGRyZXNzBQAAAANTRVAAAAAADW11bHRpcGxpY2F0b3IAAAAAAAAPQkAAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAABpuZXV0cmlub0NvbnRyYWN0QWRkcmVzc0tleQIAAAAfTm8gbmV1dHJpbm8gY29udHJhY3Qgc3BlY2lmaWVkLgAAAAASbmV1dHJpbm9Bc3NldElkU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASbmV1dHJpbm9Bc3NldElkS2V5AgAAABdObyBVU0ROIGFzc2V0IGlkIGZvdW5kLgAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEFAAAAEm5ldXRyaW5vQXNzZXRJZFN0cgAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAADm5zYnRBc3NldElkS2V5AgAAABZObyBOU0JUIGFzc2V0IGlkIGZvdW5kAAAAABJtaW5pbXVtUG9vbEZ1bmRpbmcJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALU1pbmltdW0gcG9vbCBmdW5kaW5nIGFtb3VudCBpcyBub3Qgc3BlY2lmaWVkLgAAAAANQVNTRXRQUk9QT1NFRAIAAAAIUFJPUE9TRUQAAAAACkFTU0V0UkVBRFkCAAAABVJFQURZAAAAAAtBU1NFdElTU1VFRAIAAAAGSVNTVUVEAAAAAAthc3NldFN0YXR1cwkABRUAAAADBQAAAA1BU1NFdFBST1BPU0VEBQAAAApBU1NFdFJFQURZBQAAAAtBU1NFdElTU1VFRAAAAAAJZGVidFRva2VuCQACWQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAA5kZWJ0VG9rZW5JZEtleQIAAAATTm8gZGVidCB0b2tlbiBmb3VuZAAAAAAWZGVidFRva2VuUmVpc3N1ZUFtb3VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABlkZWJ0VG9rZW5FdGFsb25CYWxhbmNlS2V5AAAAAAAAAAAAAAAAABNuZXV0cmlub1JwZENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAA5uZXV0cmlub1JwZEtleQEAAAAVZ2V0TmV1dHJpbm9ScGRCYWxhbmNlAAAAAQAAAAt1c2VyQWRkcmVzcwQAAAAWdXNlck5ldXRyaW5vUnBkQmFsYW5jZQkABLkAAAACCQAETAAAAAICAAAAC3JwZF9iYWxhbmNlCQAETAAAAAIFAAAAEm5ldXRyaW5vQXNzZXRJZFN0cgkABEwAAAACBQAAAAt1c2VyQWRkcmVzcwUAAAADbmlsAgAAAAFfCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAE25ldXRyaW5vUnBkQ29udHJhY3QFAAAAFnVzZXJOZXV0cmlub1JwZEJhbGFuY2UAAAAAAAAAAAABAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEAAAALYXNzZXRTeW1ib2wJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAGGdldEFzc2V0QWRkcmVzc0J5Q29kZUtleQAAAAEFAAAAC2Fzc2V0U3ltYm9sAgAAAAABAAAAG2dldEFzc2V0QWRkcmVzc0J5Q29kZU9yRmFpbAAAAAEAAAALYXNzZXRTeW1ib2wJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAYZ2V0QXNzZXRBZGRyZXNzQnlDb2RlS2V5AAAAAQUAAAALYXNzZXRTeW1ib2wJAAEsAAAAAgkAASwAAAACAgAAAB1DYW5ub3QgZmluZCBhc3NldCBhZGRyZXNzIGJ5IAUAAAALYXNzZXRTeW1ib2wCAAAABSBjb2RlAQAAAAxnZXRBc3NldENvZGUAAAABAAAAC2Fzc2V0Q29uZmlnCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAAxrZXlBc3NldENvZGUBAAAACmdldEFzc2V0SUQAAAABAAAAC2Fzc2V0Q29uZmlnCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAAprZXlBc3NldElkAQAAAA5nZXRBc3NldFN0YXR1cwAAAAEAAAALYXNzZXRDb25maWcJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAADmtleUFzc2V0U3RhdHVzAQAAABVnZXRBc3NldFByaWNlRGVjaW1hbHMAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAFWtleUFzc2V0UHJpY2VEZWNpbWFscwEAAAAVZ2V0QXNzZXRCYWtpbmdBc3NldElkAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAATa2V5QXNzZXRCYWtpbmdBc3NldAEAAAAdZ2V0QXNzZXRPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAG2tleU92ZXJjb2xsYXRlcmFsUGVyY2VudGFnZQEAAAAdZ2V0QXNzZXRNaW5SZXF1aXJlZFBvb2xBbW91bnQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAACmtleU1pblBvb2wBAAAAGmdldEFzc2V0UHJpY2VPcmFjbGVBZGRyZXNzAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAVa2V5UHJpY2VPcmFjbGVBZGRyZXNzAQAAABhnZXRNaW5CdXlQYXltZW50UGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAEGtleU1pbkJ1eVBheW1lbnQBAAAAGWdldE1pblNlbGxQYXltZW50UGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAEWtleU1pblNlbGxQYXltZW50AQAAABpnZXRCdXlMb2NrSW50ZXJ2YWxQZXJBc3NldAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAASa2V5QnV5TG9ja0ludGVydmFsAQAAABtnZXRTZWxsTG9ja0ludGVydmFsUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAE2tleVNlbGxMb2NrSW50ZXJ2YWwBAAAAEWdldEJ1eUZlZVBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAAlrZXlCdXlGZWUBAAAAEmdldFNlbGxGZWVQZXJBc3NldAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAKa2V5U2VsbEZlZQEAAAAaZ2V0UmVkZW1wdGlvblRpbWVvdXRCbG9ja3MAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAGGtleVBvb2xSZWRlbXB0aW9uVGltZW91dAEAAAAhZ2V0V2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAACFrZXlXZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQBAAAAFmdldFByb3RvY29sRmVlUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAADmtleVByb3RvY29sRmVlAQAAABJnZXRBc3NldEluaXRIZWlnaHQAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAVZ2V0QXNzZXRJbml0SGVpZ2h0S2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzAAAAAAAAAAAAAQAAABZnZXRBc3NldEFjdGl2YXRlSGVpZ2h0AAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGWdldEFzc2V0QWN0aXZhdGVIZWlnaHRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MAAAAAAAAAAAABAAAAGWdldEFzc2V0Q3VycmVudFBvb2xBbW91bnQAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MAAAAAAAAAAAABAAAAFWdldEFzc2V0TWF4UG9vbEFtb3VudAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABhnZXRBc3NldE1heFBvb2xBbW91bnRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MAAAAAAAAAAAABAAAADGdldEFzc2V0TWV0YQAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAAA9nZXRBc3NldE1ldGFLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MCAAAAAAEAAAAfZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAEHBvb2xNYWtlckFkZHJlc3MAAAAAAAAAAAABAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnQAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAACVnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uTWF4QW1vdW50S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAABBwb29sTWFrZXJBZGRyZXNzAAAAAAAAAAAAAQAAABhnZXRQb29sTWFrZXJMb2NrZWRBbW91bnQAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABtnZXRQb29sTWFrZXJMb2NrZWRBbW91bnRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAEHBvb2xNYWtlckFkZHJlc3MAAAAAAAAAAAABAAAAGGdldFBvb2xNYWtlclVubG9ja0hlaWdodAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAG2dldFBvb2xNYWtlclVubG9ja0hlaWdodEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAAAAAAAAAEAAAANZ2V0QXNzZXRQcmljZQAAAAIAAAAScHJpY2VPcmFjbGVBZGRyZXNzAAAACWFzc2V0Q29kZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwkBAAAAEGdldEFzc2V0UHJpY2VLZXkAAAABBQAAAAlhc3NldENvZGUCAAAAFE5vIEFzc2V0IHByaWNlIGZvdW5kAQAAABhnZXRQb29sVG90YWxMb2NrZWRBbW91bnQAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAbZ2V0UG9vbFRvdGFsTG9ja2VkQW1vdW50S2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzAAAAAAAAAAAAAQAAAB9jb21wb3NlQXNzZXRDb25maWd1cmF0aW9uU3RyaW5nAAAAFgAAAAlhc3NldENvZGUAAAAHYXNzZXRJZAAAAAthc3NldFN0YXR1cwAAAA1wcmljZURlY2ltYWxzAAAADmJhY2tpbmdBc3NldElkAAAAFW92ZXJDb2xsYXRlcmFsUGVyY2VudAAAAAdtaW5Qb29sAAAAEnByaWNlT3JhY2xlQWRkcmVzcwAAAA1taW5CdXlQYXltZW50AAAADm1pblNlbGxQYXltZW50AAAAD2J1eUxvY2tJbnRlcnZhbAAAABBzZWxsTG9ja0ludGVydmFsAAAABmJ1eUZlZQAAAAdzZWxsRmVlAAAAFXBvb2xSZWRlbXB0aW9uVGltZW91dAAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAAVYXNzZXRBY2NvdW50UHVibGljU3RyAAAAHWFzc2V0U3Rha2luZ1JlZmVycmFsUHVibGljU3RyAAAAG2Nyb3NzRXhjaGFuZ2VDb2VmZmljaWVudFN0cgAAACNzdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudFN0cgAAABNwb29sU3RhYmlsaXR5RmVlU3RyAAAADnByb3RvY29sRmVlU3RyCQAEuQAAAAIJAARMAAAAAgIAAAAqJXMlcyVzJWQlcyVkJWQlcyVkJWQlZCVkJWQlZCVkJWQlcyVzJWQlZCVkCQAETAAAAAIFAAAACWFzc2V0Q29kZQkABEwAAAACBQAAAAdhc3NldElkCQAETAAAAAIFAAAAC2Fzc2V0U3RhdHVzCQAETAAAAAIJAAGkAAAAAQUAAAANcHJpY2VEZWNpbWFscwkABEwAAAACBQAAAA5iYWNraW5nQXNzZXRJZAkABEwAAAACCQABpAAAAAEFAAAAFW92ZXJDb2xsYXRlcmFsUGVyY2VudAkABEwAAAACCQABpAAAAAEFAAAAB21pblBvb2wJAARMAAAAAgUAAAAScHJpY2VPcmFjbGVBZGRyZXNzCQAETAAAAAIJAAGkAAAAAQUAAAANbWluQnV5UGF5bWVudAkABEwAAAACCQABpAAAAAEFAAAADm1pblNlbGxQYXltZW50CQAETAAAAAIJAAGkAAAAAQUAAAAPYnV5TG9ja0ludGVydmFsCQAETAAAAAIJAAGkAAAAAQUAAAAQc2VsbExvY2tJbnRlcnZhbAkABEwAAAACCQABpAAAAAEFAAAABmJ1eUZlZQkABEwAAAACCQABpAAAAAEFAAAAB3NlbGxGZWUJAARMAAAAAgkAAaQAAAABBQAAABVwb29sUmVkZW1wdGlvblRpbWVvdXQJAARMAAAAAgkAAaQAAAABBQAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQJAARMAAAAAgUAAAAVYXNzZXRBY2NvdW50UHVibGljU3RyCQAETAAAAAIFAAAAHWFzc2V0U3Rha2luZ1JlZmVycmFsUHVibGljU3RyCQAETAAAAAIFAAAAG2Nyb3NzRXhjaGFuZ2VDb2VmZmljaWVudFN0cgkABEwAAAACBQAAACNzdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudFN0cgkABEwAAAACBQAAABNwb29sU3RhYmlsaXR5RmVlU3RyCQAETAAAAAIFAAAADnByb3RvY29sRmVlU3RyBQAAAANuaWwCAAAAAl9fAQAAABR1cGRhdGVBc3NldENmZ1N0YXR1cwAAAAIAAAAJbmV3U3RhdHVzAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAABWFDb2RlCQEAAAAMZ2V0QXNzZXRDb2RlAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAADYUlECQEAAAAKZ2V0QXNzZXRJRAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAADmFQcmljZURlY2ltYWxzCQEAAAAVZ2V0QXNzZXRQcmljZURlY2ltYWxzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAOYUJha2luZ0Fzc2V0SWQJAQAAABVnZXRBc3NldEJha2luZ0Fzc2V0SWQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABZhT3ZlckNvbGxhdGVyYWxQZXJjZW50CQEAAAAdZ2V0QXNzZXRPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhTWluUmVxdWlyZWRQb29sCQEAAAAdZ2V0QXNzZXRNaW5SZXF1aXJlZFBvb2xBbW91bnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABNhUHJpY2VPcmFjbGVBZGRyZXNzCQEAAAAaZ2V0QXNzZXRQcmljZU9yYWNsZUFkZHJlc3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA5hTWluQnV5UGF5bWVudAkBAAAAGGdldE1pbkJ1eVBheW1lbnRQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAD2FNaW5TZWxsUGF5bWVudAkBAAAAGWdldE1pblNlbGxQYXltZW50UGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhQnV5TG9ja0ludGVydmFsCQEAAAAaZ2V0QnV5TG9ja0ludGVydmFsUGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABFhU2VsbExvY2tJbnRlcnZhbAkBAAAAG2dldFNlbGxMb2NrSW50ZXJ2YWxQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAB2FCdXlGZWUJAQAAABFnZXRCdXlGZWVQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAACGFTZWxsRmVlCQEAAAASZ2V0U2VsbEZlZVBlckFzc2V0AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAYYVJlZGVtcHRpb25UaW1lb3V0QmxvY2tzCQEAAAAaZ2V0UmVkZW1wdGlvblRpbWVvdXRCbG9ja3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQJAQAAACFnZXRXZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQEAAAAfY29tcG9zZUFzc2V0Q29uZmlndXJhdGlvblN0cmluZwAAABYFAAAABWFDb2RlBQAAAANhSUQFAAAACW5ld1N0YXR1cwUAAAAOYVByaWNlRGVjaW1hbHMFAAAADmFCYWtpbmdBc3NldElkBQAAABZhT3ZlckNvbGxhdGVyYWxQZXJjZW50BQAAABBhTWluUmVxdWlyZWRQb29sBQAAABNhUHJpY2VPcmFjbGVBZGRyZXNzBQAAAA5hTWluQnV5UGF5bWVudAUAAAAPYU1pblNlbGxQYXltZW50BQAAABBhQnV5TG9ja0ludGVydmFsBQAAABFhU2VsbExvY2tJbnRlcnZhbAUAAAAHYUJ1eUZlZQUAAAAIYVNlbGxGZWUFAAAAGGFSZWRlbXB0aW9uVGltZW91dEJsb2NrcwUAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50CQABkQAAAAIFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QFAAAAGGtleUFzc2V0QWNjb3VudFB1YmxpY1N0cgkAAZEAAAACBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAACBrZXlBc3NldFN0YWtpbmdSZWZlcnJhbFB1YmxpY1N0cgkAAZEAAAACBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAABtrZXlDcm9zc0V4Y2hhbmdlQ29lZmZpY2llbnQJAAGRAAAAAgUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAUAAAAja2V5U3Rha2luZ01pbkFtdEZyb21TZWxsQ29lZmZpY2llbnQJAAGRAAAAAgUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAUAAAATa2V5UG9vbFN0YWJpbGl0eUZlZQkAAZEAAAACBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAAA5rZXlQcm90b2NvbEZlZQEAAAAZY2FsY0FsbG93ZWRBbW91bnRUb1JlZGVlbQAAAAIAAAAJYXNzZXRDb2RlAAAAEHBvb2xNYWtlckFkZHJlc3MEAAAAD2Fzc2V0QWRkcmVzc1N0cgkBAAAAG2dldEFzc2V0QWRkcmVzc0J5Q29kZU9yRmFpbAAAAAEFAAAACWFzc2V0Q29kZQQAAAAMYXNzZXRBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIEAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAQAAABNnZXRBc3NldENvbmZpZ0FycmF5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyBAAAAAphc3NldElkU3RyCQEAAAAKZ2V0QXNzZXRJRAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAKYXNzZXRJZFN0cgQAAAAOcG9vbEFjdHVhbFNpemUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAHWdldEFzc2V0Q3VycnJlbnRQb29sQW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyAAAAAAAAAAAABAAAAAtwb29sTWF4U2l6ZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAYZ2V0QXNzZXRNYXhQb29sQW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyAAAAAAAAAAAABAAAABhwb29sVG90YWxMb2NrZWRBbW91bnRLZXkJAQAAABtnZXRQb29sVG90YWxMb2NrZWRBbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIEAAAAD3Bvb2xUb3RhbExvY2tlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABhwb29sVG90YWxMb2NrZWRBbW91bnRLZXkAAAAAAAAAAAAEAAAAFWFzc2V0VXNkblN0YWtlZEFtb3VudAkBAAAAFWdldE5ldXRyaW5vUnBkQmFsYW5jZQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAWYXNzZXRVc2RuQmFsYW5jZUFtb3VudAkAA/AAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAD25ldXRyaW5vQXNzZXRJZAQAAAASbGVuZGVkT3JEZWJ0QW1vdW50CQAAZQAAAAIFAAAAFmRlYnRUb2tlblJlaXNzdWVBbW91bnQJAAPwAAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAAlkZWJ0VG9rZW4EAAAAFGFzc2V0VG90YWxVc2RuQW1vdW50CQAAZAAAAAIJAABlAAAAAgkAAGQAAAACBQAAABVhc3NldFVzZG5TdGFrZWRBbW91bnQFAAAAFmFzc2V0VXNkbkJhbGFuY2VBbW91bnQFAAAAD3Bvb2xUb3RhbExvY2tlZAUAAAASbGVuZGVkT3JEZWJ0QW1vdW50BAAAAAt1Y29sbGF0ZXJhbAkAAGUAAAACBQAAABRhc3NldFRvdGFsVXNkbkFtb3VudAUAAAAOcG9vbEFjdHVhbFNpemUEAAAAEGRlZm9Bc3NldEJhbGFuY2UJAAPwAAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAAdhc3NldElkBAAAABJhc3NldEVtaXNzaW9uRGlydHkICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAAHYXNzZXRJZAkAASwAAAACAgAAABhDYW5ub3QgZmluZCBhc3NldCBieSBpZCAFAAAACmFzc2V0SWRTdHIAAAAIcXVhbnRpdHkEAAAADWFzc2V0RW1pc3Npb24JAABlAAAAAgUAAAASYXNzZXRFbWlzc2lvbkRpcnR5BQAAABBkZWZvQXNzZXRCYWxhbmNlBAAAABJwcmljZU9yYWNsZUFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABpnZXRBc3NldFByaWNlT3JhY2xlQWRkcmVzcwAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAADGN1cnJlbnRQcmljZQkBAAAADWdldEFzc2V0UHJpY2UAAAACBQAAABJwcmljZU9yYWNsZUFkZHJlc3MFAAAACWFzc2V0Q29kZQQAAAAfYXNzZXRFbWlzc2lvbk92ZXJjb2xsYXRlcmFsUmF0ZQkAAGsAAAADCQAAZAAAAAIFAAAADW11bHRpcGxpY2F0b3IJAQAAAB1nZXRBc3NldE92ZXJDb2xsYXRlcmFsUGVyY2VudAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QFAAAADWFzc2V0RW1pc3Npb24FAAAADW11bHRpcGxpY2F0b3IEAAAAGXVzZG5OZWVkZWRUb0NvdmVyRW1pc3Npb24JAABrAAAAAwUAAAAfYXNzZXRFbWlzc2lvbk92ZXJjb2xsYXRlcmFsUmF0ZQUAAAANbXVsdGlwbGljYXRvcgUAAAAMY3VycmVudFByaWNlBAAAABJwb29sTWFrZXJNYXhBbW91bnQJAQAAACJnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uTWF4QW1vdW50AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAAB9wb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50S2V5CQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAH3Bvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAAAAAAAAAAEAAAAFXBvb2xNYWtlckxvY2tlZEFtb3VudAkBAAAAGGdldFBvb2xNYWtlckxvY2tlZEFtb3VudAAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAHc3VycGx1cwkAAGUAAAACBQAAAAt1Y29sbGF0ZXJhbAUAAAAZdXNkbk5lZWRlZFRvQ292ZXJFbWlzc2lvbgQAAAAQcGVyY2VudFZpYUFjdHVhbAkAAGsAAAADBQAAABVwb29sTWFrZXJBY3R1YWxBbW91bnQFAAAADW11bHRpcGxpY2F0b3IFAAAADnBvb2xBY3R1YWxTaXplBAAAAA1wZXJjZW50VmlhTWF4CQAAawAAAAMFAAAAEnBvb2xNYWtlck1heEFtb3VudAUAAAANbXVsdGlwbGljYXRvcgUAAAALcG9vbE1heFNpemUEAAAACmZyb3plblBhcnQDCQAAZwAAAAIFAAAAB3N1cnBsdXMAAAAAAAAAAAAAAAAAAAAAAAAJAAGWAAAAAQkABEwAAAACBQAAABBwZXJjZW50VmlhQWN0dWFsCQAETAAAAAIFAAAADXBlcmNlbnRWaWFNYXgFAAAAA25pbAQAAAAVYWxsb3dlZEFtb3VudFRvUmVkZWVtAwkAAGcAAAACBQAAAAdzdXJwbHVzAAAAAAAAAAAABQAAABVwb29sTWFrZXJBY3R1YWxBbW91bnQJAABkAAAAAgkAAGsAAAADBQAAAApmcm96ZW5QYXJ0BQAAAAdzdXJwbHVzBQAAAA1tdWx0aXBsaWNhdG9yBQAAABVwb29sTWFrZXJBY3R1YWxBbW91bnQEAAAADndpdGhkcmF3SGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAkBAAAAGmdldFJlZGVtcHRpb25UaW1lb3V0QmxvY2tzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAkABRoAAAAIBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAAFWFsbG93ZWRBbW91bnRUb1JlZGVlbQUAAAAPcG9vbFRvdGFsTG9ja2VkBQAAAA5wb29sQWN0dWFsU2l6ZQUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50BQAAAA53aXRoZHJhd0hlaWdodAUAAAAVcG9vbE1ha2VyTG9ja2VkQW1vdW50CQAEuQAAAAIJAARMAAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyCQAETAAAAAIFAAAACmFzc2V0SWRTdHIJAARMAAAAAgUAAAAQcG9vbE1ha2VyQWRkcmVzcwkABEwAAAACCQABpAAAAAEFAAAAFWFzc2V0VXNkblN0YWtlZEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAFmFzc2V0VXNkbkJhbGFuY2VBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAABRhc3NldFRvdGFsVXNkbkFtb3VudAkABEwAAAACCQABpAAAAAEFAAAADnBvb2xBY3R1YWxTaXplCQAETAAAAAIJAAGkAAAAAQUAAAALcG9vbE1heFNpemUJAARMAAAAAgkAAaQAAAABBQAAAAt1Y29sbGF0ZXJhbAkABEwAAAACCQABpAAAAAEFAAAADWFzc2V0RW1pc3Npb24JAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAB9hc3NldEVtaXNzaW9uT3ZlcmNvbGxhdGVyYWxSYXRlCQAETAAAAAIJAAGkAAAAAQUAAAAScG9vbE1ha2VyTWF4QW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAVcG9vbE1ha2VyTG9ja2VkQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAHc3VycGx1cwkABEwAAAACCQABpAAAAAEFAAAAEHBlcmNlbnRWaWFBY3R1YWwJAARMAAAAAgkAAaQAAAABBQAAAA1wZXJjZW50VmlhTWF4CQAETAAAAAIJAAGkAAAAAQUAAAAKZnJvemVuUGFydAkABEwAAAACCQABpAAAAAEFAAAAFWFsbG93ZWRBbW91bnRUb1JlZGVlbQUAAAADbmlsBQAAAANTRVAAAAAHAAAAAWkBAAAABGluaXQAAAAGAAAAF25ldXRyaW5vQ29udHJhY3RBZGRyZXNzAAAAFm5ldXRyaW5vU3Rha2luZ0FkZHJlc3MAAAAYbWluaW11blBvb2xGdW5kaW5nQW1vdW50AAAAEmRlYnRFdGhhbG9uQmFsYW5jZQAAABJkZWZvU3Rha2luZ0FkZHJlc3MAAAAXZGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQYJAAACAAAAAQIAAAAhQ29udHJhY3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuBAAAAAlpc3N1ZURlYnQJAARCAAAABQIAAAAJREVGT19ERUJUAgAAABBERUZPIERlYnQgVG9rZW4uAAAAAAAAAAABAAAAAAAAAAAGBgQAAAALZGVidFRva2VuSWQJAAQ4AAAAAQUAAAAJaXNzdWVEZWJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGm5ldXRyaW5vQ29udHJhY3RBZGRyZXNzS2V5BQAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABluZXV0cmlub1N0YWtpbmdBZGRyZXNzS2V5BQAAABZuZXV0cmlub1N0YWtpbmdBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkFAAAAGG1pbmltdW5Qb29sRnVuZGluZ0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQUAAAASZGVidEV0aGFsb25CYWxhbmNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADmRlYnRUb2tlbklkS2V5CQACWAAAAAEFAAAAC2RlYnRUb2tlbklkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFWRlZm9TdGFraW5nQWRkcmVzc0tleQUAAAASZGVmb1N0YWtpbmdBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGmRlZm9TdGFraW5nUGFjZW1ha2VyUHViS2V5BQAAABdkZWZvU3Rha2luZ1BhY2VtYWtlclB1YgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAQaXNJbml0aWFsaXplZEtleQYJAARMAAAAAgUAAAAJaXNzdWVEZWJ0CQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAALZGVidFRva2VuSWQAAAAAAAAAAAEFAAAAA25pbAAAAAFpAQAAAAxwcm9wb3NlQXNzZXQAAAAEAAAACWFzc2V0Q29kZQAAAAdtaW5Qb29sAAAAEnByaWNlT3JhY2xlQWRkcmVzcwAAAA5taW5TZWxsUGF5bWVudAQAAAAOYmFja2luZ0Fzc2V0SWQFAAAAEm5ldXRyaW5vQXNzZXRJZFN0cgQAAAANcHJpY2VEZWNpbWFscwUAAAANbXVsdGlwbGljYXRvcgQAAAAPYnV5TG9ja0ludGVydmFsAAAAAAAAAAAABAAAABBzZWxsTG9ja0ludGVydmFsAAAAAAAAAAAABAAAAA1taW5CdXlQYXltZW50CQAAaAAAAAIAAAAAAAAAAAEFAAAADW11bHRpcGxpY2F0b3IEAAAAFXBvb2xSZWRlbXB0aW9uVGltZW91dAAAAAAAAAAAAAQAAAAGYnV5RmVlAAAAAAAAAAq+BAAAAAdzZWxsRmVlAAAAAAAAAAq+BAAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAAAAAAAOpgEAAAAFW92ZXJDb2xsYXRlcmFsUGVyY2VudAAAAAAAAAAAAAQAAAAYY3Jvc3NFeGNoYW5nZUNvZWZmaWNpZW50AAAAAAAAB6EgBAAAACBzdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudAkAAGgAAAACAAAAAAAAAAABBQAAAA1tdWx0aXBsaWNhdG9yBAAAABNtaW5Qb29sSW52ZXN0QW1vdW50CQAAaAAAAAIAAAAAAAAAAAoFAAAADW11bHRpcGxpY2F0b3IEAAAAE21pblBvb2xSZWRlZW1BbW91bnQJAABoAAAAAgAAAAAAAAAAAQUAAAANbXVsdGlwbGljYXRvcgQAAAAQcG9vbFN0YWJpbGl0eUZlZQAAAAAAAAAB9AQAAAALcHJvdG9jb2xGZWUAAAAAAAAACr4DCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQEAAAACIT0AAAACCQACWQAAAAEFAAAADmJhY2tpbmdBc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAAjQmFraW5nIGFzc2V0IGlkIGNvdWxkIGJlIFVTRE4gb25seS4DCQEAAAACIT0AAAACCQEAAAAVZ2V0QXNzZXRBZGRyZXNzQnlDb2RlAAAAAQUAAAAJYXNzZXRDb2RlAgAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAF0Fzc2V0IHdpdGggcGFzc2VkIGNvZGUgBQAAAAlhc3NldENvZGUCAAAAGyBoYXMgYWxyZWFkeSBiZWVuIHByb3Bvc2VkLgMJAABmAAAAAgUAAAASbWluaW11bVBvb2xGdW5kaW5nBQAAAAdtaW5Qb29sCQAAAgAAAAEJAAEsAAAAAgIAAAAzTWluaW11bSBwb29sIGFtb3VudCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbHMgdG8gCQABpAAAAAEFAAAAEm1pbmltdW1Qb29sRnVuZGluZwMDAwMDAwMJAABmAAAAAgAAAAAAAAAAAAUAAAAVb3ZlckNvbGxhdGVyYWxQZXJjZW50BgkAAGYAAAACAAAAAAAAAAAABQAAAA1taW5CdXlQYXltZW50BgkAAGYAAAACAAAAAAAAAAAABQAAAA5taW5TZWxsUGF5bWVudAYJAABmAAAAAgAAAAAAAAAAAAUAAAAPYnV5TG9ja0ludGVydmFsBgkAAGYAAAACAAAAAAAAAAAABQAAABBzZWxsTG9ja0ludGVydmFsBgkAAGYAAAACAAAAAAAAAAAABQAAAAZidXlGZWUGCQAAZgAAAAIAAAAAAAAAAAAFAAAAB3NlbGxGZWUJAAACAAAAAQIAAAAoT25lIG9mIHRoZSBwYXNzZWQgcGFyYW1ldGVycyBpcyBpbnZhbGlkLgQAAAAXcHJpY2VPcmFjbGVBZGRyZXNzVmFsaWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAScHJpY2VPcmFjbGVBZGRyZXNzAgAAAClQYXNzZWQgUHJpY2UgT3JhY2xlIEFkZHJlc3MgaXMgbm90IHZhbGlkLgQAAAAOcHJlSW5pdERhdGFTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAdZ2V0UHJlSW5pdGlhbGl6ZWRBc3NldERhdGFLZXkAAAABBQAAAAlhc3NldENvZGUJAAEsAAAAAgIAAAA7VW5zdXBwb3J0ZWQgY3VycmVuY3kgLSB0aGVyZSBpcyBubyBwcmVpbml0aWFsaXplZCBkYXRhIGZvciAFAAAACWFzc2V0Q29kZQQAAAAQcHJlSW5pdERhdGFBcnJheQkABLUAAAACBQAAAA5wcmVJbml0RGF0YVN0cgUAAAADU0VQBAAAABVwcmVJbml0QXNzZXRQdWJsaWNTdHIJAAGRAAAAAgUAAAAQcHJlSW5pdERhdGFBcnJheQUAAAAcSWR4UHJlSW5pdGlhbGl6ZWRBc3NldFB1YmxpYwQAAAAfcHJlSW5pdFN0YWtpbmdSZWZlcnJhbFB1YmxpY1N0cgkAAZEAAAACBQAAABBwcmVJbml0RGF0YUFycmF5BQAAACtJZHhQcmVJbml0aWFsaXplZEFzc2V0U3Rha2luZ1JlZmVycmFsUHVibGljBAAAABJwcmVJbml0RGVzY3JpcHRpb24JAAGRAAAAAgUAAAAQcHJlSW5pdERhdGFBcnJheQUAAAAhSWR4UHJlSW5pdGlhbGl6ZWRBc3NldERlc2NyaXB0aW9uBAAAAAxhc3NldEFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAVcHJlSW5pdEFzc2V0UHVibGljU3RyBAAAAA9hc3NldEFkZHJlc3NTdHIJAAQlAAAAAQUAAAAMYXNzZXRBZGRyZXNzBAAAAAtkZWZvQXNzZXRJZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAOZGVmb0Fzc2V0SWRLZXkCAAAAF05vIGRlZm8gYXNzZXQgSUQgZm91bmQuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgkBAAAAH2NvbXBvc2VBc3NldENvbmZpZ3VyYXRpb25TdHJpbmcAAAAWBQAAAAlhc3NldENvZGUFAAAAC2RlZm9Bc3NldElkCAUAAAALYXNzZXRTdGF0dXMAAAACXzEFAAAADXByaWNlRGVjaW1hbHMFAAAADmJhY2tpbmdBc3NldElkBQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQFAAAAB21pblBvb2wFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwUAAAANbWluQnV5UGF5bWVudAUAAAAObWluU2VsbFBheW1lbnQFAAAAD2J1eUxvY2tJbnRlcnZhbAUAAAAQc2VsbExvY2tJbnRlcnZhbAUAAAAGYnV5RmVlBQAAAAdzZWxsRmVlBQAAABVwb29sUmVkZW1wdGlvblRpbWVvdXQFAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAUAAAAVcHJlSW5pdEFzc2V0UHVibGljU3RyBQAAAB9wcmVJbml0U3Rha2luZ1JlZmVycmFsUHVibGljU3RyCQABpAAAAAEFAAAAGGNyb3NzRXhjaGFuZ2VDb2VmZmljaWVudAkAAaQAAAABBQAAACBzdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudAkAAaQAAAABBQAAABBwb29sU3RhYmlsaXR5RmVlCQABpAAAAAEFAAAAC3Byb3RvY29sRmVlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABhnZXRBc3NldEFkZHJlc3NCeUNvZGVLZXkAAAABBQAAAAlhc3NldENvZGUFAAAAD2Fzc2V0QWRkcmVzc1N0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0QXNzZXRNZXRhS2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABJwcmVJbml0RGVzY3JpcHRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVnZXRBc3NldEluaXRIZWlnaHRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlBc3NldElkS2V5AAAAAQUAAAALZGVmb0Fzc2V0SWQFAAAAD2Fzc2V0QWRkcmVzc1N0cgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGWdldFBvb2xNaW5JbnZlc3RBbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAAE21pblBvb2xJbnZlc3RBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlnZXRQb29sTWluUmVkZWVtQW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABNtaW5Qb29sUmVkZWVtQW1vdW50BQAAAANuaWwAAAABaQEAAAARZnVuZExpcXVpZGl0eVBvb2wAAAABAAAACWFzc2V0Q29kZQQAAAAPYXNzZXRBZGRyZXNzU3RyCQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlDb2RlT3JGYWlsAAAAAQUAAAAJYXNzZXRDb2RlBAAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQEAAAATZ2V0QXNzZXRDb25maWdBcnJheQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAPYXR0YWNoZWRQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAABBwb29sTWFrZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAXY3VycmVudFBvb2xNYWtlckJhbGFuY2UJAQAAAB9nZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAABNtaW5Qb29sSW52ZXN0QW1vdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABlnZXRQb29sTWluSW52ZXN0QW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCQAAaAAAAAIAAAAAAAAAAAoFAAAADW11bHRpcGxpY2F0b3IDCQAAAAAAAAIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABBpc0luaXRpYWxpemVkS2V5BwkAAAIAAAABAgAAABpDb250cmFjdCBpcyBub3QgeWV0IHJlYWR5LgMJAQAAAAIhPQAAAAIIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAALkxpcXVpZGl0eSBwb29sIGNvdWxkIGJlIGZ1bmRlZCB3aXRoIFVTRE4gb25seS4DAwkAAGYAAAACBQAAABNtaW5Qb29sSW52ZXN0QW1vdW50BQAAABdjdXJyZW50UG9vbE1ha2VyQmFsYW5jZQkAAGYAAAACBQAAABNtaW5Qb29sSW52ZXN0QW1vdW50CAUAAAAPYXR0YWNoZWRQYXltZW50AAAABmFtb3VudAcJAAACAAAAAQkAASwAAAACAgAAADFBdHRhY2hlZCBwYXltZW50IGFtb3VudCBpcyBsZXNzIHRoYSBtaW4gYWxsb3dlZDogCQABpAAAAAEFAAAAE21pblBvb2xJbnZlc3RBbW91bnQEAAAAFG5ld0N1cnJlbnRQb29sQW1vdW50CQAAZAAAAAIIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAGYW1vdW50CQEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAANbWF4UG9vbEFtb3VudAkBAAAAFWdldEFzc2V0TWF4UG9vbEFtb3VudAAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAATbWF4UG9vbE1ha2VyQmFsYW5jZQkBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnQAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAAEHBvb2xNYWtlckFkZHJlc3MEAAAAEmN1cnJlbnRBc3NldFN0YXR1cwkBAAAADmdldEFzc2V0U3RhdHVzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAObmV3QXNzZXRTdGF0dXMDAwkAAAAAAAACBQAAABJjdXJyZW50QXNzZXRTdGF0dXMFAAAADUFTU0V0UFJPUE9TRUQJAABnAAAAAgUAAAAUbmV3Q3VycmVudFBvb2xBbW91bnQJAQAAAB1nZXRBc3NldE1pblJlcXVpcmVkUG9vbEFtb3VudAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QHBQAAAApBU1NFdFJFQURZBQAAABJjdXJyZW50QXNzZXRTdGF0dXMEAAAAE25ld1Bvb2xNYWtlckJhbGFuY2UJAABkAAAAAgUAAAAXY3VycmVudFBvb2xNYWtlckJhbGFuY2UIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAGYW1vdW50BAAAABlpbW1lZGlhdGVUcmFuc2ZlcklmSXNzdWVkAwkAAAAAAAACBQAAABJjdXJyZW50QXNzZXRTdGF0dXMFAAAAC0FTU0V0SVNTVUVECQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cggFAAAAD2F0dGFjaGVkUGF5bWVudAAAAAZhbW91bnQFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsBQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAAEHBvb2xNYWtlckFkZHJlc3MFAAAAE25ld1Bvb2xNYWtlckJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAACVnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uTWF4QW1vdW50S2V5AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzCQABlgAAAAEJAARMAAAAAgUAAAATbmV3UG9vbE1ha2VyQmFsYW5jZQkABEwAAAACBQAAABNtYXhQb29sTWFrZXJCYWxhbmNlBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAB1nZXRBc3NldEN1cnJyZW50UG9vbEFtb3VudEtleQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAAUbmV3Q3VycmVudFBvb2xBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhnZXRBc3NldE1heFBvb2xBbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIJAAGWAAAAAQkABEwAAAACBQAAAA1tYXhQb29sQW1vdW50CQAETAAAAAIFAAAAFG5ld0N1cnJlbnRQb29sQW1vdW50BQAAAANuaWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWdldEFzc2V0Q29uZmlnS2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCQEAAAAUdXBkYXRlQXNzZXRDZmdTdGF0dXMAAAACBQAAAA5uZXdBc3NldFN0YXR1cwUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAUAAAADbmlsBQAAABlpbW1lZGlhdGVUcmFuc2ZlcklmSXNzdWVkAAAAAWkBAAAADWFjdGl2YXRlQXNzZXQAAAABAAAACWFzc2V0Q29kZQQAAAAMYXNzZXRBZGRyZXNzCQEAAAAVZ2V0QXNzZXRBZGRyZXNzQnlDb2RlAAAAAQUAAAAJYXNzZXRDb2RlBAAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQEAAAATZ2V0QXNzZXRDb25maWdBcnJheQAAAAEFAAAADGFzc2V0QWRkcmVzcwQAAAAWYXNzZXRDdXJyZW50UG9vbEFtb3VudAkBAAAAGWdldEFzc2V0Q3VycmVudFBvb2xBbW91bnQAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAADmFDdXJyZW50U3RhdHVzCQEAAAAOZ2V0QXNzZXRTdGF0dXMAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0AwkBAAAAAiE9AAAAAgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADmFkbWluUHVibGljS2V5CQAAAgAAAAECAAAAKk9ubHkgQWRtaW4gY2FuIHBlcmZvcm0gY29udHJhY3Qgb3BlcmF0aW9uLgMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwkBAAAAAiE9AAAAAgUAAAAOYUN1cnJlbnRTdGF0dXMIBQAAAAthc3NldFN0YXR1cwAAAAJfMgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAwQXNzZXQgaXMgbm90IGluIFJFQURZIHN0YXR1cy4gQ3VycmVudCBzdGF0dXMgaXMgBQAAAA5hQ3VycmVudFN0YXR1cwIAAAABLgMJAAAAAAAAAgUAAAAMYXNzZXRBZGRyZXNzAgAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEkNhbm5vdCBmaW5kIGFzc2V0IAUAAAAJYXNzZXRDb2RlAgAAAAEuAwkAAGYAAAACBQAAABJtaW5pbXVtUG9vbEZ1bmRpbmcFAAAAFmFzc2V0Q3VycmVudFBvb2xBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAC1DYW5ub3QgaXNzdWUgYXNzZXQgYXMgbGlxdWlkaXR5IHBvb2wgYW1vdW50ICgJAAGkAAAAAQUAAAAWYXNzZXRDdXJyZW50UG9vbEFtb3VudAIAAAAZKSBpcyBsZXNzIHRoYW4gcmVxdWlyZWQgKAkAAaQAAAABBQAAABJtaW5pbXVtUG9vbEZ1bmRpbmcCAAAAASkEAAAACWlzc3VlRGVidAkBAAAAB1JlaXNzdWUAAAADBQAAAAlkZWJ0VG9rZW4FAAAAFmRlYnRUb2tlblJlaXNzdWVBbW91bnQGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEFAAAADGFzc2V0QWRkcmVzcwkBAAAAFHVwZGF0ZUFzc2V0Q2ZnU3RhdHVzAAAAAggFAAAAC2Fzc2V0U3RhdHVzAAAAAl8zBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQAETAAAAAIFAAAACWlzc3VlRGVidAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAxhc3NldEFkZHJlc3MFAAAAFmFzc2V0Q3VycmVudFBvb2xBbW91bnQFAAAAD25ldXRyaW5vQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAxhc3NldEFkZHJlc3MFAAAAFmRlYnRUb2tlblJlaXNzdWVBbW91bnQFAAAACWRlYnRUb2tlbgUAAAADbmlsAAAAAWkBAAAADnJlZGVlbUZyb21Qb29sAAAAAgAAAAlhc3NldENvZGUAAAAGYW1vdW50BAAAAA1jYWxsZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALcmVkZWVtVHVwbGUJAQAAABljYWxjQWxsb3dlZEFtb3VudFRvUmVkZWVtAAAAAgUAAAAJYXNzZXRDb2RlBQAAAA1jYWxsZXJBZGRyZXNzBAAAAA9hc3NldEFkZHJlc3NTdHIIBQAAAAtyZWRlZW1UdXBsZQAAAAJfMQQAAAAVYWxsb3dlZEFtb3VudFRvUmVkZWVtCAUAAAALcmVkZWVtVHVwbGUAAAACXzIEAAAAD3Bvb2xUb3RhbExvY2tlZAgFAAAAC3JlZGVlbVR1cGxlAAAAAl8zBAAAAA5wb29sQWN0dWFsU2l6ZQgFAAAAC3JlZGVlbVR1cGxlAAAAAl80BAAAABVwb29sTWFrZXJBY3R1YWxBbW91bnQIBQAAAAtyZWRlZW1UdXBsZQAAAAJfNQQAAAAOd2l0aGRyYXdIZWlnaHQIBQAAAAtyZWRlZW1UdXBsZQAAAAJfNgQAAAAVcG9vbE1ha2VyTG9ja2VkQW1vdW50CAUAAAALcmVkZWVtVHVwbGUAAAACXzcEAAAACXRyYWNlRGF0YQgFAAAAC3JlZGVlbVR1cGxlAAAAAl84BAAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5CQEAAAAfZ2V0UG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEtleQAAAAMFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAANY2FsbGVyQWRkcmVzcwUAAAAOd2l0aGRyYXdIZWlnaHQEAAAAE21pblBvb2xSZWRlZW1BbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGWdldFBvb2xNaW5SZWRlZW1BbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIJAABoAAAAAgAAAAAAAAAAAQUAAAANbXVsdGlwbGljYXRvcgMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwkAAGcAAAACAAAAAAAAAAAABQAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIkNhbm5vdCBmaW5kIHBvb2wgbWFrZXIgYnkgYWRkcmVzcyAFAAAADWNhbGxlckFkZHJlc3MCAAAAISBvciBhbW91bnQgcGFzc2VkIGlzIG5vdCBjb3JyZWN0LgMJAABnAAAAAgAAAAAAAAAAAAUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50CQAAAgAAAAECAAAAF1Bvb2wgbWFrZXIgaGFzIG5vIGZ1bmRzAwkAAGcAAAACAAAAAAAAAAAABQAAABVhbGxvd2VkQW1vdW50VG9SZWRlZW0JAAACAAAAAQIAAAAfQWxsIHBvb2wgbWFrZXIgZnVuZHMgYXJlIGxvY2tlZAMJAABmAAAAAgUAAAAGYW1vdW50BQAAABVhbGxvd2VkQW1vdW50VG9SZWRlZW0JAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABHQWxsb3dlZCBhbW91bnQgdG8gcmVkZWVtIGlzIGxlc3MgdGhlbiByZXF1ZXN0ZWQ6IGFsbG93ZWRBbW91bnRUb1JlZGVlbT0JAAGkAAAAAQUAAAAVYWxsb3dlZEFtb3VudFRvUmVkZWVtAgAAAAsgcmVxdWVzdGVkPQkAAaQAAAABBQAAAAZhbW91bnQDCQAAZgAAAAIFAAAAE21pblBvb2xSZWRlZW1BbW91bnQFAAAABmFtb3VudAkAAAIAAAABAgAAACZSZWRlZW0gYW1vdW50IGlzIGxlc3MgdGhlbiBtaW4gYWxsb3dlZAMJAABmAAAAAgUAAAAVcG9vbE1ha2VyTG9ja2VkQW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAARlBvb2wgbWFrZXIgYWxyZWFkeSBoYXMgaW5pdGlhdGVkIHJlZGVtcHRpb24gdGhhdCBpcyBub3Qgd2l0aGRyYXduIHlldC4DCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzBQAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADBQb29sIG1ha2VyIGhhcyBhbHJlYWR5IGluaXRpYXRlZCByZWRlbXB0aW9uIGZvciAJAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAcgaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0UG9vbFRvdGFsTG9ja2VkQW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCQAAZAAAAAIFAAAAD3Bvb2xUb3RhbExvY2tlZAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIJAABlAAAAAgUAAAAOcG9vbEFjdHVhbFNpemUFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAADWNhbGxlckFkZHJlc3MJAABlAAAAAgUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50BQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAHHBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAG2dldFBvb2xNYWtlckxvY2tlZEFtb3VudEtleQAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAANY2FsbGVyQWRkcmVzcwUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAAA1jYWxsZXJBZGRyZXNzBQAAAA53aXRoZHJhd0hlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAABklcyVzX3RyYWNlX3JlZGVlbUZyb21Qb29sBQAAAAl0cmFjZURhdGEFAAAAA25pbAAAAAFpAQAAABtnZXRNYXhBbGxvd2VkQW1vdW50VG9SZWRlZW0AAAACAAAACWFzc2V0Q29kZQAAABBwb29sTWFrZXJBZGRyZXNzBAAAAAtyZWRlZW1UdXBsZQkBAAAAGWNhbGNBbGxvd2VkQW1vdW50VG9SZWRlZW0AAAACBQAAAAlhc3NldENvZGUFAAAAEHBvb2xNYWtlckFkZHJlc3MEAAAAD2Fzc2V0QWRkcmVzc1N0cggFAAAAC3JlZGVlbVR1cGxlAAAAAl8xBAAAABVhbGxvd2VkQW1vdW50VG9SZWRlZW0IBQAAAAtyZWRlZW1UdXBsZQAAAAJfMgQAAAAPcG9vbFRvdGFsTG9ja2VkCAUAAAALcmVkZWVtVHVwbGUAAAACXzMEAAAADnBvb2xBY3R1YWxTaXplCAUAAAALcmVkZWVtVHVwbGUAAAACXzQEAAAAFXBvb2xNYWtlckFjdHVhbEFtb3VudAgFAAAAC3JlZGVlbVR1cGxlAAAAAl81BAAAAA53aXRoZHJhd0hlaWdodAgFAAAAC3JlZGVlbVR1cGxlAAAAAl82BAAAABVwb29sTWFrZXJMb2NrZWRBbW91bnQIBQAAAAtyZWRlZW1UdXBsZQAAAAJfNwQAAAAJdHJhY2VEYXRhCAUAAAALcmVkZWVtVHVwbGUAAAACXzgJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAABewIAAAAXYWxsb3dlZEFtb3VudFRvUmVkZWVtOiAJAAGkAAAAAQUAAAAVYWxsb3dlZEFtb3VudFRvUmVkZWVtAgAAAA0sIGFzc2V0Q29kZTogBQAAAAlhc3NldENvZGUCAAAADSwgcG9vbE1ha2VyOiAFAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAACSwgdHJhY2U6IAUAAAAJdHJhY2VEYXRhAgAAAAF9AAAAAWkBAAAACHdpdGhkcmF3AAAAAgAAAAlhc3NldENvZGUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAPYXNzZXRBZGRyZXNzU3RyCQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlDb2RlT3JGYWlsAAAAAQUAAAAJYXNzZXRDb2RlBAAAAAxhc3NldEFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAYcG9vbE1ha2VyTG9ja2VkQW1vdW50S2V5CQEAAAAbZ2V0UG9vbE1ha2VyTG9ja2VkQW1vdW50S2V5AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAABlyZWdpc3RlcmVkQW1vdW50NFdpdGhkcmF3CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAGHBvb2xNYWtlckxvY2tlZEFtb3VudEtleQAAAAAAAAAAAAQAAAAYcG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5CQEAAAAbZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAAA53aXRoZHJhd0hlaWdodAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABhwb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkAAAAAAAAAAAAEAAAAGHBvb2xUb3RhbExvY2tlZEFtb3VudEtleQkBAAAAG2dldFBvb2xUb3RhbExvY2tlZEFtb3VudEtleQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAPcG9vbFRvdGFsTG9ja2VkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAGHBvb2xUb3RhbExvY2tlZEFtb3VudEtleQAAAAAAAAAAAAQAAAAccG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEtleQkBAAAAH2dldFBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkAAAADBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAAEHBvb2xNYWtlckFkZHJlc3MFAAAADndpdGhkcmF3SGVpZ2h0AwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAccG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEtleQkAAAIAAAABAgAAADNOZWVkIHRvIHRyYW5zZmVyIGxpcXVpZGl0eSBmcm9tIGFzc2V0IGFjY291bnQgZmlyc3QDCQAAZwAAAAIAAAAAAAAAAAAFAAAAGXJlZ2lzdGVyZWRBbW91bnQ0V2l0aGRyYXcJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIkNhbm5vdCBmaW5kIHBvb2wgbWFrZXIgYnkgYWRkcmVzcyAFAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAAFSBvciBubyBsb2NrZWQgYW1vdW50LgMJAABmAAAAAgUAAAAOd2l0aGRyYXdIZWlnaHQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAMUGxlYXNlIHdhaXQgCQABpAAAAAEFAAAADndpdGhkcmF3SGVpZ2h0AgAAABEgYmVmb3JlIHdpdGhkcmF3LgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAYcG9vbE1ha2VyTG9ja2VkQW1vdW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABhwb29sVG90YWxMb2NrZWRBbW91bnRLZXkJAABlAAAAAgUAAAAPcG9vbFRvdGFsTG9ja2VkBQAAABlyZWdpc3RlcmVkQW1vdW50NFdpdGhkcmF3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABhwb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAQcG9vbE1ha2VyQWRkcmVzcwUAAAAZcmVnaXN0ZXJlZEFtb3VudDRXaXRoZHJhdwUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAAA9rEDFw==", "chainId": 87, "height": 2578389, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4Pp6EEx9kQQku3is9gnyDRgVf5oTASsn7TSsi8XoT6BR Next: Go6KzapTWTzNzzNn3b8aqABYWeAMc3W1mCiH3NNovJ1N Diff:
OldNewDifferences
4848
4949 let x = 21
5050
51-let y = "3YSMs2xX38575kQqyWtHEcydU3zfDXqcbiuELRhDhvB8"
51+let y = 22
5252
53-let z = "%s%s__commonConfig__neutrinoContractAddress"
53+let z = "3YSMs2xX38575kQqyWtHEcydU3zfDXqcbiuELRhDhvB8"
5454
55-let A = "%s%s__commonConfig__neutrinoStakingAddress"
55+let A = "%s%s__commonConfig__neutrinoContractAddress"
5656
57-let B = "%s%s__commonConfig__minimumPoolFundingAmount"
57+let B = "%s%s__commonConfig__neutrinoStakingAddress"
5858
59-let C = "%s%s__commonConfig__initialized"
59+let C = "%s%s__commonConfig__minimumPoolFundingAmount"
6060
61-let D = "%s%s__commonConfig__debtAssetId"
61+let D = "%s%s__commonConfig__initialized"
6262
63-let E = "%s%s__commonConfig__debtAssetEtalonBalance"
63+let E = "%s%s__commonConfig__debtAssetId"
6464
65-let F = "%s%s__commonConfig__defoStakingAddress"
65+let F = "%s%s__commonConfig__debtAssetEtalonBalance"
6666
67-let G = "%s%s__commonConfig__defoStakingPacemakerPub"
67+let G = "%s%s__commonConfig__defoStakingAddress"
6868
69-let H = "neutrino_asset_id"
69+let H = "%s%s__commonConfig__defoStakingPacemakerPub"
7070
71-let I = "bond_asset_id"
71+let I = "neutrino_asset_id"
7272
73-let J = "rpd_contract"
73+let J = "bond_asset_id"
7474
75-let K = "%s__defoAssetId"
75+let K = "rpd_contract"
7676
77-let L = "%s__assetScriptTxId"
77+let L = "%s__defoAssetId"
7878
79-func M (N) = (("%s%s%s__defoAsset__" + N) + "__config")
79+let M = "%s__assetScriptTxId"
80+
81+func N (O) = (("%s%s%s__defoAsset__" + O) + "__config")
8082
8183
82-let O = 0
84+let P = 0
8385
84-let P = 1
86+let Q = 1
8587
86-let Q = 2
88+let R = 2
8789
88-func R (S) = ("%s%s__preInitializedAssetData__" + S)
90+func S (T) = ("%s%s__preInitializedAssetData__" + T)
8991
9092
91-func T (S) = ("%s%s__price__" + S)
93+func U (T) = ("%s%s__price__" + T)
9294
9395
94-func U (N) = (("%s%s%s__defoAsset__" + N) + "__initHeight")
96+func V (O) = (("%s%s%s__defoAsset__" + O) + "__initHeight")
9597
9698
97-func V (N) = (("%s%s%s__defoAsset__" + N) + "__activateHeight")
99+func W (O) = (("%s%s%s__defoAsset__" + O) + "__activateHeight")
98100
99101
100-func W (N) = (("%s%s%s__defoAsset__" + N) + "__currentPool")
102+func X (O) = (("%s%s%s__defoAsset__" + O) + "__currentPool")
101103
102104
103-func X (N) = (("%s%s%s__defoAsset__" + N) + "__maxPool")
105+func Y (O) = (("%s%s%s__defoAsset__" + O) + "__maxPool")
104106
105107
106-func Y (N) = (("%s%s%s__defoAsset__" + N) + "__meta")
108+func Z (O) = (("%s%s%s__defoAsset__" + O) + "__meta")
107109
108110
109-func Z (S) = (("%s%s%s__defoAsset__" + S) + "__addressByAssetCode")
111+func aa (T) = (("%s%s%s__defoAsset__" + T) + "__addressByAssetCode")
110112
111113
112-func aa (ab) = (("%s%s%s__defoAsset__" + ab) + "__addressByAssetId")
114+func ab (ac) = (("%s%s%s__defoAsset__" + ac) + "__addressByAssetId")
113115
114116
115-func ac (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "amount"], c)
117+func ad (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "amount"], c)
116118
117119
118-func ae (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "maxAmount"], c)
120+func af (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "maxAmount"], c)
119121
120122
121-func af (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "lockedAmount"], c)
123+func ag (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "lockedAmount"], c)
122124
123125
124-func ag (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "unlockHeight"], c)
126+func ah (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "unlockHeight"], c)
125127
126128
127-func ah (N,ad,ai) = makeString(["%s%s%s%d%s__pool", N, ad, toString(ai), "liquidityRequest"], c)
129+func ai (O,ae,aj) = makeString(["%s%s%s%d%s__pool", O, ae, toString(aj), "liquidityRequest"], c)
128130
129131
130-func aj (N) = makeString(["%s%s%s__pool", N, "totalLockedAmount"], c)
132+func ak (O) = makeString(["%s%s%s__pool", O, "totalLockedAmount"], c)
131133
132134
133-func ak (N) = makeString(["%s%s%s__pool", N, "minInvestAmount"], c)
135+func al (O) = makeString(["%s%s%s__pool", O, "minInvestAmount"], c)
134136
135137
136-func al (N) = makeString(["%s%s%s__pool", N, "minRedeemAmount"], c)
138+func am (O) = makeString(["%s%s%s__pool", O, "minRedeemAmount"], c)
137139
138140
139-func am (N) = split(valueOrErrorMessage(getString(this, M(N)), ("No DEFO Asset config present for " + N)), c)
141+func an (O) = split(valueOrErrorMessage(getString(this, N(O)), ("No DEFO Asset config present for " + O)), c)
140142
141143
142-let an = 1000000
144+let ao = 1000000
143145
144-let ao = addressFromStringValue(valueOrErrorMessage(getString(this, z), "No neutrino contract specified."))
146+let ap = addressFromStringValue(valueOrErrorMessage(getString(this, A), "No neutrino contract specified."))
145147
146-let ap = valueOrErrorMessage(getString(ao, H), "No USDN asset id found.")
148+let aq = valueOrErrorMessage(getString(ap, I), "No USDN asset id found.")
147149
148-let aq = fromBase58String(ap)
150+let ar = fromBase58String(aq)
149151
150-let ar = fromBase58String(valueOrErrorMessage(getString(ao, I), "No NSBT asset id found"))
152+let as = fromBase58String(valueOrErrorMessage(getString(ap, J), "No NSBT asset id found"))
151153
152-let as = valueOrErrorMessage(getInteger(this, B), "Minimum pool funding amount is not specified.")
154+let at = valueOrErrorMessage(getInteger(this, C), "Minimum pool funding amount is not specified.")
153155
154-let at = "PROPOSED"
156+let au = "PROPOSED"
155157
156-let au = "READY"
158+let av = "READY"
157159
158-let av = "ISSUED"
160+let aw = "ISSUED"
159161
160-let aw = $Tuple3(at, au, av)
162+let ax = $Tuple3(au, av, aw)
161163
162-let ax = fromBase58String(valueOrErrorMessage(getString(this, D), "No debt token found"))
164+let ay = fromBase58String(valueOrErrorMessage(getString(this, E), "No debt token found"))
163165
164-let ay = valueOrElse(getInteger(this, E), 0)
166+let az = valueOrElse(getInteger(this, F), 0)
165167
166-let az = addressFromStringValue(getStringValue(ao, J))
168+let aA = addressFromStringValue(getStringValue(ap, K))
167169
168-func aA (aB) = {
169- let aC = makeString(["rpd_balance", ap, aB], "_")
170- valueOrElse(getInteger(az, aC), 0)
170+func aB (aC) = {
171+ let aD = makeString(["rpd_balance", aq, aC], "_")
172+ valueOrElse(getInteger(aA, aD), 0)
171173 }
172174
173175
174-func aD (aE) = valueOrElse(getString(this, Z(aE)), "")
176+func aE (aF) = valueOrElse(getString(this, aa(aF)), "")
175177
176178
177-func aF (aE) = valueOrErrorMessage(getString(this, Z(aE)), (("Cannot find asset address by " + aE) + " code"))
179+func aG (aF) = valueOrErrorMessage(getString(this, aa(aF)), (("Cannot find asset address by " + aF) + " code"))
178180
179181
180-func aG (aH) = aH[d]
182+func aH (aI) = aI[d]
181183
182184
183-func aI (aH) = aH[e]
185+func aJ (aI) = aI[e]
184186
185187
186-func aJ (aH) = aH[f]
188+func aK (aI) = aI[f]
187189
188190
189-func aK (aH) = parseIntValue(aH[g])
191+func aL (aI) = parseIntValue(aI[g])
190192
191193
192-func aL (aH) = aH[h]
194+func aM (aI) = aI[h]
193195
194196
195-func aM (aH) = parseIntValue(aH[i])
197+func aN (aI) = parseIntValue(aI[i])
196198
197199
198-func aN (aH) = parseIntValue(aH[j])
200+func aO (aI) = parseIntValue(aI[j])
199201
200202
201-func aO (aH) = aH[k]
203+func aP (aI) = aI[k]
202204
203205
204-func aP (aH) = parseIntValue(aH[l])
206+func aQ (aI) = parseIntValue(aI[l])
205207
206208
207-func aQ (aH) = parseIntValue(aH[m])
209+func aR (aI) = parseIntValue(aI[m])
208210
209211
210-func aR (aH) = parseIntValue(aH[n])
212+func aS (aI) = parseIntValue(aI[n])
211213
212214
213-func aS (aH) = parseIntValue(aH[o])
215+func aT (aI) = parseIntValue(aI[o])
214216
215217
216-func aT (aH) = parseIntValue(aH[p])
218+func aU (aI) = parseIntValue(aI[p])
217219
218220
219-func aU (aH) = parseIntValue(aH[q])
221+func aV (aI) = parseIntValue(aI[q])
220222
221223
222-func aV (aH) = parseIntValue(aH[r])
224+func aW (aI) = parseIntValue(aI[r])
223225
224226
225-func aW (aH) = parseIntValue(aH[s])
227+func aX (aI) = parseIntValue(aI[s])
226228
227229
228-func aX (N) = valueOrElse(getInteger(this, U(N)), 0)
230+func aY (aI) = parseIntValue(aI[y])
229231
230232
231-func aY (N) = valueOrElse(getInteger(this, V(N)), 0)
233+func aZ (O) = valueOrElse(getInteger(this, V(O)), 0)
232234
233235
234-func aZ (N) = valueOrElse(getInteger(this, W(N)), 0)
236+func ba (O) = valueOrElse(getInteger(this, W(O)), 0)
235237
236238
237-func ba (N) = valueOrElse(getInteger(this, X(N)), 0)
239+func bb (O) = valueOrElse(getInteger(this, X(O)), 0)
238240
239241
240-func bb (N) = valueOrElse(getString(this, Y(N)), "")
242+func bc (O) = valueOrElse(getInteger(this, Y(O)), 0)
241243
242244
243-func bc (N,ad) = valueOrElse(getInteger(this, ac(N, ad)), 0)
245+func bd (O) = valueOrElse(getString(this, Z(O)), "")
244246
245247
246-func bd (N,ad) = valueOrElse(getInteger(this, ae(N, ad)), 0)
248+func be (O,ae) = valueOrElse(getInteger(this, ad(O, ae)), 0)
247249
248250
249-func be (N,ad) = valueOrElse(getInteger(this, af(N, ad)), 0)
251+func bf (O,ae) = valueOrElse(getInteger(this, af(O, ae)), 0)
250252
251253
252-func bf (N,ad) = valueOrElse(getInteger(this, ag(N, ad)), 0)
254+func bg (O,ae) = valueOrElse(getInteger(this, ag(O, ae)), 0)
253255
254256
255-func bg (bh,S) = valueOrErrorMessage(getInteger(bh, T(S)), "No Asset price found")
257+func bh (O,ae) = valueOrElse(getInteger(this, ah(O, ae)), 0)
256258
257259
258-func bi (N) = valueOrElse(getInteger(this, aj(N)), 0)
260+func bi (bj,T) = valueOrErrorMessage(getInteger(bj, U(T)), "No Asset price found")
259261
260262
261-func bj (S,ab,aw,bk,bl,bm,bn,bh,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d%d%s%s%d%d%d", S, ab, aw, toString(bk), bl, toString(bm), toString(bn), bh, toString(bo), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bu), toString(bv), bw, bx, by, bz, bA], "__")
263+func bk (O) = valueOrElse(getInteger(this, ak(O)), 0)
262264
263265
264-func bB (bC,bD) = {
265- let bE = aG(bD)
266- let bF = aI(bD)
267- let bG = aK(bD)
268- let bH = aL(bD)
269- let bI = aM(bD)
270- let bJ = aN(bD)
271- let bK = aO(bD)
272- let bL = aP(bD)
273- let bM = aQ(bD)
274- let bN = aR(bD)
275- let bO = aS(bD)
276- let bP = aT(bD)
277- let bQ = aU(bD)
278- let bR = aV(bD)
279- let bv = aW(bD)
280- bj(bE, bF, bC, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bv, bD[t], bD[u], bD[v], bD[w], bD[x])
266+func bl (T,ac,ax,bm,bn,bo,bp,bj,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA,bB,bC,bD) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d%d%s%s%d%d%d", T, ac, ax, toString(bm), bn, toString(bo), toString(bp), bj, toString(bq), toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), by, bz, bA, bB, bC, bD], "__")
267+
268+
269+func bE (bF,bG) = {
270+ let bH = aH(bG)
271+ let bI = aJ(bG)
272+ let bJ = aL(bG)
273+ let bK = aM(bG)
274+ let bL = aN(bG)
275+ let bM = aO(bG)
276+ let bN = aP(bG)
277+ let bO = aQ(bG)
278+ let bP = aR(bG)
279+ let bQ = aS(bG)
280+ let bR = aT(bG)
281+ let bS = aU(bG)
282+ let bT = aV(bG)
283+ let bU = aW(bG)
284+ let bx = aX(bG)
285+ bl(bH, bI, bF, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bT, bU, bx, bG[t], bG[u], bG[v], bG[w], bG[x], bG[y])
281286 }
282287
283288
284-func bS (S,ad) = {
285- let bT = aF(S)
286- let N = addressFromStringValue(bT)
287- let bD = am(bT)
288- let bU = aI(bD)
289- let ab = fromBase58String(bU)
290- let bV = valueOrElse(getInteger(this, W(bT)), 0)
291- let bW = valueOrElse(getInteger(this, X(bT)), 0)
292- let bX = aj(bT)
293- let bY = valueOrElse(getInteger(this, bX), 0)
294- let bZ = aA(bT)
295- let ca = assetBalance(N, aq)
296- let cb = (ay - assetBalance(N, ax))
297- let cc = (((bZ + ca) - bY) + cb)
298- let cd = (cc - bV)
299- let ce = assetBalance(N, ab)
300- let cf = valueOrErrorMessage(assetInfo(ab), ("Cannot find asset by id " + bU)).quantity
301- let cg = (cf - ce)
302- let bh = addressFromStringValue(aO(bD))
303- let ch = bg(bh, S)
304- let ci = fraction((an + aM(bD)), cg, an)
305- let cj = fraction(ci, an, ch)
306- let ck = bd(bT, ad)
307- let cl = ac(bT, ad)
308- let cm = valueOrElse(getInteger(this, cl), 0)
309- let cn = be(bT, ad)
310- let co = (cd - cj)
311- let cp = fraction(cm, an, bV)
312- let cq = fraction(ck, an, bW)
313- let cr = if ((co >= 0))
289+func bV (T,ae) = {
290+ let bW = aG(T)
291+ let O = addressFromStringValue(bW)
292+ let bG = an(bW)
293+ let bX = aJ(bG)
294+ let ac = fromBase58String(bX)
295+ let bY = valueOrElse(getInteger(this, X(bW)), 0)
296+ let bZ = valueOrElse(getInteger(this, Y(bW)), 0)
297+ let ca = ak(bW)
298+ let cb = valueOrElse(getInteger(this, ca), 0)
299+ let cc = aB(bW)
300+ let cd = assetBalance(O, ar)
301+ let ce = (az - assetBalance(O, ay))
302+ let cf = (((cc + cd) - cb) + ce)
303+ let cg = (cf - bY)
304+ let ch = assetBalance(O, ac)
305+ let ci = valueOrErrorMessage(assetInfo(ac), ("Cannot find asset by id " + bX)).quantity
306+ let cj = (ci - ch)
307+ let bj = addressFromStringValue(aP(bG))
308+ let ck = bi(bj, T)
309+ let cl = fraction((ao + aN(bG)), cj, ao)
310+ let cm = fraction(cl, ao, ck)
311+ let cn = bf(bW, ae)
312+ let co = ad(bW, ae)
313+ let cp = valueOrElse(getInteger(this, co), 0)
314+ let cq = bg(bW, ae)
315+ let cr = (cg - cm)
316+ let cs = fraction(cp, ao, bY)
317+ let ct = fraction(cn, ao, bZ)
318+ let cu = if ((cr >= 0))
314319 then 0
315- else max([cp, cq])
316- let cs = if ((co >= 0))
317- then cm
318- else (fraction(cr, co, an) + cm)
319- let ct = (height + aV(bD))
320- $Tuple8(bT, cs, bY, bV, cm, ct, cn, makeString([bT, bU, ad, toString(bZ), toString(ca), toString(cc), toString(bV), toString(bW), toString(cd), toString(cg), toString(ch), toString(ci), toString(ck), toString(cm), toString(cn), toString(co), toString(cp), toString(cq), toString(cr), toString(cs)], c))
320+ else max([cs, ct])
321+ let cv = if ((cr >= 0))
322+ then cp
323+ else (fraction(cu, cr, ao) + cp)
324+ let cw = (height + aW(bG))
325+ $Tuple8(bW, cv, cb, bY, cp, cw, cq, makeString([bW, bX, ae, toString(cc), toString(cd), toString(cf), toString(bY), toString(bZ), toString(cg), toString(cj), toString(ck), toString(cl), toString(cn), toString(cp), toString(cq), toString(cr), toString(cs), toString(ct), toString(cu), toString(cv)], c))
321326 }
322327
323328
324-@Callable(cu)
325-func init (cv,cw,cx,cy,cz,cA) = if ((toBase58String(cu.callerPublicKey) != y))
329+@Callable(cx)
330+func init (cy,cz,cA,cB,cC,cD) = if ((toBase58String(cx.callerPublicKey) != z))
326331 then throw("Only Admin can perform contract operation.")
327- else if ((a(C) == true))
332+ else if ((a(D) == true))
328333 then throw("Contract was already initialized.")
329334 else {
330- let cB = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
331- let cC = calculateAssetId(cB)
332-[StringEntry(z, cv), StringEntry(A, cw), IntegerEntry(B, cx), IntegerEntry(E, cy), StringEntry(D, toBase58String(cC)), StringEntry(F, cz), StringEntry(G, cA), BooleanEntry(C, true), cB, Burn(cC, 1)]
335+ let cE = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
336+ let cF = calculateAssetId(cE)
337+[StringEntry(A, cy), StringEntry(B, cz), IntegerEntry(C, cA), IntegerEntry(F, cB), StringEntry(E, toBase58String(cF)), StringEntry(G, cC), StringEntry(H, cD), BooleanEntry(D, true), cE, Burn(cF, 1)]
333338 }
334339
335340
336341
337-@Callable(cu)
338-func proposeAsset (S,bn,bh,bp) = {
339- let bl = ap
340- let bk = an
341- let bq = 0
342- let br = 0
343- let bo = (1 * an)
344- let bu = 0
345- let bs = 2000
346- let bt = 2000
347- let bv = 15000
348- let bm = 0
349- let cD = 500000
350- let cE = (1 * an)
351- let cF = (10 * an)
352- let cG = (1 * an)
353- let cH = 0
354- if ((toBase58String(cu.callerPublicKey) != y))
342+@Callable(cx)
343+func proposeAsset (T,bp,bj,br) = {
344+ let bn = aq
345+ let bm = ao
346+ let bs = 0
347+ let bt = 0
348+ let bq = (1 * ao)
349+ let bw = 0
350+ let bu = 2750
351+ let bv = 2750
352+ let bx = 15000
353+ let bo = 0
354+ let cG = 500000
355+ let cH = (1 * ao)
356+ let cI = (10 * ao)
357+ let cJ = (1 * ao)
358+ let cK = 500
359+ let cL = 2750
360+ if ((toBase58String(cx.callerPublicKey) != z))
355361 then throw("Only Admin can perform contract operation.")
356- else if ((a(C) == false))
362+ else if ((a(D) == false))
357363 then throw("Contract is not yet ready.")
358- else if ((fromBase58String(bl) != aq))
364+ else if ((fromBase58String(bn) != ar))
359365 then throw("Baking asset id could be USDN only.")
360- else if ((aD(S) != ""))
361- then throw((("Asset with passed code " + S) + " has already been proposed."))
362- else if ((as > bn))
363- then throw(("Minimum pool amount should be greater or equals to " + toString(as)))
364- else if (if (if (if (if (if (if ((0 > bm))
365- then true
366- else (0 > bo))
367- then true
368- else (0 > bp))
366+ else if ((aE(T) != ""))
367+ then throw((("Asset with passed code " + T) + " has already been proposed."))
368+ else if ((at > bp))
369+ then throw(("Minimum pool amount should be greater or equals to " + toString(at)))
370+ else if (if (if (if (if (if (if ((0 > bo))
369371 then true
370372 else (0 > bq))
371373 then true
374376 else (0 > bs))
375377 then true
376378 else (0 > bt))
379+ then true
380+ else (0 > bu))
381+ then true
382+ else (0 > bv))
377383 then throw("One of the passed parameters is invalid.")
378384 else {
379- let cI = valueOrErrorMessage(addressFromStringValue(bh), "Passed Price Oracle Address is not valid.")
380- let cJ = valueOrErrorMessage(getString(this, R(S)), ("Unsupported currency - there is no preinitialized data for " + S))
381- let cK = split(cJ, c)
382- let cL = cK[O]
383- let cM = cK[P]
384- let cN = cK[Q]
385- let N = addressFromPublicKey(fromBase58String(cL))
386- let bT = toString(N)
387- let cO = valueOrErrorMessage(getString(N, K), "No defo asset ID found.")
388-[StringEntry(M(bT), bj(S, cO, aw._1, bk, bl, bm, bn, bh, bo, bp, bq, br, bs, bt, bu, bv, cL, cM, toString(cD), toString(cE), toString(cH))), StringEntry(Z(S), bT), StringEntry(Y(bT), cN), IntegerEntry(U(bT), height), StringEntry(aa(cO), bT), IntegerEntry(ak(bT), cF), IntegerEntry(al(bT), cG)]
385+ let cM = valueOrErrorMessage(addressFromStringValue(bj), "Passed Price Oracle Address is not valid.")
386+ let cN = valueOrErrorMessage(getString(this, S(T)), ("Unsupported currency - there is no preinitialized data for " + T))
387+ let cO = split(cN, c)
388+ let cP = cO[P]
389+ let cQ = cO[Q]
390+ let cR = cO[R]
391+ let O = addressFromPublicKey(fromBase58String(cP))
392+ let bW = toString(O)
393+ let cS = valueOrErrorMessage(getString(O, L), "No defo asset ID found.")
394+[StringEntry(N(bW), bl(T, cS, ax._1, bm, bn, bo, bp, bj, bq, br, bs, bt, bu, bv, bw, bx, cP, cQ, toString(cG), toString(cH), toString(cK), toString(cL))), StringEntry(aa(T), bW), StringEntry(Z(bW), cR), IntegerEntry(V(bW), height), StringEntry(ab(cS), bW), IntegerEntry(al(bW), cI), IntegerEntry(am(bW), cJ)]
389395 }
390396 }
391397
392398
393399
394-@Callable(cu)
395-func fundLiquidityPool (S) = {
396- let bT = aF(S)
397- let bD = am(bT)
398- let cP = value(cu.payments[0])
399- let ad = toString(cu.caller)
400- let cQ = bc(bT, ad)
401- let cF = valueOrElse(getInteger(this, ak(bT)), (10 * an))
402- if ((a(C) == false))
400+@Callable(cx)
401+func fundLiquidityPool (T) = {
402+ let bW = aG(T)
403+ let bG = an(bW)
404+ let cT = value(cx.payments[0])
405+ let ae = toString(cx.caller)
406+ let cU = be(bW, ae)
407+ let cI = valueOrElse(getInteger(this, al(bW)), (10 * ao))
408+ if ((a(D) == false))
403409 then throw("Contract is not yet ready.")
404- else if ((cP.assetId != aq))
410+ else if ((cT.assetId != ar))
405411 then throw("Liquidity pool could be funded with USDN only.")
406- else if (if ((cF > cQ))
407- then (cF > cP.amount)
412+ else if (if ((cI > cU))
413+ then (cI > cT.amount)
408414 else false)
409- then throw(("Attached payment amount is less tha min allowed: " + toString(cF)))
415+ then throw(("Attached payment amount is less tha min allowed: " + toString(cI)))
410416 else {
411- let cR = (cP.amount + aZ(bT))
412- let cS = ba(bT)
413- let cT = bd(bT, ad)
414- let cU = aJ(bD)
415- let cV = if (if ((cU == at))
416- then (cR >= aN(bD))
417+ let cV = (cT.amount + bb(bW))
418+ let cW = bc(bW)
419+ let cX = bf(bW, ae)
420+ let cY = aK(bG)
421+ let cZ = if (if ((cY == au))
422+ then (cV >= aO(bG))
417423 else false)
418- then au
419- else cU
420- let cW = (cQ + cP.amount)
421- let cX = if ((cU == av))
422- then [ScriptTransfer(addressFromStringValue(bT), cP.amount, aq)]
424+ then av
425+ else cY
426+ let da = (cU + cT.amount)
427+ let db = if ((cY == aw))
428+ then [ScriptTransfer(addressFromStringValue(bW), cT.amount, ar)]
423429 else nil
424- ([IntegerEntry(ac(bT, ad), cW), IntegerEntry(ae(bT, ad), max([cW, cT])), IntegerEntry(W(bT), cR), IntegerEntry(X(bT), max([cS, cR])), StringEntry(M(bT), bB(cV, bD))] ++ cX)
430+ ([IntegerEntry(ad(bW, ae), da), IntegerEntry(af(bW, ae), max([da, cX])), IntegerEntry(X(bW), cV), IntegerEntry(Y(bW), max([cW, cV])), StringEntry(N(bW), bE(cZ, bG))] ++ db)
425431 }
426432 }
427433
428434
429435
430-@Callable(cu)
431-func activateAsset (S) = {
432- let N = aD(S)
433- let bD = am(N)
434- let cY = aZ(N)
435- let cZ = aJ(bD)
436- if ((toBase58String(cu.callerPublicKey) != y))
436+@Callable(cx)
437+func activateAsset (T) = {
438+ let O = aE(T)
439+ let bG = an(O)
440+ let dc = bb(O)
441+ let dd = aK(bG)
442+ if ((toBase58String(cx.callerPublicKey) != z))
437443 then throw("Only Admin can perform contract operation.")
438- else if ((a(C) == false))
444+ else if ((a(D) == false))
439445 then throw("Contract is not yet ready.")
440- else if ((cZ != aw._2))
441- then throw((("Asset is not in READY status. Current status is " + cZ) + "."))
442- else if ((N == ""))
443- then throw((("Cannot find asset " + S) + "."))
444- else if ((as > cY))
445- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(cY)) + ") is less than required (") + toString(as)) + ")"))
446+ else if ((dd != ax._2))
447+ then throw((("Asset is not in READY status. Current status is " + dd) + "."))
448+ else if ((O == ""))
449+ then throw((("Cannot find asset " + T) + "."))
450+ else if ((at > dc))
451+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(dc)) + ") is less than required (") + toString(at)) + ")"))
446452 else {
447- let cB = Reissue(ax, ay, true)
448-[IntegerEntry(V(N), height), StringEntry(M(N), bB(aw._3, bD)), cB, ScriptTransfer(addressFromStringValue(N), cY, aq), ScriptTransfer(addressFromStringValue(N), ay, ax)]
453+ let cE = Reissue(ay, az, true)
454+[IntegerEntry(W(O), height), StringEntry(N(O), bE(ax._3, bG)), cE, ScriptTransfer(addressFromStringValue(O), dc, ar), ScriptTransfer(addressFromStringValue(O), az, ay)]
449455 }
450456 }
451457
452458
453459
454-@Callable(cu)
455-func redeemFromPool (S,da) = {
456- let db = toString(cu.caller)
457- let dc = bS(S, db)
458- let bT = dc._1
459- let cs = dc._2
460- let bY = dc._3
461- let bV = dc._4
462- let cm = dc._5
463- let ct = dc._6
464- let cn = dc._7
465- let dd = dc._8
466- let de = ah(bT, db, ct)
467- let cG = valueOrElse(getInteger(this, al(bT)), (1 * an))
468- if ((a(C) == false))
460+@Callable(cx)
461+func redeemFromPool (T,de) = {
462+ let df = toString(cx.caller)
463+ let dg = bV(T, df)
464+ let bW = dg._1
465+ let cv = dg._2
466+ let cb = dg._3
467+ let bY = dg._4
468+ let cp = dg._5
469+ let cw = dg._6
470+ let cq = dg._7
471+ let dh = dg._8
472+ let di = ai(bW, df, cw)
473+ let cJ = valueOrElse(getInteger(this, am(bW)), (1 * ao))
474+ if ((a(D) == false))
469475 then throw("Contract is not yet ready.")
470- else if ((0 >= da))
471- then throw((("Cannot find pool maker by address " + db) + " or amount passed is not correct."))
472- else if ((0 >= cm))
476+ else if ((0 >= de))
477+ then throw((("Cannot find pool maker by address " + df) + " or amount passed is not correct."))
478+ else if ((0 >= cp))
473479 then throw("Pool maker has no funds")
474- else if ((0 >= cs))
480+ else if ((0 >= cv))
475481 then throw("All pool maker funds are locked")
476- else if ((da > cs))
477- then throw(((("Allowed amount to redeem is less then requested: allowedAmountToRedeem=" + toString(cs)) + " requested=") + toString(da)))
478- else if ((cG > da))
482+ else if ((de > cv))
483+ then throw(((("Allowed amount to redeem is less then requested: allowedAmountToRedeem=" + toString(cv)) + " requested=") + toString(de)))
484+ else if ((cJ > de))
479485 then throw("Redeem amount is less then min allowed")
480- else if ((cn > 0))
486+ else if ((cq > 0))
481487 then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
482- else if (isDefined(getInteger(this, de)))
488+ else if (isDefined(getInteger(this, di)))
483489 then throw((("Pool maker has already initiated redemption for " + toString(height)) + " height"))
484- else [IntegerEntry(aj(bT), (bY + da)), IntegerEntry(W(bT), (bV - da)), IntegerEntry(ac(bT, db), (cm - da)), IntegerEntry(de, da), IntegerEntry(af(bT, db), da), IntegerEntry(ag(bT, db), ct), StringEntry("%s%s_trace_redeemFromPool", dd)]
490+ else [IntegerEntry(ak(bW), (cb + de)), IntegerEntry(X(bW), (bY - de)), IntegerEntry(ad(bW, df), (cp - de)), IntegerEntry(di, de), IntegerEntry(ag(bW, df), de), IntegerEntry(ah(bW, df), cw), StringEntry("%s%s_trace_redeemFromPool", dh)]
485491 }
486492
487493
488494
489-@Callable(cu)
490-func getMaxAllowedAmountToRedeem (S,ad) = {
491- let dc = bS(S, ad)
492- let bT = dc._1
493- let cs = dc._2
494- let bY = dc._3
495- let bV = dc._4
496- let cm = dc._5
497- let ct = dc._6
498- let cn = dc._7
499- let dd = dc._8
500- throw(((((((((("{" + "allowedAmountToRedeem: ") + toString(cs)) + ", assetCode: ") + S) + ", poolMaker: ") + ad) + ", trace: ") + dd) + "}"))
495+@Callable(cx)
496+func getMaxAllowedAmountToRedeem (T,ae) = {
497+ let dg = bV(T, ae)
498+ let bW = dg._1
499+ let cv = dg._2
500+ let cb = dg._3
501+ let bY = dg._4
502+ let cp = dg._5
503+ let cw = dg._6
504+ let cq = dg._7
505+ let dh = dg._8
506+ throw(((((((((("{" + "allowedAmountToRedeem: ") + toString(cv)) + ", assetCode: ") + T) + ", poolMaker: ") + ae) + ", trace: ") + dh) + "}"))
501507 }
502508
503509
504510
505-@Callable(cu)
506-func withdraw (S,ad) = {
507- let bT = aF(S)
508- let N = addressFromStringValue(bT)
509- let df = af(bT, ad)
510- let dg = valueOrElse(getInteger(this, df), 0)
511- let dh = ag(bT, ad)
512- let ct = valueOrElse(getInteger(this, dh), 0)
513- let bX = aj(bT)
514- let bY = valueOrElse(getInteger(this, bX), 0)
515- let de = ah(bT, ad, ct)
516- if ((a(C) == false))
511+@Callable(cx)
512+func withdraw (T,ae) = {
513+ let bW = aG(T)
514+ let O = addressFromStringValue(bW)
515+ let dj = ag(bW, ae)
516+ let dk = valueOrElse(getInteger(this, dj), 0)
517+ let dl = ah(bW, ae)
518+ let cw = valueOrElse(getInteger(this, dl), 0)
519+ let ca = ak(bW)
520+ let cb = valueOrElse(getInteger(this, ca), 0)
521+ let di = ai(bW, ae, cw)
522+ if ((a(D) == false))
517523 then throw("Contract is not yet ready.")
518- else if (!(isDefined(getInteger(N, de))))
524+ else if (!(isDefined(getInteger(O, di))))
519525 then throw("Need to transfer liquidity from asset account first")
520- else if ((0 >= dg))
521- then throw((("Cannot find pool maker by address " + ad) + " or no locked amount."))
522- else if ((ct > height))
523- then throw((("Please wait " + toString(ct)) + " before withdraw."))
524- else [IntegerEntry(df, 0), IntegerEntry(bX, (bY - dg)), IntegerEntry(dh, 0), ScriptTransfer(addressFromStringValue(ad), dg, aq)]
526+ else if ((0 >= dk))
527+ then throw((("Cannot find pool maker by address " + ae) + " or no locked amount."))
528+ else if ((cw > height))
529+ then throw((("Please wait " + toString(cw)) + " before withdraw."))
530+ else [IntegerEntry(dj, 0), IntegerEntry(ca, (cb - dk)), IntegerEntry(dl, 0), ScriptTransfer(addressFromStringValue(ae), dk, ar)]
525531 }
526532
527533
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = valueOrElse(getBoolean(this, b), false)
55
66
77 let c = "__"
88
99 let d = 1
1010
1111 let e = 2
1212
1313 let f = 3
1414
1515 let g = 4
1616
1717 let h = 5
1818
1919 let i = 6
2020
2121 let j = 7
2222
2323 let k = 8
2424
2525 let l = 9
2626
2727 let m = 10
2828
2929 let n = 11
3030
3131 let o = 12
3232
3333 let p = 13
3434
3535 let q = 14
3636
3737 let r = 15
3838
3939 let s = 16
4040
4141 let t = 17
4242
4343 let u = 18
4444
4545 let v = 19
4646
4747 let w = 20
4848
4949 let x = 21
5050
51-let y = "3YSMs2xX38575kQqyWtHEcydU3zfDXqcbiuELRhDhvB8"
51+let y = 22
5252
53-let z = "%s%s__commonConfig__neutrinoContractAddress"
53+let z = "3YSMs2xX38575kQqyWtHEcydU3zfDXqcbiuELRhDhvB8"
5454
55-let A = "%s%s__commonConfig__neutrinoStakingAddress"
55+let A = "%s%s__commonConfig__neutrinoContractAddress"
5656
57-let B = "%s%s__commonConfig__minimumPoolFundingAmount"
57+let B = "%s%s__commonConfig__neutrinoStakingAddress"
5858
59-let C = "%s%s__commonConfig__initialized"
59+let C = "%s%s__commonConfig__minimumPoolFundingAmount"
6060
61-let D = "%s%s__commonConfig__debtAssetId"
61+let D = "%s%s__commonConfig__initialized"
6262
63-let E = "%s%s__commonConfig__debtAssetEtalonBalance"
63+let E = "%s%s__commonConfig__debtAssetId"
6464
65-let F = "%s%s__commonConfig__defoStakingAddress"
65+let F = "%s%s__commonConfig__debtAssetEtalonBalance"
6666
67-let G = "%s%s__commonConfig__defoStakingPacemakerPub"
67+let G = "%s%s__commonConfig__defoStakingAddress"
6868
69-let H = "neutrino_asset_id"
69+let H = "%s%s__commonConfig__defoStakingPacemakerPub"
7070
71-let I = "bond_asset_id"
71+let I = "neutrino_asset_id"
7272
73-let J = "rpd_contract"
73+let J = "bond_asset_id"
7474
75-let K = "%s__defoAssetId"
75+let K = "rpd_contract"
7676
77-let L = "%s__assetScriptTxId"
77+let L = "%s__defoAssetId"
7878
79-func M (N) = (("%s%s%s__defoAsset__" + N) + "__config")
79+let M = "%s__assetScriptTxId"
80+
81+func N (O) = (("%s%s%s__defoAsset__" + O) + "__config")
8082
8183
82-let O = 0
84+let P = 0
8385
84-let P = 1
86+let Q = 1
8587
86-let Q = 2
88+let R = 2
8789
88-func R (S) = ("%s%s__preInitializedAssetData__" + S)
90+func S (T) = ("%s%s__preInitializedAssetData__" + T)
8991
9092
91-func T (S) = ("%s%s__price__" + S)
93+func U (T) = ("%s%s__price__" + T)
9294
9395
94-func U (N) = (("%s%s%s__defoAsset__" + N) + "__initHeight")
96+func V (O) = (("%s%s%s__defoAsset__" + O) + "__initHeight")
9597
9698
97-func V (N) = (("%s%s%s__defoAsset__" + N) + "__activateHeight")
99+func W (O) = (("%s%s%s__defoAsset__" + O) + "__activateHeight")
98100
99101
100-func W (N) = (("%s%s%s__defoAsset__" + N) + "__currentPool")
102+func X (O) = (("%s%s%s__defoAsset__" + O) + "__currentPool")
101103
102104
103-func X (N) = (("%s%s%s__defoAsset__" + N) + "__maxPool")
105+func Y (O) = (("%s%s%s__defoAsset__" + O) + "__maxPool")
104106
105107
106-func Y (N) = (("%s%s%s__defoAsset__" + N) + "__meta")
108+func Z (O) = (("%s%s%s__defoAsset__" + O) + "__meta")
107109
108110
109-func Z (S) = (("%s%s%s__defoAsset__" + S) + "__addressByAssetCode")
111+func aa (T) = (("%s%s%s__defoAsset__" + T) + "__addressByAssetCode")
110112
111113
112-func aa (ab) = (("%s%s%s__defoAsset__" + ab) + "__addressByAssetId")
114+func ab (ac) = (("%s%s%s__defoAsset__" + ac) + "__addressByAssetId")
113115
114116
115-func ac (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "amount"], c)
117+func ad (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "amount"], c)
116118
117119
118-func ae (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "maxAmount"], c)
120+func af (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "maxAmount"], c)
119121
120122
121-func af (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "lockedAmount"], c)
123+func ag (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "lockedAmount"], c)
122124
123125
124-func ag (N,ad) = makeString(["%s%s%s%s__pool", N, ad, "unlockHeight"], c)
126+func ah (O,ae) = makeString(["%s%s%s%s__pool", O, ae, "unlockHeight"], c)
125127
126128
127-func ah (N,ad,ai) = makeString(["%s%s%s%d%s__pool", N, ad, toString(ai), "liquidityRequest"], c)
129+func ai (O,ae,aj) = makeString(["%s%s%s%d%s__pool", O, ae, toString(aj), "liquidityRequest"], c)
128130
129131
130-func aj (N) = makeString(["%s%s%s__pool", N, "totalLockedAmount"], c)
132+func ak (O) = makeString(["%s%s%s__pool", O, "totalLockedAmount"], c)
131133
132134
133-func ak (N) = makeString(["%s%s%s__pool", N, "minInvestAmount"], c)
135+func al (O) = makeString(["%s%s%s__pool", O, "minInvestAmount"], c)
134136
135137
136-func al (N) = makeString(["%s%s%s__pool", N, "minRedeemAmount"], c)
138+func am (O) = makeString(["%s%s%s__pool", O, "minRedeemAmount"], c)
137139
138140
139-func am (N) = split(valueOrErrorMessage(getString(this, M(N)), ("No DEFO Asset config present for " + N)), c)
141+func an (O) = split(valueOrErrorMessage(getString(this, N(O)), ("No DEFO Asset config present for " + O)), c)
140142
141143
142-let an = 1000000
144+let ao = 1000000
143145
144-let ao = addressFromStringValue(valueOrErrorMessage(getString(this, z), "No neutrino contract specified."))
146+let ap = addressFromStringValue(valueOrErrorMessage(getString(this, A), "No neutrino contract specified."))
145147
146-let ap = valueOrErrorMessage(getString(ao, H), "No USDN asset id found.")
148+let aq = valueOrErrorMessage(getString(ap, I), "No USDN asset id found.")
147149
148-let aq = fromBase58String(ap)
150+let ar = fromBase58String(aq)
149151
150-let ar = fromBase58String(valueOrErrorMessage(getString(ao, I), "No NSBT asset id found"))
152+let as = fromBase58String(valueOrErrorMessage(getString(ap, J), "No NSBT asset id found"))
151153
152-let as = valueOrErrorMessage(getInteger(this, B), "Minimum pool funding amount is not specified.")
154+let at = valueOrErrorMessage(getInteger(this, C), "Minimum pool funding amount is not specified.")
153155
154-let at = "PROPOSED"
156+let au = "PROPOSED"
155157
156-let au = "READY"
158+let av = "READY"
157159
158-let av = "ISSUED"
160+let aw = "ISSUED"
159161
160-let aw = $Tuple3(at, au, av)
162+let ax = $Tuple3(au, av, aw)
161163
162-let ax = fromBase58String(valueOrErrorMessage(getString(this, D), "No debt token found"))
164+let ay = fromBase58String(valueOrErrorMessage(getString(this, E), "No debt token found"))
163165
164-let ay = valueOrElse(getInteger(this, E), 0)
166+let az = valueOrElse(getInteger(this, F), 0)
165167
166-let az = addressFromStringValue(getStringValue(ao, J))
168+let aA = addressFromStringValue(getStringValue(ap, K))
167169
168-func aA (aB) = {
169- let aC = makeString(["rpd_balance", ap, aB], "_")
170- valueOrElse(getInteger(az, aC), 0)
170+func aB (aC) = {
171+ let aD = makeString(["rpd_balance", aq, aC], "_")
172+ valueOrElse(getInteger(aA, aD), 0)
171173 }
172174
173175
174-func aD (aE) = valueOrElse(getString(this, Z(aE)), "")
176+func aE (aF) = valueOrElse(getString(this, aa(aF)), "")
175177
176178
177-func aF (aE) = valueOrErrorMessage(getString(this, Z(aE)), (("Cannot find asset address by " + aE) + " code"))
179+func aG (aF) = valueOrErrorMessage(getString(this, aa(aF)), (("Cannot find asset address by " + aF) + " code"))
178180
179181
180-func aG (aH) = aH[d]
182+func aH (aI) = aI[d]
181183
182184
183-func aI (aH) = aH[e]
185+func aJ (aI) = aI[e]
184186
185187
186-func aJ (aH) = aH[f]
188+func aK (aI) = aI[f]
187189
188190
189-func aK (aH) = parseIntValue(aH[g])
191+func aL (aI) = parseIntValue(aI[g])
190192
191193
192-func aL (aH) = aH[h]
194+func aM (aI) = aI[h]
193195
194196
195-func aM (aH) = parseIntValue(aH[i])
197+func aN (aI) = parseIntValue(aI[i])
196198
197199
198-func aN (aH) = parseIntValue(aH[j])
200+func aO (aI) = parseIntValue(aI[j])
199201
200202
201-func aO (aH) = aH[k]
203+func aP (aI) = aI[k]
202204
203205
204-func aP (aH) = parseIntValue(aH[l])
206+func aQ (aI) = parseIntValue(aI[l])
205207
206208
207-func aQ (aH) = parseIntValue(aH[m])
209+func aR (aI) = parseIntValue(aI[m])
208210
209211
210-func aR (aH) = parseIntValue(aH[n])
212+func aS (aI) = parseIntValue(aI[n])
211213
212214
213-func aS (aH) = parseIntValue(aH[o])
215+func aT (aI) = parseIntValue(aI[o])
214216
215217
216-func aT (aH) = parseIntValue(aH[p])
218+func aU (aI) = parseIntValue(aI[p])
217219
218220
219-func aU (aH) = parseIntValue(aH[q])
221+func aV (aI) = parseIntValue(aI[q])
220222
221223
222-func aV (aH) = parseIntValue(aH[r])
224+func aW (aI) = parseIntValue(aI[r])
223225
224226
225-func aW (aH) = parseIntValue(aH[s])
227+func aX (aI) = parseIntValue(aI[s])
226228
227229
228-func aX (N) = valueOrElse(getInteger(this, U(N)), 0)
230+func aY (aI) = parseIntValue(aI[y])
229231
230232
231-func aY (N) = valueOrElse(getInteger(this, V(N)), 0)
233+func aZ (O) = valueOrElse(getInteger(this, V(O)), 0)
232234
233235
234-func aZ (N) = valueOrElse(getInteger(this, W(N)), 0)
236+func ba (O) = valueOrElse(getInteger(this, W(O)), 0)
235237
236238
237-func ba (N) = valueOrElse(getInteger(this, X(N)), 0)
239+func bb (O) = valueOrElse(getInteger(this, X(O)), 0)
238240
239241
240-func bb (N) = valueOrElse(getString(this, Y(N)), "")
242+func bc (O) = valueOrElse(getInteger(this, Y(O)), 0)
241243
242244
243-func bc (N,ad) = valueOrElse(getInteger(this, ac(N, ad)), 0)
245+func bd (O) = valueOrElse(getString(this, Z(O)), "")
244246
245247
246-func bd (N,ad) = valueOrElse(getInteger(this, ae(N, ad)), 0)
248+func be (O,ae) = valueOrElse(getInteger(this, ad(O, ae)), 0)
247249
248250
249-func be (N,ad) = valueOrElse(getInteger(this, af(N, ad)), 0)
251+func bf (O,ae) = valueOrElse(getInteger(this, af(O, ae)), 0)
250252
251253
252-func bf (N,ad) = valueOrElse(getInteger(this, ag(N, ad)), 0)
254+func bg (O,ae) = valueOrElse(getInteger(this, ag(O, ae)), 0)
253255
254256
255-func bg (bh,S) = valueOrErrorMessage(getInteger(bh, T(S)), "No Asset price found")
257+func bh (O,ae) = valueOrElse(getInteger(this, ah(O, ae)), 0)
256258
257259
258-func bi (N) = valueOrElse(getInteger(this, aj(N)), 0)
260+func bi (bj,T) = valueOrErrorMessage(getInteger(bj, U(T)), "No Asset price found")
259261
260262
261-func bj (S,ab,aw,bk,bl,bm,bn,bh,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d%d%s%s%d%d%d", S, ab, aw, toString(bk), bl, toString(bm), toString(bn), bh, toString(bo), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bu), toString(bv), bw, bx, by, bz, bA], "__")
263+func bk (O) = valueOrElse(getInteger(this, ak(O)), 0)
262264
263265
264-func bB (bC,bD) = {
265- let bE = aG(bD)
266- let bF = aI(bD)
267- let bG = aK(bD)
268- let bH = aL(bD)
269- let bI = aM(bD)
270- let bJ = aN(bD)
271- let bK = aO(bD)
272- let bL = aP(bD)
273- let bM = aQ(bD)
274- let bN = aR(bD)
275- let bO = aS(bD)
276- let bP = aT(bD)
277- let bQ = aU(bD)
278- let bR = aV(bD)
279- let bv = aW(bD)
280- bj(bE, bF, bC, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bv, bD[t], bD[u], bD[v], bD[w], bD[x])
266+func bl (T,ac,ax,bm,bn,bo,bp,bj,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA,bB,bC,bD) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d%d%s%s%d%d%d", T, ac, ax, toString(bm), bn, toString(bo), toString(bp), bj, toString(bq), toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), by, bz, bA, bB, bC, bD], "__")
267+
268+
269+func bE (bF,bG) = {
270+ let bH = aH(bG)
271+ let bI = aJ(bG)
272+ let bJ = aL(bG)
273+ let bK = aM(bG)
274+ let bL = aN(bG)
275+ let bM = aO(bG)
276+ let bN = aP(bG)
277+ let bO = aQ(bG)
278+ let bP = aR(bG)
279+ let bQ = aS(bG)
280+ let bR = aT(bG)
281+ let bS = aU(bG)
282+ let bT = aV(bG)
283+ let bU = aW(bG)
284+ let bx = aX(bG)
285+ bl(bH, bI, bF, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bT, bU, bx, bG[t], bG[u], bG[v], bG[w], bG[x], bG[y])
281286 }
282287
283288
284-func bS (S,ad) = {
285- let bT = aF(S)
286- let N = addressFromStringValue(bT)
287- let bD = am(bT)
288- let bU = aI(bD)
289- let ab = fromBase58String(bU)
290- let bV = valueOrElse(getInteger(this, W(bT)), 0)
291- let bW = valueOrElse(getInteger(this, X(bT)), 0)
292- let bX = aj(bT)
293- let bY = valueOrElse(getInteger(this, bX), 0)
294- let bZ = aA(bT)
295- let ca = assetBalance(N, aq)
296- let cb = (ay - assetBalance(N, ax))
297- let cc = (((bZ + ca) - bY) + cb)
298- let cd = (cc - bV)
299- let ce = assetBalance(N, ab)
300- let cf = valueOrErrorMessage(assetInfo(ab), ("Cannot find asset by id " + bU)).quantity
301- let cg = (cf - ce)
302- let bh = addressFromStringValue(aO(bD))
303- let ch = bg(bh, S)
304- let ci = fraction((an + aM(bD)), cg, an)
305- let cj = fraction(ci, an, ch)
306- let ck = bd(bT, ad)
307- let cl = ac(bT, ad)
308- let cm = valueOrElse(getInteger(this, cl), 0)
309- let cn = be(bT, ad)
310- let co = (cd - cj)
311- let cp = fraction(cm, an, bV)
312- let cq = fraction(ck, an, bW)
313- let cr = if ((co >= 0))
289+func bV (T,ae) = {
290+ let bW = aG(T)
291+ let O = addressFromStringValue(bW)
292+ let bG = an(bW)
293+ let bX = aJ(bG)
294+ let ac = fromBase58String(bX)
295+ let bY = valueOrElse(getInteger(this, X(bW)), 0)
296+ let bZ = valueOrElse(getInteger(this, Y(bW)), 0)
297+ let ca = ak(bW)
298+ let cb = valueOrElse(getInteger(this, ca), 0)
299+ let cc = aB(bW)
300+ let cd = assetBalance(O, ar)
301+ let ce = (az - assetBalance(O, ay))
302+ let cf = (((cc + cd) - cb) + ce)
303+ let cg = (cf - bY)
304+ let ch = assetBalance(O, ac)
305+ let ci = valueOrErrorMessage(assetInfo(ac), ("Cannot find asset by id " + bX)).quantity
306+ let cj = (ci - ch)
307+ let bj = addressFromStringValue(aP(bG))
308+ let ck = bi(bj, T)
309+ let cl = fraction((ao + aN(bG)), cj, ao)
310+ let cm = fraction(cl, ao, ck)
311+ let cn = bf(bW, ae)
312+ let co = ad(bW, ae)
313+ let cp = valueOrElse(getInteger(this, co), 0)
314+ let cq = bg(bW, ae)
315+ let cr = (cg - cm)
316+ let cs = fraction(cp, ao, bY)
317+ let ct = fraction(cn, ao, bZ)
318+ let cu = if ((cr >= 0))
314319 then 0
315- else max([cp, cq])
316- let cs = if ((co >= 0))
317- then cm
318- else (fraction(cr, co, an) + cm)
319- let ct = (height + aV(bD))
320- $Tuple8(bT, cs, bY, bV, cm, ct, cn, makeString([bT, bU, ad, toString(bZ), toString(ca), toString(cc), toString(bV), toString(bW), toString(cd), toString(cg), toString(ch), toString(ci), toString(ck), toString(cm), toString(cn), toString(co), toString(cp), toString(cq), toString(cr), toString(cs)], c))
320+ else max([cs, ct])
321+ let cv = if ((cr >= 0))
322+ then cp
323+ else (fraction(cu, cr, ao) + cp)
324+ let cw = (height + aW(bG))
325+ $Tuple8(bW, cv, cb, bY, cp, cw, cq, makeString([bW, bX, ae, toString(cc), toString(cd), toString(cf), toString(bY), toString(bZ), toString(cg), toString(cj), toString(ck), toString(cl), toString(cn), toString(cp), toString(cq), toString(cr), toString(cs), toString(ct), toString(cu), toString(cv)], c))
321326 }
322327
323328
324-@Callable(cu)
325-func init (cv,cw,cx,cy,cz,cA) = if ((toBase58String(cu.callerPublicKey) != y))
329+@Callable(cx)
330+func init (cy,cz,cA,cB,cC,cD) = if ((toBase58String(cx.callerPublicKey) != z))
326331 then throw("Only Admin can perform contract operation.")
327- else if ((a(C) == true))
332+ else if ((a(D) == true))
328333 then throw("Contract was already initialized.")
329334 else {
330- let cB = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
331- let cC = calculateAssetId(cB)
332-[StringEntry(z, cv), StringEntry(A, cw), IntegerEntry(B, cx), IntegerEntry(E, cy), StringEntry(D, toBase58String(cC)), StringEntry(F, cz), StringEntry(G, cA), BooleanEntry(C, true), cB, Burn(cC, 1)]
335+ let cE = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
336+ let cF = calculateAssetId(cE)
337+[StringEntry(A, cy), StringEntry(B, cz), IntegerEntry(C, cA), IntegerEntry(F, cB), StringEntry(E, toBase58String(cF)), StringEntry(G, cC), StringEntry(H, cD), BooleanEntry(D, true), cE, Burn(cF, 1)]
333338 }
334339
335340
336341
337-@Callable(cu)
338-func proposeAsset (S,bn,bh,bp) = {
339- let bl = ap
340- let bk = an
341- let bq = 0
342- let br = 0
343- let bo = (1 * an)
344- let bu = 0
345- let bs = 2000
346- let bt = 2000
347- let bv = 15000
348- let bm = 0
349- let cD = 500000
350- let cE = (1 * an)
351- let cF = (10 * an)
352- let cG = (1 * an)
353- let cH = 0
354- if ((toBase58String(cu.callerPublicKey) != y))
342+@Callable(cx)
343+func proposeAsset (T,bp,bj,br) = {
344+ let bn = aq
345+ let bm = ao
346+ let bs = 0
347+ let bt = 0
348+ let bq = (1 * ao)
349+ let bw = 0
350+ let bu = 2750
351+ let bv = 2750
352+ let bx = 15000
353+ let bo = 0
354+ let cG = 500000
355+ let cH = (1 * ao)
356+ let cI = (10 * ao)
357+ let cJ = (1 * ao)
358+ let cK = 500
359+ let cL = 2750
360+ if ((toBase58String(cx.callerPublicKey) != z))
355361 then throw("Only Admin can perform contract operation.")
356- else if ((a(C) == false))
362+ else if ((a(D) == false))
357363 then throw("Contract is not yet ready.")
358- else if ((fromBase58String(bl) != aq))
364+ else if ((fromBase58String(bn) != ar))
359365 then throw("Baking asset id could be USDN only.")
360- else if ((aD(S) != ""))
361- then throw((("Asset with passed code " + S) + " has already been proposed."))
362- else if ((as > bn))
363- then throw(("Minimum pool amount should be greater or equals to " + toString(as)))
364- else if (if (if (if (if (if (if ((0 > bm))
365- then true
366- else (0 > bo))
367- then true
368- else (0 > bp))
366+ else if ((aE(T) != ""))
367+ then throw((("Asset with passed code " + T) + " has already been proposed."))
368+ else if ((at > bp))
369+ then throw(("Minimum pool amount should be greater or equals to " + toString(at)))
370+ else if (if (if (if (if (if (if ((0 > bo))
369371 then true
370372 else (0 > bq))
371373 then true
372374 else (0 > br))
373375 then true
374376 else (0 > bs))
375377 then true
376378 else (0 > bt))
379+ then true
380+ else (0 > bu))
381+ then true
382+ else (0 > bv))
377383 then throw("One of the passed parameters is invalid.")
378384 else {
379- let cI = valueOrErrorMessage(addressFromStringValue(bh), "Passed Price Oracle Address is not valid.")
380- let cJ = valueOrErrorMessage(getString(this, R(S)), ("Unsupported currency - there is no preinitialized data for " + S))
381- let cK = split(cJ, c)
382- let cL = cK[O]
383- let cM = cK[P]
384- let cN = cK[Q]
385- let N = addressFromPublicKey(fromBase58String(cL))
386- let bT = toString(N)
387- let cO = valueOrErrorMessage(getString(N, K), "No defo asset ID found.")
388-[StringEntry(M(bT), bj(S, cO, aw._1, bk, bl, bm, bn, bh, bo, bp, bq, br, bs, bt, bu, bv, cL, cM, toString(cD), toString(cE), toString(cH))), StringEntry(Z(S), bT), StringEntry(Y(bT), cN), IntegerEntry(U(bT), height), StringEntry(aa(cO), bT), IntegerEntry(ak(bT), cF), IntegerEntry(al(bT), cG)]
385+ let cM = valueOrErrorMessage(addressFromStringValue(bj), "Passed Price Oracle Address is not valid.")
386+ let cN = valueOrErrorMessage(getString(this, S(T)), ("Unsupported currency - there is no preinitialized data for " + T))
387+ let cO = split(cN, c)
388+ let cP = cO[P]
389+ let cQ = cO[Q]
390+ let cR = cO[R]
391+ let O = addressFromPublicKey(fromBase58String(cP))
392+ let bW = toString(O)
393+ let cS = valueOrErrorMessage(getString(O, L), "No defo asset ID found.")
394+[StringEntry(N(bW), bl(T, cS, ax._1, bm, bn, bo, bp, bj, bq, br, bs, bt, bu, bv, bw, bx, cP, cQ, toString(cG), toString(cH), toString(cK), toString(cL))), StringEntry(aa(T), bW), StringEntry(Z(bW), cR), IntegerEntry(V(bW), height), StringEntry(ab(cS), bW), IntegerEntry(al(bW), cI), IntegerEntry(am(bW), cJ)]
389395 }
390396 }
391397
392398
393399
394-@Callable(cu)
395-func fundLiquidityPool (S) = {
396- let bT = aF(S)
397- let bD = am(bT)
398- let cP = value(cu.payments[0])
399- let ad = toString(cu.caller)
400- let cQ = bc(bT, ad)
401- let cF = valueOrElse(getInteger(this, ak(bT)), (10 * an))
402- if ((a(C) == false))
400+@Callable(cx)
401+func fundLiquidityPool (T) = {
402+ let bW = aG(T)
403+ let bG = an(bW)
404+ let cT = value(cx.payments[0])
405+ let ae = toString(cx.caller)
406+ let cU = be(bW, ae)
407+ let cI = valueOrElse(getInteger(this, al(bW)), (10 * ao))
408+ if ((a(D) == false))
403409 then throw("Contract is not yet ready.")
404- else if ((cP.assetId != aq))
410+ else if ((cT.assetId != ar))
405411 then throw("Liquidity pool could be funded with USDN only.")
406- else if (if ((cF > cQ))
407- then (cF > cP.amount)
412+ else if (if ((cI > cU))
413+ then (cI > cT.amount)
408414 else false)
409- then throw(("Attached payment amount is less tha min allowed: " + toString(cF)))
415+ then throw(("Attached payment amount is less tha min allowed: " + toString(cI)))
410416 else {
411- let cR = (cP.amount + aZ(bT))
412- let cS = ba(bT)
413- let cT = bd(bT, ad)
414- let cU = aJ(bD)
415- let cV = if (if ((cU == at))
416- then (cR >= aN(bD))
417+ let cV = (cT.amount + bb(bW))
418+ let cW = bc(bW)
419+ let cX = bf(bW, ae)
420+ let cY = aK(bG)
421+ let cZ = if (if ((cY == au))
422+ then (cV >= aO(bG))
417423 else false)
418- then au
419- else cU
420- let cW = (cQ + cP.amount)
421- let cX = if ((cU == av))
422- then [ScriptTransfer(addressFromStringValue(bT), cP.amount, aq)]
424+ then av
425+ else cY
426+ let da = (cU + cT.amount)
427+ let db = if ((cY == aw))
428+ then [ScriptTransfer(addressFromStringValue(bW), cT.amount, ar)]
423429 else nil
424- ([IntegerEntry(ac(bT, ad), cW), IntegerEntry(ae(bT, ad), max([cW, cT])), IntegerEntry(W(bT), cR), IntegerEntry(X(bT), max([cS, cR])), StringEntry(M(bT), bB(cV, bD))] ++ cX)
430+ ([IntegerEntry(ad(bW, ae), da), IntegerEntry(af(bW, ae), max([da, cX])), IntegerEntry(X(bW), cV), IntegerEntry(Y(bW), max([cW, cV])), StringEntry(N(bW), bE(cZ, bG))] ++ db)
425431 }
426432 }
427433
428434
429435
430-@Callable(cu)
431-func activateAsset (S) = {
432- let N = aD(S)
433- let bD = am(N)
434- let cY = aZ(N)
435- let cZ = aJ(bD)
436- if ((toBase58String(cu.callerPublicKey) != y))
436+@Callable(cx)
437+func activateAsset (T) = {
438+ let O = aE(T)
439+ let bG = an(O)
440+ let dc = bb(O)
441+ let dd = aK(bG)
442+ if ((toBase58String(cx.callerPublicKey) != z))
437443 then throw("Only Admin can perform contract operation.")
438- else if ((a(C) == false))
444+ else if ((a(D) == false))
439445 then throw("Contract is not yet ready.")
440- else if ((cZ != aw._2))
441- then throw((("Asset is not in READY status. Current status is " + cZ) + "."))
442- else if ((N == ""))
443- then throw((("Cannot find asset " + S) + "."))
444- else if ((as > cY))
445- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(cY)) + ") is less than required (") + toString(as)) + ")"))
446+ else if ((dd != ax._2))
447+ then throw((("Asset is not in READY status. Current status is " + dd) + "."))
448+ else if ((O == ""))
449+ then throw((("Cannot find asset " + T) + "."))
450+ else if ((at > dc))
451+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(dc)) + ") is less than required (") + toString(at)) + ")"))
446452 else {
447- let cB = Reissue(ax, ay, true)
448-[IntegerEntry(V(N), height), StringEntry(M(N), bB(aw._3, bD)), cB, ScriptTransfer(addressFromStringValue(N), cY, aq), ScriptTransfer(addressFromStringValue(N), ay, ax)]
453+ let cE = Reissue(ay, az, true)
454+[IntegerEntry(W(O), height), StringEntry(N(O), bE(ax._3, bG)), cE, ScriptTransfer(addressFromStringValue(O), dc, ar), ScriptTransfer(addressFromStringValue(O), az, ay)]
449455 }
450456 }
451457
452458
453459
454-@Callable(cu)
455-func redeemFromPool (S,da) = {
456- let db = toString(cu.caller)
457- let dc = bS(S, db)
458- let bT = dc._1
459- let cs = dc._2
460- let bY = dc._3
461- let bV = dc._4
462- let cm = dc._5
463- let ct = dc._6
464- let cn = dc._7
465- let dd = dc._8
466- let de = ah(bT, db, ct)
467- let cG = valueOrElse(getInteger(this, al(bT)), (1 * an))
468- if ((a(C) == false))
460+@Callable(cx)
461+func redeemFromPool (T,de) = {
462+ let df = toString(cx.caller)
463+ let dg = bV(T, df)
464+ let bW = dg._1
465+ let cv = dg._2
466+ let cb = dg._3
467+ let bY = dg._4
468+ let cp = dg._5
469+ let cw = dg._6
470+ let cq = dg._7
471+ let dh = dg._8
472+ let di = ai(bW, df, cw)
473+ let cJ = valueOrElse(getInteger(this, am(bW)), (1 * ao))
474+ if ((a(D) == false))
469475 then throw("Contract is not yet ready.")
470- else if ((0 >= da))
471- then throw((("Cannot find pool maker by address " + db) + " or amount passed is not correct."))
472- else if ((0 >= cm))
476+ else if ((0 >= de))
477+ then throw((("Cannot find pool maker by address " + df) + " or amount passed is not correct."))
478+ else if ((0 >= cp))
473479 then throw("Pool maker has no funds")
474- else if ((0 >= cs))
480+ else if ((0 >= cv))
475481 then throw("All pool maker funds are locked")
476- else if ((da > cs))
477- then throw(((("Allowed amount to redeem is less then requested: allowedAmountToRedeem=" + toString(cs)) + " requested=") + toString(da)))
478- else if ((cG > da))
482+ else if ((de > cv))
483+ then throw(((("Allowed amount to redeem is less then requested: allowedAmountToRedeem=" + toString(cv)) + " requested=") + toString(de)))
484+ else if ((cJ > de))
479485 then throw("Redeem amount is less then min allowed")
480- else if ((cn > 0))
486+ else if ((cq > 0))
481487 then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
482- else if (isDefined(getInteger(this, de)))
488+ else if (isDefined(getInteger(this, di)))
483489 then throw((("Pool maker has already initiated redemption for " + toString(height)) + " height"))
484- else [IntegerEntry(aj(bT), (bY + da)), IntegerEntry(W(bT), (bV - da)), IntegerEntry(ac(bT, db), (cm - da)), IntegerEntry(de, da), IntegerEntry(af(bT, db), da), IntegerEntry(ag(bT, db), ct), StringEntry("%s%s_trace_redeemFromPool", dd)]
490+ else [IntegerEntry(ak(bW), (cb + de)), IntegerEntry(X(bW), (bY - de)), IntegerEntry(ad(bW, df), (cp - de)), IntegerEntry(di, de), IntegerEntry(ag(bW, df), de), IntegerEntry(ah(bW, df), cw), StringEntry("%s%s_trace_redeemFromPool", dh)]
485491 }
486492
487493
488494
489-@Callable(cu)
490-func getMaxAllowedAmountToRedeem (S,ad) = {
491- let dc = bS(S, ad)
492- let bT = dc._1
493- let cs = dc._2
494- let bY = dc._3
495- let bV = dc._4
496- let cm = dc._5
497- let ct = dc._6
498- let cn = dc._7
499- let dd = dc._8
500- throw(((((((((("{" + "allowedAmountToRedeem: ") + toString(cs)) + ", assetCode: ") + S) + ", poolMaker: ") + ad) + ", trace: ") + dd) + "}"))
495+@Callable(cx)
496+func getMaxAllowedAmountToRedeem (T,ae) = {
497+ let dg = bV(T, ae)
498+ let bW = dg._1
499+ let cv = dg._2
500+ let cb = dg._3
501+ let bY = dg._4
502+ let cp = dg._5
503+ let cw = dg._6
504+ let cq = dg._7
505+ let dh = dg._8
506+ throw(((((((((("{" + "allowedAmountToRedeem: ") + toString(cv)) + ", assetCode: ") + T) + ", poolMaker: ") + ae) + ", trace: ") + dh) + "}"))
501507 }
502508
503509
504510
505-@Callable(cu)
506-func withdraw (S,ad) = {
507- let bT = aF(S)
508- let N = addressFromStringValue(bT)
509- let df = af(bT, ad)
510- let dg = valueOrElse(getInteger(this, df), 0)
511- let dh = ag(bT, ad)
512- let ct = valueOrElse(getInteger(this, dh), 0)
513- let bX = aj(bT)
514- let bY = valueOrElse(getInteger(this, bX), 0)
515- let de = ah(bT, ad, ct)
516- if ((a(C) == false))
511+@Callable(cx)
512+func withdraw (T,ae) = {
513+ let bW = aG(T)
514+ let O = addressFromStringValue(bW)
515+ let dj = ag(bW, ae)
516+ let dk = valueOrElse(getInteger(this, dj), 0)
517+ let dl = ah(bW, ae)
518+ let cw = valueOrElse(getInteger(this, dl), 0)
519+ let ca = ak(bW)
520+ let cb = valueOrElse(getInteger(this, ca), 0)
521+ let di = ai(bW, ae, cw)
522+ if ((a(D) == false))
517523 then throw("Contract is not yet ready.")
518- else if (!(isDefined(getInteger(N, de))))
524+ else if (!(isDefined(getInteger(O, di))))
519525 then throw("Need to transfer liquidity from asset account first")
520- else if ((0 >= dg))
521- then throw((("Cannot find pool maker by address " + ad) + " or no locked amount."))
522- else if ((ct > height))
523- then throw((("Please wait " + toString(ct)) + " before withdraw."))
524- else [IntegerEntry(df, 0), IntegerEntry(bX, (bY - dg)), IntegerEntry(dh, 0), ScriptTransfer(addressFromStringValue(ad), dg, aq)]
526+ else if ((0 >= dk))
527+ then throw((("Cannot find pool maker by address " + ae) + " or no locked amount."))
528+ else if ((cw > height))
529+ then throw((("Please wait " + toString(cw)) + " before withdraw."))
530+ else [IntegerEntry(dj, 0), IntegerEntry(ca, (cb - dk)), IntegerEntry(dl, 0), ScriptTransfer(addressFromStringValue(ae), dk, ar)]
525531 }
526532
527533

github/deemru/w8io/3ef1775 
234.99 ms