tx · Ch64NwjLad3qtqCiGCMxPa5XgNk3wHuAZ4Adru6V7z3N

3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ:  -0.01400000 Waves

2022.02.24 15:48 [3002841] smart account 3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ > SELF 0.00000000 Waves

{ "type": 13, "id": "Ch64NwjLad3qtqCiGCMxPa5XgNk3wHuAZ4Adru6V7z3N", "fee": 1400000, "feeAssetId": null, "timestamp": 1645706930873, "version": 2, "chainId": 87, "sender": "3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ", "senderPublicKey": "BWnMC6WjWvjJRc2jc1XibbL3RSvL2mFekrvRxpJGdtp1", "proofs": [ "", "mQToXthooqDcmX7MA6SDVSNRaAiTRSCVnt5gyVJcrU8HA8QcdJEn2uHYpUMWPT2ETHs1EEqfkNZriuJWsSmt6eN", "4xb7p8UqegGQtcU6F1AbN19Kiv9YKDZYuowPeDFRx9Qe3DxoGnMjc5zNKxT5CksErthwGDjdy3DindG6jxQ6rjPJ" ], "script": "base64:AAIFAAAAAAAAFLQIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoQCgFBEgtrZXlEdXJhdGlvbhohCgFCEhxrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGioKAUMSJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQaGAoBRBITa2V5VHJhbnNmZXJCdXlBc3NldBoZCgFFEhRrZXlGcmVlelN3b3BEdXJhdGlvbhodCgFGEhhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4aFQoBRxIQa2V5RnJlZXplVG9rZW5JZBobCgFIEhZrZXlGcmVlemVUb2tlbkR1cmF0aW9uGhwKAUkSF2tleUZyZWV6ZVRva2VuUGVyVGlja2V0GhAKAUoSC2tleUJ1eVRva2VuGhMKAUsSDmtleUNsYWltUGFyYW1zGiAKAUwSG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhobCgFNEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGhoKAU4SFWtleUhDVGlja2V0TGFzdE51bWJlchodCgFPEhhrZXlIaWdoQ29tcGV0aXRpb25BbW91bnQaIQoBUBIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxoZCgFREhRrZXlVc2VyQ2xhaW1lZFRva2VucxocCgFSEhdrZXlVc2VyQ2xhaW1lZEJ1eVRva2VucxofCgFTEhprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudBoTCgFUEg5rZXlVc2VyVGlja2V0cxoVCgFVEhBrZXlVc2VySENUaWNrZXRzGiEKAVYSHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQaIAoBVxIba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zGiUKAVgSIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGh0KAVkSGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucxoXCgFaEhJrZXlVc2VyQ2xhaW1TdGF0dXMaDgoBYRIJa2V5QWN0aXZlGhYKAmFBEhBzdGFrZWRVc2RuQW1vdW50GgwKAmFCEgZhY3RpdmUaDgoCYUMSCGlzQWN0aXZlGhEKAmFEEgtpc0FkbWluQ2FsbBoHCgJhRRIBaRocCgJhRhIWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZxoOCgJhRxIIYXNzZXRTdHIaEQoCYUgSC2xhdW5jaHBhZElkGgoKAmFJEgRoYXNoGg0KAmFKEgdhZGRyZXNzGhQKAmFLEg5wcm9qZWN0QWRkcmVzcxoRCgJhTBILc3RhcnRIZWlnaHQaDgoCYU0SCGR1cmF0aW9uGg4KAmFOEghidXlUb2tlbhoQCgJhTxIKY29tbWlzc2lvbhoVCgJhUBIPdG9rZW5zUGVyVGlja2V0GhMKAmFREg1wcmljZVBlclRva2VuGhkKAmFSEhNzd29wZmlUaWNrZXRzQW1vdW50GhoKAmFTEhRjYW1wYWlnblRva2Vuc0Ftb3VudBoZCgJhVBITdG9rZW5zUGVyQWxsb2NhdGlvbhoTCgJhVRINc3dvcFBlclRpY2tldBoYCgJhVhISc3dvcEZyZWV6ZUR1cmF0aW9uGhEKAmFXEgtjbGFpbVBhcmFtcxoZCgJhWBITSGlnaENvbXBldGl0aW9uU2FsZRoeCgJhWRIYaGlnaENvbXBldGl0aW9uQ29taXNzaW9uGiIKAmFaEhxoaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50GiAKAmFhEhprZXlVc2VyV2lubmVkVGlja2V0c0Ftb3VudBovCgJhYhIpa2V5VXNlcldpbm5lZEhpZ2hDb21wZXRpdGlvblRpY2tldHNBbW91bnQaGAoCYWMSEmtleVVzZXJGcmVlemVUb2tlbhoMCgJhZBIGb3JhY2xlGhAKAmFlEgpnb3Zlcm5hbmNlGhYKAmFmEhBjb21taXNzaW9uV2FsbGV0GhgKAmFnEhJzdGFraW5nVVNETkFkZHJlc3MaCgoCYWgSBFVTRE4aGAoCYWkSEmFkbWluUHViS2V5U3Rha2luZxoaCgJhahIUbWF4QWxsb2NhdGlvbnNBbW91bnQaFwoCYWsSEWFjdGl2ZUxhdW5jaHBhZElkGhEKAmFsEgtnZXRBZG1pblB1YhoRCgJhbRILa2V5QWRtaW5QdWIaDQoCYW4SByRtYXRjaDAaDAoCYW8SBnN0cmluZxoNCgJhcBIHbm90aGluZxoSCgJhcRIMYWRtaW5QdWJLZXkxGhIKAmFyEgxhZG1pblB1YktleTIaEgoCYXMSDGFkbWluUHViS2V5MxoSCgJhdBIMZ2V0QXNzZXRJbmZvGg0KAmF1Egdhc3NldElkGggKAmF2EgJpZBoOCgJhdxIIc3RyaW5nSWQaCgoCYXgSBGluZm8aCwoCYXkSBXdhdmVzGhgKAmF6EhJnZXRMYXVuY2hwYWROZXh0SWQaFAoBYhIPa2V5QWRtaW5QdWJLZXkxGhUKAmJBEg90b2tlblN0ckFzc2V0SWQaFAoCYkISDnRva2VuQXNzZXROYW1lGhMKAmJDEg10b2tlbkRlY2ltYWxzGhEKAmJEEgt0aWNrZXRQcmljZRoZCgJiRRITY29tbWlzc2lvblBlclRpY2tldBoVCgJiRhIPYnV5VGlja2V0QW1vdW50GhwKAmJHEhZhbGxvd2VkQnV5VGlja2V0QW1vdW50GiIKAmJIEhxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uGgwKAmJJEgZjaGFuZ2UaGgoCYkoSFGZyZWV6ZVRva2VuUGVyVGlja2V0GhMKAmJLEg0kdDAxMjQ5MTEyNTc4GhUKAmJMEg9wbXRBbW91bnRGcmVlemUaFgoCYk0SEHBtdEFzc2V0SWRGcmVlemUaEwoCYk4SDSR0MDEyNTk1MTI2ODYaGQoCYk8SE3BtdEZyZWV6ZVN0ckFzc2V0SWQaGAoCYlASEnBtdEZyZWV6ZUFzc2V0TmFtZRoXCgJiURIRcG10RnJlZXplRGVjaW1hbHMaFgoCYlISEG5lZWRGcmVlemVUb2tlbnMaHgoCYlMSGHVzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxocCgJiVBIWbGFzdEJvdWdodFRpY2tldE51bWJlchoRCgJiVRILYm91Z2h0UmFuZ2UaIQoCYlYSG25ld1VzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxoJCgJiVxIDaW52Gg8KAmJYEgliYXNlRW50cnkaEwoCYlkSDSR0MDE0NzU3MTQ4MzIaEwoCYloSDSR0MDE0ODM3MTQ5ODcaGwoCYmESFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoSCgJiYhIMZnJlZXplUGFyYW1zGhQKAmJjEg5sYXVuY2hwYWRJZFN0choRCgJiZBILJHQwNjM3ODY0NTMaDwoCYmUSCXBtdEFtb3VudBoQCgJiZhIKcG10QXNzZXRJZBoRCgJiZxILJHQwNjQ2MjY1MzUaEwoCYmgSDXBtdFN0ckFzc2V0SWQaEgoCYmkSDHBtdEFzc2V0TmFtZRoRCgJiahILcG10RGVjaW1hbHMaGwoCYmsSFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeRoLCgJibBIFcmVmSWQaEQoCYm0SCyR0MDkxNDE5MjE2GhEKAmJuEgskdDA5MjIxOTM3MRoQCgJibxIKYnV5QXNzZXRJZBoTCgJicBINYnV5QXNzZXRTdHJJZBoSCgJicRIMYnV5QXNzZXROYW1lGhYKAmJyEhBidXlBc3NldERlY2ltYWxzGhEKAmJzEgtzdGFrZWRTd29wcxodCgJidBIXYWxsb3dlZFRpY2tldHNBbW91bnRBbGwaGQoCYnUSE2JvdWdodFRpY2tldHNBbW91bnQaGgoCYnYSFGFsbG93ZWRUaWNrZXRzQW1vdW50GhMKAmJ3Eg1mcmVlemVUb2tlbklkGhAKAmJ4Egp0b2tlblByaWNlGhMKAmJ5Eg0kdDAxMTE4MzExMzI3Gg0KAmJ6Egd0b2tlbklkGhQKAWMSD2tleUFkbWluUHViS2V5MhoTCgJjQRINYm91Z2h0VGlja2V0cxoVCgJjQhIPYm91Z2h0SENUaWNrZXRzGhUKAmNDEg91c2VyQ2xhaW1TdGF0dXMaFAoCY0QSDmZpbmFsaXplSGVpZ2h0GhMKAmNFEg0kdDAyNTQwODI1NTg1GhMKAmNGEg13b25uZWRUaWNrZXRzGhUKAmNHEg93b25uZWRIQ1RpY2tldHMaGgoCY0gSFGF3YWlsYWJsZUFsbG9jYXRpb25zGhgKAmNJEhJhbGxvd2VkQWxsb2NhdGlvbnMaEwoCY0oSDSR0MDI2NTAxMjY2NDUaGgoCY0sSFHRyYW5zZmVyVG9rZW5zQW1vdW50GiEKAmNMEhtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMaHAoCY00SFmJ1eUFzc2V0Rm9yQWxsb2NhdGlvbnMaIAoCY04SGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzGiIKAmNPEhxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzGhUKAmNQEg9jbGFpbWVkQnV5VG9rZW4aHAoCY1ESFnJldHVybmVkQnV5QXNzZXRBbW91bnQaFgoCY1ISEHRyYW5zZmVyQnV5QXNzZXQaEwoCY1MSDWNsYWltZWRQYXJhbXMaFAoCY1QSDnRyYW5zZmVyVG9rZW5zGhMKAmNVEg1jbGFpbWVkVG9rZW5zGhIKAmNWEgx1bmxvY2tQZXJpb2QaEQoCY1cSC2Jsb2NrSGVpZ2h0GhIKAmNYEgx1bmxvY2tIZWlnaHQaGAoCY1kSEmFsbG93ZWRTdGFydEFtb3VudBoZCgJjWhITYWxsb3dlZFRva2Vuc0Ftb3VudBoZCgJjYRITdXNlclVzZG5Jbk1hcmtldGluZxoVCgJjYhIPdXNkbkluTWFya2V0aW5nGhcKAmNjEhFib3VnaHRBbGxvY2F0aW9ucxoTCgJjZBINJHQwMTU2NTYxNTgwMBoiCgJjZRIcYWxsb2NhdGlvblByaWNlV2l0aENvbWlzc2lvbhoaCgJjZhIUYnV5QWxsb2NhdGlvbnNBbW91bnQaEwoCY2cSDSR0MDE4MDU4MTgxMzMaEwoCY2gSDSR0MDE4MTM4MTgyODgaGwoCY2kSFWJvdWdodEhDVGlja2V0c0Ftb3VudBoZCgJjahITaGlnaENvbXBldGl0aW9uU2FsZRoTCgJjaxINJHQwMTk0NjExOTYwNRobCgJjbBIVYnV5UHJpY2VXaXRoQ29taXNzaW9uGg8KAmNtEgl2cmZIZWlnaHQaEAoCY24SCnNlY3JldFdvcmQaDwoCY28SCXNhdmVkSGFzaBoOCgJjcBIIY2FsY0hhc2gaEwoCY3ESDSR0MDIyMjE4MjIzNjgaEgoCY3ISDGNvbW1pc3Npb25IQxoYCgJjcxISdHJhbnNmZXJlZEJ1eUFzc2V0GiEKAmN0Ehtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQaHAoCY3USFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQaHAoCY3YSFnN3b3BmaU1lbWJlcnNDb21pc3Npb24aFwoCY3cSEXN3b3BmaUhDQ29taXNzaW9uGiQKAmN4Eh50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcaGAoCY3kSEm1hcmtldGluZ0NvbWlzc2lvbhoTCgJjehINdW5zdGFrZUFtb3VudBoUCgFkEg9rZXlBZG1pblB1YktleTMaFgoCZGESEGNsYWltU3RhdHVzRW50cnkaFwoCZGISEXVzZXJUb2tlbnNGcmVlemVkGhkKAmRjEhNmcmVlemVUb2tlbkR1cmF0aW9uGhQKAmRkEg5ibG9ja0VuZEhlaWdodBoMCgJkZRIGYW1vdW50GhMKAmRmEg0kdDAzMjgzMDMyOTgwGggKAmRnEgJ0eBoMCgJkaBIGdmVyaWZ5GhkKAmRpEhNtdWx0aVNpZ25lZEJ5QWRtaW5zGhgKAmRqEhJhZG1pblB1YktleTFTaWduZWQaGAoCZGsSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJkbBISYWRtaW5QdWJLZXkzU2lnbmVkGhMKAmRtEg1zaWduZWRCeUFkbWluGgkKAmRuEgNkdHgaJgoBZRIha2V5TGF1bmNocGFkRGF0YVRyYW5zYWN0aW9uU3RhdHVzGhcKAWYSEmtleUxhdW5jaHBhZE5leHRJZBoZCgFnEhRrZXlMYXVuY2hwYWRBY3RpdmVJZBoSCgFoEg1rZXlJbml0Q2FsbGVyGg8KAWkSCmtleUFkZHJlc3MaEgoBahINa2V5SW5pdEhlaWdodBoTCgFrEg5rZXlTdGFydEhlaWdodBoWCgFsEhFrZXlGaW5hbGlzZUhlaWdodBoRCgFtEgxrZXlDb21pc3Npb24aDwoBbhIKa2V5QXNzZXRJZBoYCgFvEhNrZXlUb3RhbFRva2VuQW1vdW50Gh8KAXASGmtleVRvdGFsQW1vdW50QnV5QXNzZXRTb2xkGhcKAXESEmtleVRva2Vuc1BlclRpY2tldBoVCgFyEhBrZXlQcmljZVBlclRva2VuGhUKAXMSEGtleVN3b3BQZXJUaWNrZXQaGwoBdBIWa2V5U3dvcGZpVGlja2V0c0Ftb3VudBocCgF1EhdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudBobCgF2EhZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uGhgKAXcSE2tleVRpY2tldExhc3ROdW1iZXIaGAoBeBITa2V5R292ZXJuYW5jZVN0YWtlZBoRCgF5EgxrZXlVc2VyUmVmSWQaEgoBehINa2V5VmVyaWZ5SGFzaAAAAEoAAAAAAWECAAAABmFjdGl2ZQAAAAABYgIAAAALYWRtaW5fcHViXzEAAAAAAWMCAAAAC2FkbWluX3B1Yl8yAAAAAAFkAgAAAAthZG1pbl9wdWJfMwAAAAABZQIAAAAhbGF1bmNocGFkX2RhdGFfdHJhbnNhY3Rpb25fc3RhdHVzAAAAAAFmAgAAABFsYXVuY2hwYWRfbmV4dF9pZAAAAAABZwIAAAATbGF1bmNocGFkX2FjdGl2ZV9pZAAAAAABaAIAAAALaW5pdF9jYWxsZXIAAAAAAWkCAAAACF9hZGRyZXNzAAAAAAFqAgAAAAxfaW5pdF9oZWlnaHQAAAAAAWsCAAAADV9zdGFydF9oZWlnaHQAAAAAAWwCAAAAEF9maW5hbGlzZV9oZWlnaHQAAAAAAW0CAAAACl9jb21pc3Npb24AAAAAAW4CAAAACV9hc3NldF9pZAAAAAABbwIAAAATX3RvdGFsX3Rva2VuX2Ftb3VudAAAAAABcAIAAAAVX3RvdGFsX2J1eV9hc3NldF9zb2xkAAAAAAFxAgAAABJfdG9rZW5zX3Blcl90aWNrZXQAAAAAAXICAAAAEF9wcmljZV9wZXJfdG9rZW4AAAAAAXMCAAAAEF9zd29wX3Blcl90aWNrZXQAAAAAAXQCAAAAF190aWNrZXRzX3N3b3BmaV9tZW1iZXJzAAAAAAF1AgAAABNfdG9rZW5zX2FjY2Vzc19saXN0AAAAAAF2AgAAABZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uAAAAAAF3AgAAABNfdGlja2V0X2xhc3RfbnVtYmVyAAAAAAF4AgAAAAxfU1dPUF9hbW91bnQAAAAAAXkCAAAAB19yZWZfaWQAAAAAAXoCAAAADF92ZXJpZnlfaGFzaAAAAAABQQIAAAAJX2R1cmF0aW9uAAAAAAFCAgAAACdfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAAAAAAUMCAAAAMV90b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZ19maW5hbGl6ZWQAAAAAAUQCAAAAE190cmFuc2Zlcl9idXlfYXNzZXQAAAAAAUUCAAAAFV9mcmVlemVfc3dvcF9kdXJhdGlvbgAAAAABRgIAAAAYX2ZyZWV6ZV9hZGRpdGlvbmFsX3Rva2VuAAAAAAFHAgAAABBfZnJlZXplX3Rva2VuX2lkAAAAAAFIAgAAABZfZnJlZXplX3Rva2VuX2R1cmF0aW9uAAAAAAFJAgAAABhfZnJlZXplX3Rva2VuX3Blcl90aWNrZXQAAAAAAUoCAAAACl9idXlfdG9rZW4AAAAAAUsCAAAADV9jbGFpbV9wYXJhbXMAAAAAAUwCAAAAG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lvbgAAAAABTQIAAAAWX2hpZ2hfY29tcGV0aXRpb25fc2FsZQAAAAABTgIAAAAkX2hpZ2hfY29tcGV0aXRpb25fdGlja2V0X2xhc3RfbnVtYmVyAAAAAAFPAgAAABlfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFQAgAAACZfdG90YWxfYnV5X2Fzc2V0X3NvbGRfaGlnaF9jb21wZXRpdGlvbgAAAAABUQIAAAAPX2NsYWltZWRfdG9rZW5zAAAAAAFSAgAAABNfY2xhaW1lZF9idXlfdG9rZW5zAAAAAAFTAgAAAA9fYm91Z2h0X3RpY2tldHMAAAAAAVQCAAAAD190aWNrZXRzX251bWJlcgAAAAABVQIAAAAgX3RpY2tldHNfbnVtYmVyX2hpZ2hfY29tcGV0aXRpb24AAAAAAVYCAAAAIF9ib3VnaHRfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFXAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAABWAIAAAAhX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nAAAAAAFZAgAAABNfYm91Z2h0X2FsbG9jYXRpb25zAAAAAAFaAgAAAA1fY2xhaW1fc3RhdHVzAAAAAAJhYQIAAAAPX3RpY2tldHNfcmVzdWx0AAAAAAJhYgIAAAAgX3RpY2tldHNfcmVzdWx0X2hpZ2hfY29tcGV0aXRpb24AAAAAAmFjAgAAABRfZnJlZXplX3Rva2VuX2Ftb3VudAAAAAACYWQJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgAAAAAAmFlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXyVect296lgzLCCI5D3yGiYCibNyztxbtAAAAAAJhZgkBAAAAB0FkZHJlc3MAAAABAQAAABoBV6BRpy/wPSJ8xbXfMYJKm3TgPPkqMILhZwAAAAACYWcJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVfkDqc2T5IL15fPpB0/NRvPQ2rrqjzzcZ0AAAAAAmFoAQAAACC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QAAAAACYWkBAAAAILI9nx2GN5pXheYjUfThN3sjj2pYAd0+6A1owI50e1goAAAAAAJhagAAAAAAAAAAAgAAAAACYWsJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAAWcA//////////8BAAAAAmFsAAAAAQAAAAJhbQQAAAACYW4JAAQdAAAAAgUAAAACYWQFAAAAAmFtAwkAAAEAAAACBQAAAAJhbgIAAAAGU3RyaW5nBAAAAAJhbwUAAAACYW4JAAJZAAAAAQUAAAACYW8EAAAAAmFwBQAAAAJhbgkAAAIAAAABAgAAABlBZG1pbiBwdWJsaWMga2V5IGlzIGVtcHR5AAAAAAJhcQkBAAAAAmFsAAAAAQUAAAABYgAAAAACYXIJAQAAAAJhbAAAAAEFAAAAAWMAAAAAAmFzCQEAAAACYWwAAAABBQAAAAFkAQAAAAJhdAAAAAEAAAACYXUEAAAAAmFuBQAAAAJhdQMJAAABAAAAAgUAAAACYW4CAAAACkJ5dGVWZWN0b3IEAAAAAmF2BQAAAAJhbgQAAAACYXcJAAJYAAAAAQUAAAACYXYEAAAAAmF4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAACYXYJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAAAmF3AgAAAA4gZG9lc24ndCBleGlzdAkABRUAAAADBQAAAAJhdwgFAAAAAmF4AAAABG5hbWUIBQAAAAJheAAAAAhkZWNpbWFscwMJAAABAAAAAgUAAAACYW4CAAAABFVuaXQEAAAAAmF5BQAAAAJhbgkABRUAAAADAgAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAAAAAAAgJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAAmF6AAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAFmAAAAAAAAAAABAQAAAAJhQQAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAACYWcJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADHJwZF9iYWxhbmNlXwkAAlgAAAABBQAAAAJhaAIAAAABXwkABCUAAAABBQAAAAR0aGlzAAAAAAAAAAAAAAAAAAJhQgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzBQAAAAFhBgEAAAACYUMAAAAAAwUAAAACYUIFAAAABHVuaXQJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAEAAAACYUQAAAABAAAAAmFFAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACYXEJAARMAAAAAgUAAAACYXIJAARMAAAAAgUAAAACYXMFAAAAA25pbAgFAAAAAmFFAAAAD2NhbGxlclB1YmxpY0tleQUAAAAEdW5pdAkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BAAAAAmFGAAAAAQAAAAJhRwMJAAAAAAAAAgUAAAACYUcCAAAABVdBVkVTCQAFFgAAAAQFAAAABHVuaXQCAAAABVdBVkVTAgAAAAVXQVZFUwAAAAAAAAAACAQAAAACYXcFAAAAAmFHBAAAAAJhdgkAAlkAAAABBQAAAAJhRwQAAAACYXgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABBQAAAAJhdgkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAUAAAACYXcCAAAADiBkb2Vzbid0IGV4aXN0CQAFFgAAAAQFAAAAAmF2BQAAAAJhdwgFAAAAAmF4AAAABG5hbWUIBQAAAAJheAAAAAhkZWNpbWFscwAAAAwAAAACYUUBAAAADWhhc2hpbmdSYW5kb20AAAACAAAAAmFIAAAAAmFJCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUMAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUQAAAABBQAAAAJhRQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAXoFAAAAAmFJBQAAAANuaWwAAAACYUUBAAAACmluaXRDYWxsZXIAAAABAAAAAmFKCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUMAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUQAAAABBQAAAAJhRQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAFoBQAAAAJhSgUAAAADbmlsAAAAAmFFAQAAAARpbml0AAAAEgAAAAJhSwAAAAJhTAAAAAJhTQAAAAJhTgAAAAJhTwAAAAJhUAAAAAJhUQAAAAJhUgAAAAJhUwAAAAJhVAAAAAJhVQAAAAJhVgAAAAJhVwAAAAJhWAAAAAJhWQAAAAJhWgAAAAJiYQAAAAJiYgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAAmFDAAAAAAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAFoAgAAAAAJAAACAAAAAQIAAAApT25seSBwcm9qZWN0IGFkbWluIGNhbiBjYWxsIGluaXQgZnVuY3Rpb24DCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAJhRQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAJhTAkAAAIAAAABAgAAADNTdGFydCBoZWlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gYmxvY2tjaGFpbiBoZWlnaHQDAwUAAAACYmEJAQAAAAIhPQAAAAIJAAGQAAAAAQUAAAACYmIAAAAAAAAAAAMHCQAAAgAAAAECAAAAJEZyZWV6ZSBwYXJhbXMgbGlzdCBtdXN0IGhhdmUgMyBpdGVtcwQAAAACYUgJAQAAAAJhegAAAAAEAAAAAmJjCQABpAAAAAEFAAAAAmFIBAAAAAJiZAkABRQAAAACCAkAAZEAAAACCAUAAAACYUUAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAACYUUAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAACYmUIBQAAAAJiZAAAAAJfMQQAAAACYmYIBQAAAAJiZAAAAAJfMgQAAAACYmcJAQAAAAJhdAAAAAEFAAAAAmJmBAAAAAJiaAgFAAAAAmJnAAAAAl8xBAAAAAJiaQgFAAAAAmJnAAAAAl8yBAAAAAJiaggFAAAAAmJnAAAAAl8zBAAAAAJiawMFAAAAAmJhCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAFGBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAFHCQABkQAAAAIFAAAAAmJiAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAFICQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAACYmIAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAUkJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAJiYgAAAAAAAAAAAgUAAAADbmlsBQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJiaAIAAAAKX2xhdW5jaHBhZAUAAAACYUgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAAWYJAABkAAAAAgUAAAACYUgAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAJiYwUAAAABaQUAAAACYUsJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAWoFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJiYwUAAAABawUAAAACYUwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAUEFAAAAAmFNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAUoFAAAAAmFOCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAFFBQAAAAJhVgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJiYwUAAAABbwUAAAACYmUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAJiYwUAAAABbgUAAAACYmgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAW0FAAAAAmFPCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAF3AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAFOAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAFxBQAAAAJhUAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJiYwUAAAABcgUAAAACYVEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAXMFAAAAAmFVCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAF0BQAAAAJhUgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJiYwUAAAABdQUAAAACYVMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAXYFAAAAAmFUCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAUsJAAS5AAAAAgUAAAACYVcCAAAAASwJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgUAAAACYmMFAAAAAU0FAAAAAmFYCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmJjBQAAAAFMBQAAAAJhWQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJiYwUAAAABTwUAAAACYVoJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAAWcFAAAAAmFICQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAAWgCAAAAAAUAAAADbmlsBQAAAAJiawAAAAJhRQEAAAAQY29tbWl0U3dvcGZpU2FsZQAAAAIAAAACYUgAAAACYmwJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAJhQwAAAAAEAAAAAmJtCQAFFAAAAAIICQABkQAAAAIIBQAAAAJhRQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAJhRQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAJiZQgFAAAAAmJtAAAAAl8xBAAAAAJiZggFAAAAAmJtAAAAAl8yBAAAAAJibgkBAAAAAmFGAAAAAQkBAAAABXZhbHVlAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUoEAAAAAmJvCAUAAAACYm4AAAACXzEEAAAAAmJwCAUAAAACYm4AAAACXzIEAAAAAmJxCAUAAAACYm4AAAACXzMEAAAAAmJyCAUAAAACYm4AAAACXzQEAAAAAmJzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAAmFlCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgUAAAABeAAAAAAAAAAAAAQAAAACYnQJAABpAAAAAgUAAAACYnMJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABcwQAAAACYnUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFTAAAAAAAAAAAABAAAAAJidgkAAGUAAAACBQAAAAJidAUAAAACYnUEAAAAAmFMCQEAAAAFdmFsdWUAAAABCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABawQAAAACYU0JAQAAAAV2YWx1ZQAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFBBAAAAAJiYQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUYHAwkBAAAAAiE9AAAAAgUAAAACYWsFAAAAAmFICQAAAgAAAAECAAAAN1RoZXJlIGlzIG5vIGFjdGl2ZSBsYXVuY2hwYWQgb3IgdGhpcyBsYXVuY2hwYWQgaXMgZW5kZWQDCQAAZgAAAAIFAAAAAmFMBQAAAAZoZWlnaHQJAAACAAAAAQIAAAAeTGF1bmNocGFkIHNhbGUgbm90IHN0YXJ0ZWQgeWV0AwkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgUAAAACYUwFAAAAAmFNCQAAAgAAAAECAAAAFExhdW5jaHBhZCBzYWxlIGVuZGVkAwMJAQAAAAEhAAAAAQUAAAACYmEDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAJhRQAAAAhwYXltZW50cwAAAAAAAAAAAQYJAQAAAAIhPQAAAAIFAAAAAmJmBQAAAAJibwcJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAGE9uZSBhdHRhY2hlZCBwYXltZW50IGluIAUAAAACYnECAAAACSBleHBlY3RlZAMDBQAAAAJiYQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAmFFAAAACHBheW1lbnRzAAAAAAAAAAACBgkBAAAAAiE9AAAAAgUAAAACYmYFAAAAAmJvBwQAAAACYncJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABRwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAClUd28gYXR0YWNoZWQgcGF5bWVudHMgZXhwZWN0ZWQ6IEZpcnN0IGluIAUAAAACYnECAAAADCwgc2Vjb25kIGluIAUAAAACYncDAwkAAGcAAAACAAAAAAAAAAAABQAAAAJidAYJAABnAAAAAgAAAAAAAAAAAAUAAAACYnYJAAACAAAAAQIAAAAqTm90IGVub3VnaHQgU1dPUCBpbiBzdGFraW5nIHRvIGJ1eSB0aWNrZXRzBAAAAAJieAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFyBAAAAAJhUAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFxBAAAAAJieQkBAAAAAmFGAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFuBAAAAAJieggFAAAAAmJ5AAAAAl8xBAAAAAJiQQgFAAAAAmJ5AAAAAl8yBAAAAAJiQggFAAAAAmJ5AAAAAl8zBAAAAAJiQwgFAAAAAmJ5AAAAAl80BAAAAAJiRAkAAGsAAAADBQAAAAJhUAUAAAACYngJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAACYkMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAAAmJFCQAAawAAAAMFAAAAAmJECQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAW0AAAAAAAAAAGQEAAAAAmJGCQAAaQAAAAIFAAAAAmJlCQAAZAAAAAIFAAAAAmJEBQAAAAJiRQQAAAACYkcJAAGXAAAAAQkABEwAAAACBQAAAAJiRgkABEwAAAACBQAAAAJidgUAAAADbmlsBAAAAAJiSAkAAGgAAAACBQAAAAJiRwkAAGQAAAACBQAAAAJiRAUAAAACYkUEAAAAAmJJCQAAZQAAAAIFAAAAAmJlBQAAAAJiSAMJAAAAAAAAAgUAAAACYkYAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADE5vdCBlbm91Z2h0IAUAAAACYnECAAAADyB0byBidXkgdGlja2V0cwMJAQAAAAIhPQAAAAIFAAAAAmJJAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAWV3JvbmcgcGF5bWVudC4gVG8gYnV5IAkAAaQAAAABBQAAAAJiRwIAAAAYdGlja2V0cyB5b3UgbmVlZCB0byBwYXkgCQABpAAAAAEFAAAAAmJIBQAAAAJicQQAAAACYmsDBQAAAAJiYQQAAAACYncJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABRwQAAAACYkoJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABSQQAAAACYksJAAUUAAAAAggJAAGRAAAAAggFAAAAAmFFAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAmFFAAAACHBheW1lbnRzAAAAAAAAAAABAAAAB2Fzc2V0SWQEAAAAAmJMCAUAAAACYksAAAACXzEEAAAAAmJNCAUAAAACYksAAAACXzIEAAAAAmJOCQEAAAACYXQAAAABBQAAAAJiZgQAAAACYk8IBQAAAAJiTgAAAAJfMQQAAAACYlAIBQAAAAJiTgAAAAJfMgQAAAACYlEIBQAAAAJiTgAAAAJfMwQAAAACYlIJAABoAAAAAgUAAAACYkoFAAAAAmJGAwMJAQAAAAIhPQAAAAIFAAAAAmJPBQAAAAJidwYJAQAAAAIhPQAAAAIFAAAAAmJSBQAAAAJiTAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEFlvdSBuZWVkIHRvIGFkZCAJAAGkAAAAAQUAAAACYlICAAAAASAFAAAAAmJQAgAAABQgYXMgYSBzZWNvbmQgcGF5bWVudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAJhYwUAAAACYkwFAAAAA25pbAUAAAADbmlsBAAAAAJiUwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAVQCAAAAAAQAAAACYlQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABdwQAAAACYlUJAAEsAAAAAgkAASwAAAACCQABpAAAAAEJAABkAAAAAgUAAAACYlQAAAAAAAAAAAECAAAAAS0JAAGkAAAAAQkAAGQAAAACBQAAAAJiVAUAAAACYkcEAAAAAmJWCQABLAAAAAIFAAAAAmJTAwkBAAAAAiE9AAAAAgUAAAACYlMCAAAAAAkAASwAAAACAgAAAAEsBQAAAAJiVQkAASwAAAACAgAAAAAFAAAAAmJVBAAAAAJiVwMJAAAAAAAAAgUAAAACYm8FAAAAAmFoCQAD/AAAAAQFAAAAAmFnAgAAAAxsb2NrTmV1dHJpbm8FAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAACYmYFAAAAAmJlBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAAAmJXBQAAAAJiVwQAAAACYlgJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFTCQAAZAAAAAIFAAAAAmJ1BQAAAAJiRwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAF3CQAAZAAAAAIFAAAAAmJUBQAAAAJiRwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAVQFAAAAAmJWBQAAAANuaWwFAAAAAmJrAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAXkJAAROAAAAAgUAAAACYlgJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAF5BQAAAAJibAUAAAADbmlsBQAAAAJiWAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAACYUUBAAAAFGNvbW1pdEFjY2Vzc0xpc3RTYWxlAAAAAgAAAAJhSAAAAAJibAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAAmFDAAAAAAQAAAACYlkJAAUUAAAAAggJAAGRAAAAAggFAAAAAmFFAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAmFFAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAAmJlCAUAAAACYlkAAAACXzEEAAAAAmJmCAUAAAACYlkAAAACXzIEAAAAAmJaCQEAAAACYUYAAAABCQEAAAAFdmFsdWUAAAABCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABSgQAAAACYm8IBQAAAAJiWgAAAAJfMQQAAAACYnAIBQAAAAJiWgAAAAJfMgQAAAACYnEIBQAAAAJiWgAAAAJfMwQAAAACYnIIBQAAAAJiWgAAAAJfNAQAAAACY2EJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFYAAAAAAAAAAAABAAAAAJjYgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUIAAAAAAAAAAAAEAAAAAmNjCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAABWQAAAAAAAAAAAAQAAAACYU8JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABbQQAAAACYngJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABcgQAAAACYVQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABdgQAAAACY2QJAQAAAAJhRgAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABbgQAAAACYnoIBQAAAAJjZAAAAAJfMQQAAAACYkEIBQAAAAJjZAAAAAJfMgQAAAACYkIIBQAAAAJjZAAAAAJfMwQAAAACYkMIBQAAAAJjZAAAAAJfNAQAAAACY2UJAABrAAAAAwkAAGsAAAADBQAAAAJieAUAAAACYVQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAACYkMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04JAABkAAAAAgAAAAAAAAAAZAUAAAACYU8AAAAAAAAAAGQEAAAAAmFMCQEAAAAFdmFsdWUAAAABCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABawQAAAACYU0JAQAAAAV2YWx1ZQAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFBAwkBAAAAAiE9AAAAAgUAAAACYWsFAAAAAmFICQAAAgAAAAECAAAAN1RoZXJlIGlzIG5vIGFjdGl2ZSBsYXVuY2hwYWQgb3IgdGhpcyBsYXVuY2hwYWQgaXMgZW5kZWQDCQAAZgAAAAIFAAAAAmFMBQAAAAZoZWlnaHQJAAACAAAAAQIAAAAeTGF1bmNocGFkIHNhbGUgbm90IHN0YXJ0ZWQgeWV0AwkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgUAAAACYUwFAAAAAmFNCQAAAgAAAAECAAAAFExhdW5jaHBhZCBzYWxlIGVuZGVkAwMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAmFFAAAACHBheW1lbnRzAAAAAAAAAAABBgkBAAAAAiE9AAAAAgUAAAACYmYFAAAAAmJvCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABhPbmUgYXR0YWNoZWQgcGF5bWVudCBpbiAFAAAAAmJxAgAAAAkgZXhwZWN0ZWQDCQAAZwAAAAIFAAAAAmNjBQAAAAJhagkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARWW91IGNhbiBidXkgb25seSAJAAGkAAAAAQUAAAACYWoCAAAAC2FsbG9jYXRpb25zAwMJAQAAAAIhPQAAAAIFAAAAAmNlBQAAAAJiZQkBAAAAAiE9AAAAAgkAAGgAAAACBQAAAAJjZQAAAAAAAAAAAgUAAAACYmUHCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAMldyb25nIHBheW1lbnQuIFlvdSBjYW4gYnV5IDEgb3IgMiBhbGxvY2F0aW9ucyBmb3IgCQABpAAAAAEFAAAAAmNlBQAAAAJicQIAAAAPIHBlciBhbGxvY2F0aW9uBAAAAAJjZgkAAGkAAAACBQAAAAJiZQUAAAACY2UEAAAAAmJXAwkAAAAAAAACBQAAAAJibwUAAAACYWgJAAP8AAAABAUAAAACYWcCAAAADGxvY2tOZXV0cmlubwUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAJiZgUAAAACYmUFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAACYlcFAAAAAmJXBAAAAAJiWAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFZCQAAZAAAAAIFAAAAAmNjBQAAAAJjZgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFYCQAAZAAAAAIFAAAAAmNhBQAAAAJiZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFCCQAAZAAAAAIFAAAAAmNiBQAAAAJiZQUAAAADbmlsAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAXkJAAROAAAAAgUAAAACYlgJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAF5BQAAAAJibAUAAAADbmlsBQAAAAJiWAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAACYUUBAAAAGWNvbW1pdEhpZ2hDb21wZXRpdGlvblNhbGUAAAACAAAAAmFIAAAAAmJsCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUMAAAAABAAAAAJjZwkABRQAAAACCAkAAZEAAAACCAUAAAACYUUAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAACYUUAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAACYmUIBQAAAAJjZwAAAAJfMQQAAAACYmYIBQAAAAJjZwAAAAJfMgQAAAACY2gJAQAAAAJhRgAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFKBAAAAAJibwgFAAAAAmNoAAAAAl8xBAAAAAJicAgFAAAAAmNoAAAAAl8yBAAAAAJicQgFAAAAAmNoAAAAAl8zBAAAAAJicggFAAAAAmNoAAAAAl80BAAAAAJhTAkBAAAABXZhbHVlAAAAAQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAWsEAAAAAmFNCQEAAAAFdmFsdWUAAAABCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABQQQAAAACY2kJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFWAAAAAAAAAAAABAAAAAJjagkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAU0HAwkBAAAAAiE9AAAAAgUAAAACYWsFAAAAAmFICQAAAgAAAAECAAAAN1RoZXJlIGlzIG5vIGFjdGl2ZSBsYXVuY2hwYWQgb3IgdGhpcyBsYXVuY2hwYWQgaXMgZW5kZWQDCQEAAAABIQAAAAEFAAAAAmNqCQAAAgAAAAECAAAANFRoZXJlIGlzIG5vIGhpZ2ggY29tcGV0aXRpb24gc2FsZSBmb3IgdGhpcyBsYXVuY2hwYWQDCQAAZgAAAAIFAAAAAmFMBQAAAAZoZWlnaHQJAAACAAAAAQIAAAAeTGF1bmNocGFkIHNhbGUgbm90IHN0YXJ0ZWQgeWV0AwkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgUAAAACYUwFAAAAAmFNCQAAAgAAAAECAAAAFExhdW5jaHBhZCBzYWxlIGVuZGVkAwMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAmFFAAAACHBheW1lbnRzAAAAAAAAAAABBgkBAAAAAiE9AAAAAgUAAAACYmYFAAAAAmJvCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABhPbmUgYXR0YWNoZWQgcGF5bWVudCBpbiAFAAAAAmJxAgAAAAkgZXhwZWN0ZWQEAAAAAmJ4CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAXIEAAAAAmFQCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAXEEAAAAAmNrCQEAAAACYUYAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAW4EAAAAAmJ6CAUAAAACY2sAAAACXzEEAAAAAmJBCAUAAAACY2sAAAACXzIEAAAAAmJCCAUAAAACY2sAAAACXzMEAAAAAmJDCAUAAAACY2sAAAACXzQEAAAAAmJECQAAawAAAAMFAAAAAmFQBQAAAAJieAkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAAJiQwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAACYkUJAABrAAAAAwUAAAACYkQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABTAAAAAAAAAAAZAQAAAACYkYJAABpAAAAAgUAAAACYmUJAABkAAAAAgUAAAACYkQFAAAAAmJFBAAAAAJjbAkAAGgAAAACBQAAAAJiRgkAAGQAAAACBQAAAAJiRAUAAAACYkUEAAAAAmJJCQAAZQAAAAIFAAAAAmJlBQAAAAJjbAMJAAAAAAAAAgUAAAACYkYAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADE5vdCBlbm91Z2h0IAUAAAACYnECAAAADyB0byBidXkgdGlja2V0cwMJAQAAAAIhPQAAAAIFAAAAAmJJAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAWV3JvbmcgcGF5bWVudC4gVG8gYnV5IAkAAaQAAAABBQAAAAJiRgIAAAAYdGlja2V0cyB5b3UgbmVlZCB0byBwYXkgCQABpAAAAAEFAAAAAmNsBQAAAAJicQQAAAACYlMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFVAgAAAAAEAAAAAmJUCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAU4EAAAAAmJVCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABCQAAZAAAAAIFAAAAAmJUAAAAAAAAAAABAgAAAAEtCQABpAAAAAEJAABkAAAAAgUAAAACYlQFAAAAAmJGBAAAAAJiVgkAASwAAAACBQAAAAJiUwMJAQAAAAIhPQAAAAIFAAAAAmJTAgAAAAAJAAEsAAAAAgIAAAABLAUAAAACYlUJAAEsAAAAAgIAAAAABQAAAAJiVQQAAAACYlcDCQAAAAAAAAIFAAAAAmJvBQAAAAJhaAkAA/wAAAAEBQAAAAJhZwIAAAAMbG9ja05ldXRyaW5vBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAAmJmBQAAAAJiZQUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAJiVwUAAAACYlcEAAAAAmJYCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAVYJAABkAAAAAgUAAAACY2kFAAAAAmJGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAU4JAABkAAAAAgUAAAACYlQFAAAAAmJGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAABVQUAAAACYlYFAAAAA25pbAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAF5CQAETgAAAAIFAAAAAmJYCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAABeQUAAAACYmwFAAAAA25pbAUAAAACYlgJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAmFFAQAAAAhmaW5hbGlzZQAAAAMAAAACYUgAAAACY20AAAACY24JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAJhQwAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAJhRAAAAAEFAAAAAmFFBAAAAAJjbwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAF6BAAAAAJjcAkAAlgAAAABCQAB9wAAAAEJAADLAAAAAgkAAZoAAAABBQAAAAJjbQkAAZsAAAABBQAAAAJjbgMJAQAAAAIhPQAAAAIFAAAAAmNwBQAAAAJjbwkAAAIAAAABAgAAABx2cmYgSGVpZ2h0IGhhc2ggbm90IG1hdGNoaW5nBAAAAAJjcQkBAAAAAmFGAAAAAQkBAAAABXZhbHVlAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUoEAAAAAmJvCAUAAAACY3EAAAACXzEEAAAAAmJwCAUAAAACY3EAAAACXzIEAAAAAmJxCAUAAAACY3EAAAACXzMEAAAAAmJyCAUAAAACY3EAAAACXzQEAAAAAmFLCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAWkEAAAAAmFPCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAW0EAAAAAmNyCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUwEAAAAAmNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABRAAAAAAAAAAAAAQAAAACY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABcAQAAAACY3UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFQAAAAAAAAAAAABAAAAAJjdgkAAGsAAAADBQAAAAJjdAUAAAACYU8AAAAAAAAAAGQEAAAAAmN3CQAAawAAAAMFAAAAAmN1BQAAAAJjcgAAAAAAAAAAZAQAAAACY3gJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABQwQAAAACY3kJAABrAAAAAwUAAAACY3gFAAAAAmFPAAAAAAAAAABkBAAAAAJjegkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAAmN0BQAAAAJjeAUAAAACY3YFAAAAAmN5BQAAAAJjdQUAAAACY3cDCQAAZgAAAAIFAAAAAmNzCQAAZAAAAAIFAAAAAmN0BQAAAAJjeAkAAAIAAAABAgAAAChDYW4ndCB0cmFuc2ZlciBuZWdhdGl2ZSB2YWx1ZSB0byBwcm9qZWN0BAAAAAJiVwMJAAAAAAAAAgUAAAACYm8FAAAAAmFoCQAD/AAAAAQFAAAAAmFnAgAAAA51bmxvY2tOZXV0cmlubwkABEwAAAACBQAAAAJjegkABEwAAAACCQACWAAAAAEFAAAAAmFoBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAACYlcFAAAAAmJXCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAWwFAAAABmhlaWdodAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAJhSwkAAGUAAAACCQAAZAAAAAIJAABkAAAAAgUAAAACY3QFAAAAAmN1BQAAAAJjeAUAAAACY3MFAAAAAmJvCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAAmFmCQAAZAAAAAIJAABkAAAAAgUAAAACY3YFAAAAAmN5BQAAAAJjdwUAAAACYm8FAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAACYUUBAAAABWNsYWltAAAAAQAAAAJhSAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAAmFDAAAAAAQAAAACY0EJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFTAAAAAAAAAAAABAAAAAJjQgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAVYAAAAAAAAAAAAEAAAAAmNjCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAABWQAAAAAAAAAAAAQAAAACY0MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFaBwQAAAACY0QJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAJjRAAAAAAAAAAAAAkAAAIAAAABAgAAADFZb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSByZXN1bHRzIGFyZSBub3QgZmluYWxpemVkAwUAAAACY0MJAAACAAAAAQIAAAAXWW91IGFyZSBhbHJlYWR5IGNsYWltZWQDAwMJAAAAAAAAAgUAAAACY0EAAAAAAAAAAAAJAAAAAAAAAgUAAAACY2MAAAAAAAAAAAAHCQAAAAAAAAIFAAAAAmNCAAAAAAAAAAAABwkAAAIAAAABAgAAAC5Zb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSB5b3UgZG9uJ3QgYnV5IGFueXRoaW5nBAAAAAJjRQkBAAAAAmFGAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUoJAAJYAAAAAQUAAAACYWgEAAAAAmJvCAUAAAACY0UAAAACXzEEAAAAAmJwCAUAAAACY0UAAAACXzIEAAAAAmJxCAUAAAACY0UAAAACXzMEAAAAAmJyCAUAAAACY0UAAAACXzQEAAAAAmNGCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAACYWEAAAAAAAAAAAAEAAAAAmNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAACYWIAAAAAAAAAAAAEAAAAAmNICQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAABVwAAAAAAAAAAAAQAAAACYU8JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABbQQAAAACY3IJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFMAAAAAAAAAAAABAAAAAJjSQkAAZcAAAABCQAETAAAAAIFAAAAAmNjCQAETAAAAAIFAAAAAmNIBQAAAANuaWwEAAAAAmJ4CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAXIEAAAAAmFQCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAXEEAAAAAmNKCQEAAAACYUYAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAW4EAAAAAmJ6CAUAAAACY0oAAAACXzEEAAAAAmJBCAUAAAACY0oAAAACXzIEAAAAAmJCCAUAAAACY0oAAAACXzMEAAAAAmJDCAUAAAACY0oAAAACXzQEAAAAAmJECQAAawAAAAMFAAAAAmFQBQAAAAJieAkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAAJiQwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAACYVQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABdgQAAAACY0sJAABkAAAAAgkAAGQAAAACCQAAaAAAAAIFAAAAAmNGBQAAAAJhUAkAAGgAAAACBQAAAAJjSQUAAAACYVQJAABoAAAAAgUAAAACY0cFAAAAAmFQBAAAAAJjTAkAAGgAAAACCQAAZQAAAAIFAAAAAmNjBQAAAAJjSQUAAAACYVQEAAAAAmNNCQAAawAAAAMJAABrAAAAAwUAAAACY0wFAAAAAmJ4CQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAAAmJDAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOCQAAZAAAAAIAAAAAAAAAAGQFAAAAAmFPAAAAAAAAAABkBAAAAAJjTgkAAGsAAAADCQAAaAAAAAIJAABlAAAAAgUAAAACY0EFAAAAAmNGBQAAAAJiRAkAAGQAAAACAAAAAAAAAABkBQAAAAJhTwAAAAAAAAAAZAQAAAACY08JAABrAAAAAwkAAGgAAAACCQAAZQAAAAIFAAAAAmNCBQAAAAJjRwUAAAACYkQJAABkAAAAAgAAAAAAAAAAZAUAAAACY3IAAAAAAAAAAGQEAAAAAmNQCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAABUgAAAAAAAAAAAAMDAwkAAGYAAAACAAAAAAAAAAAABQAAAAJjTQYJAABmAAAAAgAAAAAAAAAAAAUAAAACY04GCQAAZgAAAAIAAAAAAAAAAAAFAAAAAmNPCQAAAgAAAAECAAAAUkVycm9yIHdpdGggYWxsb3dlZCBhbGxvY2F0aW9uIHBhcmFtIG9yIHdvbm5lZCB0aWNrZXRzIHBhcmFtIHBsZWFzZSBjb250YWN0IHN1cHBvcnQEAAAAAmNRCQAAZQAAAAIJAABkAAAAAgkAAGQAAAACBQAAAAJjTgUAAAACY08FAAAAAmNNBQAAAAJjUAQAAAACY1IDCQAAZgAAAAIFAAAAAmNRAAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAJhRQAAAAZjYWxsZXIFAAAAAmNRBQAAAAJibwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFSBQAAAAJjUQUAAAADbmlsBQAAAANuaWwEAAAAAmJXAwMJAABmAAAAAgUAAAACY1EAAAAAAAAAAAAJAAAAAAAAAgUAAAACYm8FAAAAAmFoBwkAA/wAAAAEBQAAAAJhZwIAAAAOdW5sb2NrTmV1dHJpbm8JAARMAAAAAgUAAAACY1EJAARMAAAAAgkAAlgAAAABBQAAAAJhaAUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAAAmJXBQAAAAJiVwQAAAACY1MJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUsCAAAACGNsYWltQWxsAgAAAAEsAwkAAAAAAAACCQABkQAAAAIFAAAAAmNTAAAAAAAAAAAAAgAAAAhjbGFpbUFsbAQAAAACY1QDCQAAZgAAAAIFAAAAAmNLAAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAJhRQAAAAZjYWxsZXIFAAAAAmNLBQAAAAJiegUAAAADbmlsBQAAAANuaWwJAAROAAAAAgkABE4AAAACCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAVoGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAVEFAAAAAmNLBQAAAANuaWwFAAAAAmNUBQAAAAJjUgMJAAAAAAAAAgkAAZEAAAACBQAAAAJjUwAAAAAAAAAAAAIAAAALY2xhaW1QZXJpb2QEAAAAAmNVCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAmFFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAJhSAUAAAABUQAAAAAAAAAAAAQAAAACY1YJAQAAAAV2YWx1ZQAAAAEJAAS2AAAAAQkAAZEAAAACBQAAAAJjUwAAAAAAAAAAAgQAAAACY1cJAABkAAAAAgkBAAAABXZhbHVlAAAAAQkABLYAAAABCQABkQAAAAIFAAAAAmNTAAAAAAAAAAADBQAAAAJjRAQAAAACY1gJAABkAAAAAgUAAAACY1YFAAAAAmNXBAAAAAJjWQkAAGsAAAADBQAAAAJjSwkBAAAABXZhbHVlAAAAAQkABLYAAAABCQABkQAAAAIFAAAAAmNTAAAAAAAAAAABAAAAAAAAAABkBAAAAAJjWgkAAGQAAAACBQAAAAJjWQMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAJjVwkAAGUAAAACCQAAawAAAAMJAABlAAAAAgUAAAACY0sFAAAAAmNZCQAAZQAAAAIJAAGXAAAAAQkABEwAAAACBQAAAAZoZWlnaHQJAARMAAAAAgUAAAACY1gFAAAAA25pbAUAAAACY1cFAAAAAmNWBQAAAAJjVQkAAGUAAAACAAAAAAAAAAAABQAAAAJjVQQAAAACZGEDCQAAZwAAAAIFAAAAAmNLCQAAZAAAAAIFAAAAAmNVBQAAAAJjWgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFaBgUAAAADbmlsBQAAAANuaWwDAwkAAGYAAAACBQAAAAJjWgAAAAAAAAAAAAYJAABmAAAAAgUAAAACY1EAAAAAAAAAAAAEAAAAAmNUAwkAAGYAAAACBQAAAAJjWgAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAACYUUAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAAmFIBQAAAAFRCQAAZAAAAAIFAAAAAmNVBQAAAAJjWgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAACYUUAAAAGY2FsbGVyBQAAAAJjWgUAAAACYnoFAAAAA25pbAUAAAADbmlsCQAETgAAAAIFAAAAAmNSBQAAAAJjVAkAAAIAAAABAgAAABBOb3RoaW5nIHRvIGNsYWltCQAAAgAAAAECAAAAFlVua25vd24gY2xhaW0gZnVuY3Rpb24JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAmFFAQAAABBjbGFpbUZyZWV6ZVRva2VuAAAAAQAAAAJhSAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAAmFDAAAAAAQAAAACYmEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFGBwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFsCQAAAgAAAAECAAAAMVlvdSBjYW4ndCBjbGFpbSBiZWNhdXNlIHJlc3VsdHMgYXJlIG5vdCBmaW5hbGl6ZWQDCQEAAAABIQAAAAEFAAAAAmJhCQAAAgAAAAECAAAAOVRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIHRva2VuIGZyZWV6aW5nIGZvciB0aGlzIGxhdW5jaHBhZAQAAAACYnoJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFHBAAAAAJkYgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAmFjAAAAAAAAAAAABAAAAAJhTAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAWsAAAAAAAAAAAAEAAAAAmFNCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABQQAAAAAAAAAAAAQAAAACZGMJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABSAQAAAACZGQJAABkAAAAAgkAAGQAAAACBQAAAAJhTAUAAAACYU0FAAAAAmRjAwkAAAAAAAACBQAAAAJkYgAAAAAAAAAAAAkAAAIAAAABAgAAADhZb3UgYXJlIGFscmVhZHkgY2xhaW1lZCB5b3VyIHRva2VucyBvciBub3QgcGFpZCBhbnl0aGluZwMJAABmAAAAAgUAAAACZGQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAICAAAAGVlvdXIgdG9rZW5zIGZyZWV6ZWQgdGVlbCAJAAGkAAAAAQUAAAACZGQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAmFFAAAABmNhbGxlcgUAAAACZGIFAAAAAmJ6CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAJhRQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAACYUgFAAAAAmFjAAAAAAAAAAAABQAAAANuaWwAAAACYUUBAAAAEHRyYW5zZmVyQnV5QXNzZXQAAAACAAAAAmFIAAAAAmRlCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUMAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUQAAAABBQAAAAJhRQQAAAACYUsJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAJhSAUAAAABaQQAAAACZGYJAQAAAAJhRgAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAAmFIBQAAAAFKBAAAAAJibwgFAAAAAmRmAAAAAl8xBAAAAAJicAgFAAAAAmRmAAAAAl8yBAAAAAJicQgFAAAAAmRmAAAAAl8zBAAAAAJicggFAAAAAmRmAAAAAl80CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAACYUgFAAAAAUQFAAAAAmRlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAAmFLBQAAAAJkZQUAAAACYm8FAAAAA25pbAAAAAJhRQEAAAAIc2h1dGRvd24AAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAACYUQAAAABBQAAAAJhRQMJAQAAAAEhAAAAAQUAAAACYUIJAAACAAAAAQIAAAAVREFwcCBhbHJlYWR5IGluYWN0aXZlCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAFhBwUAAAADbmlsAAAAAmFFAQAAAAhhY3RpdmF0ZQAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAJhRAAAAAEFAAAAAmFFAwUAAAACYUIJAAACAAAAAQIAAAATREFwcCBhbHJlYWR5IGFjdGl2ZQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAABYQYFAAAAA25pbAAAAAEAAAACZGcBAAAAAmRoAAAAAAQAAAACZGkEAAAAAmRqAwkAAfQAAAADCAUAAAACZGcAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJkZwAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmFxAAAAAAAAAAABAAAAAAAAAAAABAAAAAJkawMJAAH0AAAAAwgFAAAAAmRnAAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACZGcAAAAGcHJvb2ZzAAAAAAAAAAABBQAAAAJhcgAAAAAAAAAAAQAAAAAAAAAAAAQAAAACZGwDCQAB9AAAAAMIBQAAAAJkZwAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAmRnAAAABnByb29mcwAAAAAAAAAAAgUAAAACYXMAAAAAAAAAAAEAAAAAAAAAAAAJAABnAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAAmRqBQAAAAJkawUAAAACZGwAAAAAAAAAAAIEAAAAAmRtAwMDCQAB9AAAAAMIBQAAAAJkZwAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAmRnAAAABnByb29mcwAAAAAAAAAAAAUAAAACYXEGCQAB9AAAAAMIBQAAAAJkZwAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAmRnAAAABnByb29mcwAAAAAAAAAAAAUAAAACYXIGCQAB9AAAAAMIBQAAAAJkZwAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAmRnAAAABnByb29mcwAAAAAAAAAAAAUAAAACYXMGCQAB9AAAAAMIBQAAAAJkZwAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAmRnAAAABnByb29mcwAAAAAAAAAAAAUAAAACYWkEAAAAAmFuBQAAAAJkZwMJAAABAAAAAgUAAAACYW4CAAAAD0RhdGFUcmFuc2FjdGlvbgQAAAACZG4FAAAAAmFuAwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAJhZAUAAAABZQcFAAAAAmRtBwUAAAACZGnSw9by", "height": 3002841, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2i1f3MZy4N2XRViDQmscpWnS2paEVtd6RT1nbnoiGcUE Next: 3YkfHu5VyarJRzwskgvs4mKy743nknNqxZB9j5CeQBDf Diff:
OldNewDifferences
465465 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
466466 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
467467 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
468- let swopfiHCBuyAssetAmount = valueOrElse(getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
468+ let swopfiHCBuyAssetAmount = valueOrElse(getInteger(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
469469 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
470470 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
471471 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
504504 else false)
505505 then throw("You can't claim because you don't buy anything")
506506 else {
507- let $t02541325563 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
508- let buyAssetId = $t02541325563._1
509- let buyAssetStrId = $t02541325563._2
510- let buyAssetName = $t02541325563._3
511- let buyAssetDecimals = $t02541325563._4
507+ let $t02540825585 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
508+ let buyAssetId = $t02540825585._1
509+ let buyAssetStrId = $t02540825585._2
510+ let buyAssetName = $t02540825585._3
511+ let buyAssetDecimals = $t02540825585._4
512512 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
513513 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
514514 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
515515 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
516- let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
516+ let commissionHC = valueOrElse(getInteger(this, (toString(launchpadId) + keyHighCompetitionComission)), 0)
517517 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518518 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519519 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02646926613 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02646926613._1
522- let tokenStrAssetId = $t02646926613._2
523- let tokenAssetName = $t02646926613._3
524- let tokenDecimals = $t02646926613._4
520+ let $t02650126645 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521+ let tokenId = $t02650126645._1
522+ let tokenStrAssetId = $t02650126645._2
523+ let tokenAssetName = $t02650126645._3
524+ let tokenDecimals = $t02650126645._4
525525 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
526526 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
527527 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
548548 else 0
549549 if ((inv == inv))
550550 then {
551- let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), ""), ",")
552- if (if ((size(claimedParams) == 0))
553- then true
554- else (claimedParams[0] == "claimAll"))
551+ let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), "claimAll"), ",")
552+ if ((claimedParams[0] == "claimAll"))
555553 then {
556554 let transferTokens = if ((transferTokensAmount > 0))
557555 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
618616 @Callable(i)
619617 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
620618 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
621- let $t03281932969 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
622- let buyAssetId = $t03281932969._1
623- let buyAssetStrId = $t03281932969._2
624- let buyAssetName = $t03281932969._3
625- let buyAssetDecimals = $t03281932969._4
619+ let $t03283032980 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
620+ let buyAssetId = $t03283032980._1
621+ let buyAssetStrId = $t03283032980._2
622+ let buyAssetName = $t03283032980._3
623+ let buyAssetDecimals = $t03283032980._4
626624 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
627625 }))
628626
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyActive = "active"
55
66 let keyAdminPubKey1 = "admin_pub_1"
77
88 let keyAdminPubKey2 = "admin_pub_2"
99
1010 let keyAdminPubKey3 = "admin_pub_3"
1111
1212 let keyLaunchpadDataTransactionStatus = "launchpad_data_transaction_status"
1313
1414 let keyLaunchpadNextId = "launchpad_next_id"
1515
1616 let keyLaunchpadActiveId = "launchpad_active_id"
1717
1818 let keyInitCaller = "init_caller"
1919
2020 let keyAddress = "_address"
2121
2222 let keyInitHeight = "_init_height"
2323
2424 let keyStartHeight = "_start_height"
2525
2626 let keyFinaliseHeight = "_finalise_height"
2727
2828 let keyComission = "_comission"
2929
3030 let keyAssetId = "_asset_id"
3131
3232 let keyTotalTokenAmount = "_total_token_amount"
3333
3434 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
3535
3636 let keyTokensPerTicket = "_tokens_per_ticket"
3737
3838 let keyPricePerToken = "_price_per_token"
3939
4040 let keySwopPerTicket = "_swop_per_ticket"
4141
4242 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4343
4444 let keyCampaignTokensAmount = "_tokens_access_list"
4545
4646 let keyTokensPerAllocation = "_tokens_per_allocation"
4747
4848 let keyTicketLastNumber = "_ticket_last_number"
4949
5050 let keyGovernanceStaked = "_SWOP_amount"
5151
5252 let keyUserRefId = "_ref_id"
5353
5454 let keyVerifyHash = "_verify_hash"
5555
5656 let keyDuration = "_duration"
5757
5858 let keyAmountBuyAssetInMarketing = "_total_purchased_buy_asset_in_marketing"
5959
6060 let keyAmountBuyAssetInMarketingFinalized = "_total_purchased_buy_asset_in_marketing_finalized"
6161
6262 let keyTransferBuyAsset = "_transfer_buy_asset"
6363
6464 let keyFreezSwopDuration = "_freeze_swop_duration"
6565
6666 let keyFreezeAdditionalToken = "_freeze_additional_token"
6767
6868 let keyFreezeTokenId = "_freeze_token_id"
6969
7070 let keyFreezeTokenDuration = "_freeze_token_duration"
7171
7272 let keyFreezeTokenPerTicket = "_freeze_token_per_ticket"
7373
7474 let keyBuyToken = "_buy_token"
7575
7676 let keyClaimParams = "_claim_params"
7777
7878 let keyHighCompetitionComission = "_high_competition_comission"
7979
8080 let keyHighCompetitionSale = "_high_competition_sale"
8181
8282 let keyHCTicketLastNumber = "_high_competition_ticket_last_number"
8383
8484 let keyHighCompetitionAmount = "_tickets_high_competition"
8585
8686 let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
8787
8888 let keyUserClaimedTokens = "_claimed_tokens"
8989
9090 let keyUserClaimedBuyTokens = "_claimed_buy_tokens"
9191
9292 let keyUserBoughtTicketsAmount = "_bought_tickets"
9393
9494 let keyUserTickets = "_tickets_number"
9595
9696 let keyUserHCTickets = "_tickets_number_high_competition"
9797
9898 let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9999
100100 let keyUserAvailableAllocations = "_available_purchase_marketing"
101101
102102 let keyUserAmountBuyAssetInMarketing = "_purchased_buy_asset_in_marketing"
103103
104104 let keyUserBoughtAllocations = "_bought_allocations"
105105
106106 let keyUserClaimStatus = "_claim_status"
107107
108108 let keyUserWinnedTicketsAmount = "_tickets_result"
109109
110110 let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
111111
112112 let keyUserFreezeToken = "_freeze_token_amount"
113113
114114 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
115115
116116 let governance = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
117117
118118 let commissionWallet = Address(base58'3PGYafJ2GuqPckmZNywet8moiPnBHz51Xdg')
119119
120120 let stakingUSDNAddress = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
121121
122122 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
123123
124124 let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
125125
126126 let maxAllocationsAmount = 2
127127
128128 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
129129
130130 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
131131 case string: String =>
132132 fromBase58String(string)
133133 case nothing =>
134134 throw("Admin public key is empty")
135135 }
136136
137137
138138 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
139139
140140 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
141141
142142 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
143143
144144 func getAssetInfo (assetId) = match assetId {
145145 case id: ByteVector =>
146146 let stringId = toBase58String(id)
147147 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
148148 $Tuple3(stringId, info.name, info.decimals)
149149 case waves: Unit =>
150150 $Tuple3("WAVES", "WAVES", 8)
151151 case _ =>
152152 throw("Match error")
153153 }
154154
155155
156156 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
157157
158158
159159 func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
160160
161161
162162 let active = valueOrElse(getBoolean(this, keyActive), true)
163163
164164 func isActive () = if (active)
165165 then unit
166166 else throw("DApp is inactive at this moment")
167167
168168
169169 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
170170 then unit
171171 else throw("Only admin can call this function")
172172
173173
174174 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
175175 then $Tuple4(unit, "WAVES", "WAVES", 8)
176176 else {
177177 let stringId = assetStr
178178 let id = fromBase58String(assetStr)
179179 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
180180 $Tuple4(id, stringId, info.name, info.decimals)
181181 }
182182
183183
184184 @Callable(i)
185185 func hashingRandom (launchpadId,hash) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]))
186186
187187
188188
189189 @Callable(i)
190190 func initCaller (address) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry(keyInitCaller, address)]))
191191
192192
193193
194194 @Callable(i)
195195 func init (projectAddress,startHeight,duration,buyToken,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket,swopFreezeDuration,claimParams,HighCompetitionSale,highCompetitionComission,highCompetitionTicketsAmount,freezeAdditionalToken,freezeParams) = valueOrElse(isActive(), if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
196196 then throw("Only project admin can call init function")
197197 else if ((size(i.payments) != 1))
198198 then throw("One attached payment expected")
199199 else if ((height > startHeight))
200200 then throw("Start height must be greater than blockchain height")
201201 else if (if (freezeAdditionalToken)
202202 then (size(freezeParams) != 3)
203203 else false)
204204 then throw("Freeze params list must have 3 items")
205205 else {
206206 let launchpadId = getLaunchpadNextId()
207207 let launchpadIdStr = toString(launchpadId)
208208 let $t063786453 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
209209 let pmtAmount = $t063786453._1
210210 let pmtAssetId = $t063786453._2
211211 let $t064626535 = getAssetInfo(pmtAssetId)
212212 let pmtStrAssetId = $t064626535._1
213213 let pmtAssetName = $t064626535._2
214214 let pmtDecimals = $t064626535._3
215215 let freezeAdditionalEntry = if (freezeAdditionalToken)
216216 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
217217 else nil
218218 ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyHCTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyHighCompetitionAmount), highCompetitionTicketsAmount), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
219219 })
220220
221221
222222
223223 @Callable(i)
224224 func commitSwopfiSale (launchpadId,refId) = valueOrElse(isActive(), {
225225 let $t091419216 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
226226 let pmtAmount = $t091419216._1
227227 let pmtAssetId = $t091419216._2
228228 let $t092219371 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
229229 let buyAssetId = $t092219371._1
230230 let buyAssetStrId = $t092219371._2
231231 let buyAssetName = $t092219371._3
232232 let buyAssetDecimals = $t092219371._4
233233 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
234234 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
235235 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
236236 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
237237 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
238238 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
239239 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
240240 if ((activeLaunchpadId != launchpadId))
241241 then throw("There is no active launchpad or this launchpad is ended")
242242 else if ((startHeight > height))
243243 then throw("Launchpad sale not started yet")
244244 else if ((height > (startHeight + duration)))
245245 then throw("Launchpad sale ended")
246246 else if (if (!(freezeAdditionalToken))
247247 then if ((size(i.payments) != 1))
248248 then true
249249 else (pmtAssetId != buyAssetId)
250250 else false)
251251 then throw((("One attached payment in " + buyAssetName) + " expected"))
252252 else if (if (freezeAdditionalToken)
253253 then if ((size(i.payments) != 2))
254254 then true
255255 else (pmtAssetId != buyAssetId)
256256 else false)
257257 then {
258258 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
259259 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
260260 }
261261 else if (if ((0 >= allowedTicketsAmountAll))
262262 then true
263263 else (0 >= allowedTicketsAmount))
264264 then throw("Not enought SWOP in staking to buy tickets")
265265 else {
266266 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
267267 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
268268 let $t01118311327 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
269269 let tokenId = $t01118311327._1
270270 let tokenStrAssetId = $t01118311327._2
271271 let tokenAssetName = $t01118311327._3
272272 let tokenDecimals = $t01118311327._4
273273 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
274274 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
275275 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
276276 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
277277 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
278278 let change = (pmtAmount - allowedBuyPriceWithComission)
279279 if ((buyTicketAmount == 0))
280280 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
281281 else if ((change != 0))
282282 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
283283 else {
284284 let freezeAdditionalEntry = if (freezeAdditionalToken)
285285 then {
286286 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
287287 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
288288 let $t01249112578 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
289289 let pmtAmountFreeze = $t01249112578._1
290290 let pmtAssetIdFreeze = $t01249112578._2
291291 let $t01259512686 = getAssetInfo(pmtAssetId)
292292 let pmtFreezeStrAssetId = $t01259512686._1
293293 let pmtFreezeAssetName = $t01259512686._2
294294 let pmtFreezeDecimals = $t01259512686._3
295295 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
296296 if (if ((pmtFreezeStrAssetId != freezeTokenId))
297297 then true
298298 else (needFreezeTokens != pmtAmountFreeze))
299299 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
300300 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
301301 }
302302 else nil
303303 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
304304 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
305305 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
306306 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
307307 then ("," + boughtRange)
308308 else ("" + boughtRange)))
309309 let inv = if ((buyAssetId == USDN))
310310 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
311311 else 0
312312 if ((inv == inv))
313313 then {
314314 let baseEntry = ([IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount), (boughtTicketsAmount + allowedBuyTicketAmount)), IntegerEntry((toString(launchpadId) + keyTicketLastNumber), (lastBoughtTicketNumber + allowedBuyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets), newUserBoughtTicketsNumbers)] ++ freezeAdditionalEntry)
315315 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
316316 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
317317 else baseEntry
318318 }
319319 else throw("Strict value is not equal to itself.")
320320 }
321321 }
322322 })
323323
324324
325325
326326 @Callable(i)
327327 func commitAccessListSale (launchpadId,refId) = valueOrElse(isActive(), {
328328 let $t01475714832 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
329329 let pmtAmount = $t01475714832._1
330330 let pmtAssetId = $t01475714832._2
331331 let $t01483714987 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
332332 let buyAssetId = $t01483714987._1
333333 let buyAssetStrId = $t01483714987._2
334334 let buyAssetName = $t01483714987._3
335335 let buyAssetDecimals = $t01483714987._4
336336 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
337337 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
338338 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
339339 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
340340 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
341341 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
342342 let $t01565615800 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
343343 let tokenId = $t01565615800._1
344344 let tokenStrAssetId = $t01565615800._2
345345 let tokenAssetName = $t01565615800._3
346346 let tokenDecimals = $t01565615800._4
347347 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
348348 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
349349 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
350350 if ((activeLaunchpadId != launchpadId))
351351 then throw("There is no active launchpad or this launchpad is ended")
352352 else if ((startHeight > height))
353353 then throw("Launchpad sale not started yet")
354354 else if ((height > (startHeight + duration)))
355355 then throw("Launchpad sale ended")
356356 else if (if ((size(i.payments) != 1))
357357 then true
358358 else (pmtAssetId != buyAssetId))
359359 then throw((("One attached payment in " + buyAssetName) + " expected"))
360360 else if ((boughtAllocations >= maxAllocationsAmount))
361361 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
362362 else if (if ((allocationPriceWithComission != pmtAmount))
363363 then ((allocationPriceWithComission * 2) != pmtAmount)
364364 else false)
365365 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
366366 else {
367367 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
368368 let inv = if ((buyAssetId == USDN))
369369 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
370370 else 0
371371 if ((inv == inv))
372372 then {
373373 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations), (boughtAllocations + buyAllocationsAmount)), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing), (userUsdnInMarketing + pmtAmount)), IntegerEntry((toString(launchpadId) + keyAmountBuyAssetInMarketing), (usdnInMarketing + pmtAmount))]
374374 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
375375 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
376376 else baseEntry
377377 }
378378 else throw("Strict value is not equal to itself.")
379379 }
380380 })
381381
382382
383383
384384 @Callable(i)
385385 func commitHighCompetitionSale (launchpadId,refId) = valueOrElse(isActive(), {
386386 let $t01805818133 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
387387 let pmtAmount = $t01805818133._1
388388 let pmtAssetId = $t01805818133._2
389389 let $t01813818288 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
390390 let buyAssetId = $t01813818288._1
391391 let buyAssetStrId = $t01813818288._2
392392 let buyAssetName = $t01813818288._3
393393 let buyAssetDecimals = $t01813818288._4
394394 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
395395 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
396396 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
397397 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
398398 if ((activeLaunchpadId != launchpadId))
399399 then throw("There is no active launchpad or this launchpad is ended")
400400 else if (!(highCompetitionSale))
401401 then throw("There is no high competition sale for this launchpad")
402402 else if ((startHeight > height))
403403 then throw("Launchpad sale not started yet")
404404 else if ((height > (startHeight + duration)))
405405 then throw("Launchpad sale ended")
406406 else if (if ((size(i.payments) != 1))
407407 then true
408408 else (pmtAssetId != buyAssetId))
409409 then throw((("One attached payment in " + buyAssetName) + " expected"))
410410 else {
411411 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
412412 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
413413 let $t01946119605 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414414 let tokenId = $t01946119605._1
415415 let tokenStrAssetId = $t01946119605._2
416416 let tokenAssetName = $t01946119605._3
417417 let tokenDecimals = $t01946119605._4
418418 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
419419 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
420420 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
421421 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
422422 let change = (pmtAmount - buyPriceWithComission)
423423 if ((buyTicketAmount == 0))
424424 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
425425 else if ((change != 0))
426426 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
427427 else {
428428 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
429429 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
430430 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
431431 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
432432 then ("," + boughtRange)
433433 else ("" + boughtRange)))
434434 let inv = if ((buyAssetId == USDN))
435435 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
436436 else 0
437437 if ((inv == inv))
438438 then {
439439 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount), (boughtHCTicketsAmount + buyTicketAmount)), IntegerEntry((toString(launchpadId) + keyHCTicketLastNumber), (lastBoughtTicketNumber + buyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets), newUserBoughtTicketsNumbers)]
440440 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
441441 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
442442 else baseEntry
443443 }
444444 else throw("Strict value is not equal to itself.")
445445 }
446446 }
447447 })
448448
449449
450450
451451 @Callable(i)
452452 func finalise (launchpadId,vrfHeight,secretWord) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
453453 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
454454 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
455455 if ((calcHash != savedHash))
456456 then throw("vrf Height hash not matching")
457457 else {
458458 let $t02221822368 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
459459 let buyAssetId = $t02221822368._1
460460 let buyAssetStrId = $t02221822368._2
461461 let buyAssetName = $t02221822368._3
462462 let buyAssetDecimals = $t02221822368._4
463463 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
464464 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
465465 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
466466 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
467467 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
468- let swopfiHCBuyAssetAmount = valueOrElse(getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
468+ let swopfiHCBuyAssetAmount = valueOrElse(getInteger(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
469469 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
470470 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
471471 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
472472 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
473473 let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
474474 if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
475475 then throw("Can't transfer negative value to project")
476476 else {
477477 let inv = if ((buyAssetId == USDN))
478478 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
479479 else 0
480480 if ((inv == inv))
481481 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
482482 else throw("Strict value is not equal to itself.")
483483 }
484484 }
485485 }))
486486
487487
488488
489489 @Callable(i)
490490 func claim (launchpadId) = valueOrElse(isActive(), {
491491 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
492492 let boughtHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
493493 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
494494 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
495495 let finalizeHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)), 0)
496496 if ((finalizeHeight == 0))
497497 then throw("You can't claim because results are not finalized")
498498 else if (userClaimStatus)
499499 then throw("You are already claimed")
500500 else if (if (if ((boughtTickets == 0))
501501 then (boughtAllocations == 0)
502502 else false)
503503 then (boughtHCTickets == 0)
504504 else false)
505505 then throw("You can't claim because you don't buy anything")
506506 else {
507- let $t02541325563 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
508- let buyAssetId = $t02541325563._1
509- let buyAssetStrId = $t02541325563._2
510- let buyAssetName = $t02541325563._3
511- let buyAssetDecimals = $t02541325563._4
507+ let $t02540825585 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
508+ let buyAssetId = $t02540825585._1
509+ let buyAssetStrId = $t02540825585._2
510+ let buyAssetName = $t02540825585._3
511+ let buyAssetDecimals = $t02540825585._4
512512 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
513513 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
514514 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
515515 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
516- let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
516+ let commissionHC = valueOrElse(getInteger(this, (toString(launchpadId) + keyHighCompetitionComission)), 0)
517517 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518518 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519519 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02646926613 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02646926613._1
522- let tokenStrAssetId = $t02646926613._2
523- let tokenAssetName = $t02646926613._3
524- let tokenDecimals = $t02646926613._4
520+ let $t02650126645 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521+ let tokenId = $t02650126645._1
522+ let tokenStrAssetId = $t02650126645._2
523+ let tokenAssetName = $t02650126645._3
524+ let tokenDecimals = $t02650126645._4
525525 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
526526 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
527527 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
528528 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
529529 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
530530 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
531531 let buyAssetForHCUnwonnedTickets = fraction(((boughtHCTickets - wonnedHCTickets) * ticketPrice), (100 + commissionHC), 100)
532532 let claimedBuyToken = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens)), 0)
533533 if (if (if ((0 > buyAssetForAllocations))
534534 then true
535535 else (0 > buyAssetForUnwonnedTickets))
536536 then true
537537 else (0 > buyAssetForHCUnwonnedTickets))
538538 then throw("Error with allowed allocation param or wonned tickets param please contact support")
539539 else {
540540 let returnedBuyAssetAmount = (((buyAssetForUnwonnedTickets + buyAssetForHCUnwonnedTickets) + buyAssetForAllocations) - claimedBuyToken)
541541 let transferBuyAsset = if ((returnedBuyAssetAmount > 0))
542542 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens), returnedBuyAssetAmount)]
543543 else nil
544544 let inv = if (if ((returnedBuyAssetAmount > 0))
545545 then (buyAssetId == USDN)
546546 else false)
547547 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
548548 else 0
549549 if ((inv == inv))
550550 then {
551- let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), ""), ",")
552- if (if ((size(claimedParams) == 0))
553- then true
554- else (claimedParams[0] == "claimAll"))
551+ let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), "claimAll"), ",")
552+ if ((claimedParams[0] == "claimAll"))
555553 then {
556554 let transferTokens = if ((transferTokensAmount > 0))
557555 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
558556 else nil
559557 (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), transferTokensAmount)] ++ transferTokens) ++ transferBuyAsset)
560558 }
561559 else if ((claimedParams[0] == "claimPeriod"))
562560 then {
563561 let claimedTokens = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens)), 0)
564562 let unlockPeriod = value(parseInt(claimedParams[2]))
565563 let blockHeight = (value(parseInt(claimedParams[3])) + finalizeHeight)
566564 let unlockHeight = (unlockPeriod + blockHeight)
567565 let allowedStartAmount = fraction(transferTokensAmount, value(parseInt(claimedParams[1])), 100)
568566 let allowedTokensAmount = (allowedStartAmount + (if ((height > blockHeight))
569567 then (fraction((transferTokensAmount - allowedStartAmount), (min([height, unlockHeight]) - blockHeight), unlockPeriod) - claimedTokens)
570568 else (0 - claimedTokens)))
571569 let claimStatusEntry = if ((transferTokensAmount >= (claimedTokens + allowedTokensAmount)))
572570 then [BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)]
573571 else nil
574572 if (if ((allowedTokensAmount > 0))
575573 then true
576574 else (returnedBuyAssetAmount > 0))
577575 then {
578576 let transferTokens = if ((allowedTokensAmount > 0))
579577 then [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), (claimedTokens + allowedTokensAmount)), ScriptTransfer(i.caller, allowedTokensAmount, tokenId)]
580578 else nil
581579 (transferBuyAsset ++ transferTokens)
582580 }
583581 else throw("Nothing to claim")
584582 }
585583 else throw("Unknown claim function")
586584 }
587585 else throw("Strict value is not equal to itself.")
588586 }
589587 }
590588 })
591589
592590
593591
594592 @Callable(i)
595593 func claimFreezeToken (launchpadId) = valueOrElse(isActive(), {
596594 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
597595 if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
598596 then throw("You can't claim because results are not finalized")
599597 else if (!(freezeAdditionalToken))
600598 then throw("There are no additional token freezing for this launchpad")
601599 else {
602600 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
603601 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
604602 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
605603 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
606604 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
607605 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
608606 if ((userTokensFreezed == 0))
609607 then throw("You are already claimed your tokens or not paid anything")
610608 else if ((blockEndHeight > height))
611609 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
612610 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
613611 }
614612 })
615613
616614
617615
618616 @Callable(i)
619617 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
620618 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
621- let $t03281932969 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
622- let buyAssetId = $t03281932969._1
623- let buyAssetStrId = $t03281932969._2
624- let buyAssetName = $t03281932969._3
625- let buyAssetDecimals = $t03281932969._4
619+ let $t03283032980 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
620+ let buyAssetId = $t03283032980._1
621+ let buyAssetStrId = $t03283032980._2
622+ let buyAssetName = $t03283032980._3
623+ let buyAssetDecimals = $t03283032980._4
626624 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
627625 }))
628626
629627
630628
631629 @Callable(i)
632630 func shutdown () = valueOrElse(isAdminCall(i), if (!(active))
633631 then throw("DApp already inactive")
634632 else [BooleanEntry(keyActive, false)])
635633
636634
637635
638636 @Callable(i)
639637 func activate () = valueOrElse(isAdminCall(i), if (active)
640638 then throw("DApp already active")
641639 else [BooleanEntry(keyActive, true)])
642640
643641
644642 @Verifier(tx)
645643 func verify () = {
646644 let multiSignedByAdmins = {
647645 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
648646 then 1
649647 else 0
650648 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
651649 then 1
652650 else 0
653651 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
654652 then 1
655653 else 0
656654 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
657655 }
658656 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
659657 then true
660658 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
661659 then true
662660 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
663661 then true
664662 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
665663 match tx {
666664 case dtx: DataTransaction =>
667665 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
668666 then signedByAdmin
669667 else false
670668 case _ =>
671669 multiSignedByAdmins
672670 }
673671 }
674672

github/deemru/w8io/3ef1775 
120.65 ms