tx · GZ8xfNNnLpZFe5iFt5ry9L1SEP8ZGCYzE29gtVRQ6d6v 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.10300000 Waves 2024.10.01 19:09 [3308012] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "GZ8xfNNnLpZFe5iFt5ry9L1SEP8ZGCYzE29gtVRQ6d6v", "fee": 10300000, "feeAssetId": null, "timestamp": 1727798824546, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "27HuTqKMoJWLveJs1U78jLuCP2W8poWDYaRZ2PTCdfstxC3WUFr1WMq3jyWs2uUTwJKPxmaCQTWi58qHe38EmYoo" ], "script": "base64:BgLnAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSBAoCCAgSBAoCCAgSAwoBCBIAEgASAwoBCBIECgIICBIECgIICBIECgIBCBIECgIBCBIECgICAhIFCgMBAQESABIECgIICBIAEgMKAQESABIECgICAhIAEgMKAQgSBAoCCAgSAwoBGBIECgIICBIECgIICBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIDCgEIEgASABIDCgEIEgMKAQgSBAoCAgISAJ8CABZLU19TRVBBUkFURV9QVUJMSUNfS0VZBwAYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFBwATS1NfQUxMT1dfUk9CT19EVUNLUwcACkRBWV9NSUxMSVMAgLiZKQAUT0xEX1NUQUtJTkdfREVBRExJTkUAmNCBq6QyAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQADcHViBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAwUWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQEgqxdXjxVn41lUQbDWcutmm8Sj02Ze1ZmGUN+YNx+yCQgBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAwkAAAIBAVQFByRtYXRjaDABIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoCQACAQINVW5rbm93biBjaGFpbgALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEGFjcmVzMkFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQNFVIM1Q5blhwTU5wVW1TbVFqUG1FejNHODV0M3puNmVBAwkAAAIBAVQFByRtYXRjaDACIzNOQlB4MUZjaXUzSlFORUdaMjFqU25UZHV0TE5HR0JVU1hoCQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAFCkRBWV9NSUxMSVMDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQAFElkeENmZ1RvdXJuYW1lbnREYXBwAAcAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwABJ0b3VybmFtZW50Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdUb3VybmFtZW50RGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0AA9hY3Jlc0Fzc2V0SWRLZXkCDGFjcmVzQXNzZXRJZAAMYWNyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUNYWNyZXNDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAALcmFuZG9tRGVsYXkAAgEJa2V5Q29tbWl0AQdhZGRyZXNzCQCsAgICD2ZpbmlzaEJsb2NrRm9yXwUHYWRkcmVzcwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQljb250aW5lbnQJAKwCAgIUcmVzVHlwZXNCeUNvbnRpbmVudF8FCWNvbnRpbmVudAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCWFzQW55TGlzdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAWwFByRtYXRjaDAFAWwJAAIBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BCWFzQm9vbGVhbgEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFzBQckbWF0Y2gwBQFzCQACAQIZZmFpbCB0byBjYXN0IGludG8gQm9vbGVhbgEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQEHaXNEaWdpdAEBcwkBCWlzRGVmaW5lZAEJALYJAQUBcwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQBD2dldFJhbmRvbU51bWJlcgMIbWF4VmFsdWUEc2FsdAdlbnRyb3B5AwkAZwIAAAUIbWF4VmFsdWUJAAIBAhZtYXhWYWx1ZSBzaG91bGQgYmUgPiAwBApyYW5kb21IYXNoCQD3AwEJAMsBAgUEc2FsdAUHZW50cm9weQkAagIJALEJAQUKcmFuZG9tSGFzaAUIbWF4VmFsdWUBCWZpbmFsVGltZQAJAJcDAQkAzAgCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCBRRPTERfU1RBS0lOR19ERUFETElORQUDbmlsAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAAtST0JPX1BSRUZJWAIEUk9CTwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgAZAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwAVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAAoAEk1JTl9XTEdPTERfUk9CQkVSWQCAwtcvABZBTExPV0VEX0ZSRUVfUk9CQkVSSUVTAAAAGUFDUkVTX0ZPUl9ST0JCRVJZX0FUVEVNUFQAgISvXwAXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMAAAAaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQAgISvXwAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzCQDMCAICC0Jvb20tRG9nIEwxCQDMCAICC0Jvb20tRG9nIEwyCQDMCAICC0Jvb20tRG9nIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8JAMwIAgInMjNfMjNfNV8yMF8yM182XzM1XzJfMTAwXzAsMCwwLDAsMCwwLDBfCQDMCAICJzIzXzIzXzVfMjBfMjNfNl83MF8yXzE1MF8wLDAsMCwwLDAsMCwwXwkAzAgCAigyM18yM181XzIwXzIzXzZfMTA1XzJfMjAwXzAsMCwwLDAsMCwwLDBfBQNuaWwACXJJZHhDb2VmZgAGAApySWR4RWZmZWN0AAgAEHJJZHhSZXF1aXJlbWVudHMACQAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICA25vXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIFbGNuYV8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgIDc3RfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgIDbGFzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIGc3R0YW9fBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIDd2hfBQtsYW5kQXNzZXRJZAEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtpbmZyYUxldmVsXwUHYXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAANbGFzdFRvdXJJZEtleQIOJXNfX2xhc3RUb3VySWQBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEDdElkCQCsAgICFiVzJWRfX3RvdXJTdGF0aWNEYXRhX18JAKQDAQUDdElkARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQN0SWQJAKwCAgIXJXMlZF9fdG91ckR5bmFtaWNEYXRhX18JAKQDAQUDdElkARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIDdElkC2R1Y2tBc3NldElkCQC5CQIJAMwIAgIfJXMlZCVzX19iZXN0UmVzdWx0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQAKdFN0YXRpY0VuZAAGAA50RHluYW1pY1N0YXR1cwABAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAQlvbk1pc3Npb24CDHRvdXJDb250cmFjdAhsb2NhdGlvbgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFDHRvdXJDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANsb2MJALUJAgUIbG9jYXRpb24CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQx0b3VyQ29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEB2xvY1R5cGUJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQBDGNoZWF0QXR0ZW1wdAMGb2xkTG9jBm5ld0xvYwljaGVhdENhc2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQUGb2xkTG9jAgksIG5ld0xvYz0FBm5ld0xvYwIHLCBjYXNlPQkApAMBBQljaGVhdENhc2UABlNDQUxFOACAwtcvAAx4cExldmVsU2NhbGUAgBkAD3hwTGV2ZWxSZWNpcFBvdwCgHwASbnVtUG9pbnRzT25MZXZlbFVwAAMADHJlcXVpcmVtZW50cwkAzAgCAghTdHJlbmd0aAkAzAgCAghBY2N1cmFjeQkAzAgCAglJbnRlbGxlY3QJAMwIAgIJRW5kdXJhbmNlCQDMCAICCURleHRlcml0eQkAzAgCAgVMZXZlbAkAzAgCAgZIZWFsdGgFA25pbAAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtzZWdCYWNrcGFjawAAAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIADU1BWFBST0RJTlNMT1QAHgENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQ2hhcnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tDaGFyc18FC2R1Y2tBc3NldElkAQlrZXlEdWNrWFABC2R1Y2tBc3NldElkCQCsAgICB2R1Y2tYUF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrTGV2ZWwBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tMZXZlbF8FC2R1Y2tBc3NldElkARFrZXlEdWNrRnJlZVBvaW50cwELZHVja0Fzc2V0SWQJAKwCAgIPZHVja0ZyZWVQb2ludHNfBQtkdWNrQXNzZXRJZAEQa2V5RHVja0VxdWlwbWVudAELZHVja0Fzc2V0SWQJAKwCAgIOZHVja0VxdWlwbWVudF8FC2R1Y2tBc3NldElkAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIBEWtleVVzZXJGcmVlUG9pbnRzAQRhZGRyCQCsAgICD3VzZXJGcmVlUG9pbnRzXwUEYWRkcgEOa2V5U2F2ZWRIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICDHNhdmVkSGVhbHRoXwULZHVja0Fzc2V0SWQBEGtleVNhdmVkTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDnNhdmVkTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEMa2V5RHVja0J1ZmZzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQnVmZnNfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeVRpbWVfBQtkdWNrQXNzZXRJZAETa2V5RHVja1JvYmJlcnlDb3VudAELZHVja0Fzc2V0SWQJAKwCAgIYdG90YWxSb2JiZXJ5Q291bnRCeUR1Y2tfBQtkdWNrQXNzZXRJZAETa2V5VXNlclJvYmJlcnlDb3VudAEEYWRkcgkArAICAhF1c2VyUm9iYmVyeUNvdW50XwUEYWRkcgEVa2V5VXNlckxhc3RSb2JiZXJ5RGF5AQRhZGRyCQCsAgICE3VzZXJMYXN0Um9iYmVyeURheV8FBGFkZHIBFGtleUR1Y2tEZWxpdmVyeUNvdW50AQtkdWNrQXNzZXRJZAkArAICAhl0b3RhbERlbGl2ZXJ5Q291bnRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEUa2V5VXNlckRlbGl2ZXJ5Q291bnQBBGFkZHIJAKwCAgISdXNlckRlbGl2ZXJ5Q291bnRfBQRhZGRyARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQRhZGRyCQCsAgICFHVzZXJMYXN0RGVsaXZlcnlEYXlfBQRhZGRyAAd4cENsYWltAJBOAA94cFN1Y2Nlc3NGbGlnaHQAkE4ADHhwRmFpbEZsaWdodADQDwAMeHBTdWNjZXNzUm9iAJBOAAl4cEZhaWxSb2IA0A8ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCEPQAKeHBOZXdTTGFuZADAlrECAA54cFVwZ3JhZGVJbmZyYQCQTgAHeHBNZXJnZQDAhD0ACXhwT25ib2FyZADAhD0ABnhwSGVhbACQTgEJbGV2ZWxCeVhQAQJ4cAkAawMFDHhwTGV2ZWxTY2FsZQkAbAYFAnhwAAQFD3hwTGV2ZWxSZWNpcFBvdwAEAAQFBERPV04FBlNDQUxFOAEJbWF4SGVhbHRoAQVsZXZlbAkAZAIAZAUFbGV2ZWwBB2xldmVsVXACCWN1cnJMZXZlbAVuZXdYUAQIbmV3TGV2ZWwJAQlsZXZlbEJ5WFABBQVuZXdYUAkAzAgCBQhuZXdMZXZlbAkAzAgCCQBoAgUSbnVtUG9pbnRzT25MZXZlbFVwCQBlAgUIbmV3TGV2ZWwFCWN1cnJMZXZlbAUDbmlsAQxnZXREdWNrU3RhdHMED3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZApidWZmRWZmZWN0CmZvcmNlQnVmZnMEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwQDbHZsCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAQltYXhIZWFsdGgBBQNsdmwECnN0YXRlQnVmZnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfCQDOCAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkJAMwIAgUDbHZsCQDMCAIFBmhlYWx0aAUDbmlsAwUKZm9yY2VCdWZmcwkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QFA25pbAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJEZXh0ZXJpdHkFA25pbAAJREFZTUlMTElTAIC4mSkBFGtleUxhc3RBcmJUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgANaW5jdWJhdG9yQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFa3RWdXgyUmhjaFNONjNEc0RvNGI0bXo0UXF6S1NlRHYDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AC2JyZWVkZXJBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUERWdVU0NUg3RWg1ZG10TmJuUk5SU3RHd1VMQTdOWTZIYgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgARRklWRU1JTlVURVNNSUxMSVMA4KcSAAxSRU5BTUlOR0NPU1QAwJaxAgAKTUFYTkFNRUxFTgAyABVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQAgK3iBAAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAKbdgu2rBwMJAAACAQFUBQckbWF0Y2gwAKqngbMJCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNEVAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA5Zp3AwkAAAIBAVQFByRtYXRjaDAAgOWadwkAAgECDVVua25vd24gY2hhaW4ADlJPQk9fRFVDS19VU0RUAKCNBgAMU19DT1NUX0FDUkVTAIDyi6gJAAVGSVZFWAkAtgIBAAUAB1RXRU5UWVgJALYCAQAUAAhUV0VOVFkyWAkAtgIBCQBoAgAUABQACFRXRU5UWTNYCQC2AgEJAGgCCQBoAgAUABQAFAAIVFdFTlRZNFgJALYCAQkAaAIJAGgCCQBoAgAUABQAFAAUAAhUV0VOVFk1WAkAtgIBCQBoAgkAaAIJAGgCCQBoAgAUABQAFAAUABQAD1BSRVNBTEVOVU1MQU5EUwD0AwESa2V5TmV4dEZyZWVMYW5kTnVtAAILbmV4dExhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICBGxjbl8FBG5hbWUBEGtleUxhbmRUb0Fzc2V0SWQBB2xhbmROdW0JAKwCAgIDbGFfBQdsYW5kTnVtAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAgVpbGFvXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgNsb18FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AQ9rZXlOZXh0Um9ib0R1Y2sAAgxuZXh0Um9ib0R1Y2sAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcACHJsSGVhbHRoAAAAC3JsUHJvZHNVc2VkAAEABnJsVHlwZQAAAAhybExhc3RUeAACAAtybFRpbWVzdGFtcAADAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4ARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIACQCVCgMFBW9sZEVxBwcKAQdzdWJVc2VkAgNhY2MGaWR4QW10BAVwYXJ0cwkAtQkCBQZpZHhBbXQCASwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXgsYW1vdW50BANpZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAAwMJAGYCAAAFA2lkeAYJAGcCBQNpZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgEA2FtdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEEB2VxUGFydHMJALUJAggFA2FjYwJfMQkArAICCQCRAwIFBXBhcnRzAAACAToDCQECIT0CCQCQAwEFB2VxUGFydHMAAgkAAgEJAKwCAgkArAICAg9Zb3UgZG9uJ3QgaGF2ZSAJAJEDAgUJcHJvZFR5cGVzBQNpZHgCCSBlcXVpcHBlZAQDdG1wCQCRAwIFB2VxUGFydHMAAQQGbnVtTGVuAwkBB2lzRGlnaXQBCQCvAgIJALACAgUDdG1wAAEAAQACAAEEBGN1cnIJAQ1wYXJzZUludFZhbHVlAQkArwICBQN0bXAFBm51bUxlbgQEdGFpbAkAsAICBQN0bXAFBm51bUxlbgQGbmV3QW10AwkAZwIFBGN1cnIFA2FtdAkAZQIFBGN1cnIFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1Zb3UgZXF1aXBwZWQgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQNpZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUDYW10CQCVCgMJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQdlcVBhcnRzAAAJAJEDAgUFcGFydHMAAAIBOgkApAMBBQZuZXdBbXQFBHRhaWwDCAUDYWNjAl8yBgMDCQBnAgUDaWR4AAYJAGcCAAgFA2lkeAcJAAACBQZuZXdBbXQAAAcDCAUDYWNjAl8zBgMDCQBnAgUDaWR4AAMJAGcCAAUFA2lkeAcJAGYCBQNhbXQAAAcKAAIkbAkAtQkCBQVwVXNlZAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUFb2xkRXEHBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3ViVXNlZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEOcHJvZFN0clRvQnl0ZXMBB3Byb2RTdHIEBXBMaXN0AwkAAAIFB3Byb2RTdHICAAUDbmlsCQC8CQIFB3Byb2RTdHICAV8KAQR0b0JWAgNhY2MGcmVjaXBlBAFqCQBpAgkAyAEBBQNhY2MACAQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAkAywECBQNhY2MJAJoDAQUEY3VycgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAEACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQR0b0JWAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDmJ5dGVzVG9Qcm9kU3RyAQJidgoBBmZyb21CVgIDYWNjBnJlY2lwZQQBagkAkAMBBQNhY2MEAWIJAMkBAgkAygECBQJidgkAaAIACAUBagAICQDNCAIFA2FjYwkApAMBCQCxCQEFAWIJALoJAgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZmcm9tQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgIBXwEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAglkdWNrU3RhdHMEcmVxcwoBBWNoZWNrAgNhY2MBagQEYnVmZgMJAGYCCQCQAwEFCWR1Y2tTdGF0cwkAZAIABwUBagkAkQMCBQlkdWNrU3RhdHMJAGQCAAcFAWoAAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEcmVxcwUBagkAZAIJAJEDAgUJZHVja1N0YXRzBQFqBQRidWZmCQACAQkArAICAhtSZXF1aXJlbWVudCBub3Qgc2F0aXNmaWVkOiAJAJEDAgUMcmVxdWlyZW1lbnRzBQFqBgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWNoZWNrAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA3CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcBCGFkZFByb2RCBwZpZHhDbnQFcExpc3QKaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEc2xvdAlkdWNrU3RhdHMEBXBhcnRzCQC1CQIFBmlkeENudAIBOgMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleDphbW91bnQDAwkBASEBBQppc1Bvc2l0aXZlCQECIT0CCQCxAgEJAJEDAgUFcGFydHMAAAACBwkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgFc3RhdHMDCQECIT0CBQFnAgAEBXNsb3RzCQC1CQIFAWcCASwDCQBmAgkAkAMBBQVzbG90cwUITUFYU0xPVFMJAAIBAhJXcm9uZyBzbG90cyBmb3JtYXQEAnMwCQCRAwIFBXNsb3RzAAAEAnMxAwkAZgIJAJADAQUFc2xvdHMAAQkAkQMCBQVzbG90cwABAgADAwkAAAIFAnMwAgAJAAACBQJzMQIABwUEYnBJbgQFdG1wUzADCQECIT0CBQJzMAIACQEIYWRkUHJvZEIHBQJzMAUEYnBJbgUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAAABQVzdGF0cwkAlAoCBQRicEluBwMJAQIhPQIFAnMxAgADCAUFdG1wUzACXzIJAAIBAh5CaWcgaXRlbSBhbHJlYWR5IG9jY3VwaWVzIHNsb3QICQEIYWRkUHJvZEIHBQJzMQgFBXRtcFMwAl8xBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAEFBXN0YXRzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQVzdGF0cwoBB3NlZ21lbnQCA2FjYwNzZWcEAWoIBQNhY2MCXzEEB21haW5BdXgJALUJAgUDc2VnAgE7AwkBAiE9AgkAkAMBBQdtYWluQXV4BQpOVU1NQUlOQVVYCQACAQIUV3Jvbmcgc2VnbWVudCBmb3JtYXQEAW0JAJEDAgUHbWFpbkF1eAAABAFhCQCRAwIFB21haW5BdXgAAQMDCQAAAgUBbQIACQAAAgUBYQIABwkAlAoCCQBkAgUBagABCAUDYWNjAl8yBAR0bXBNCQELc2xvdHNHcm91cEIGBQFtCAUDYWNjAl8yBQppc1Bvc2l0aXZlBQFqAAAFBXN0YXRzCQCUCgIJAGQCBQFqAAEJAQtzbG90c0dyb3VwQgYFAWEFBHRtcE0FCmlzUG9zaXRpdmUFAWoAAQUFc3RhdHMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yARdjYW5XZWFyQ3VycmVudEVxdWlwbWVudAELZHVja0Fzc2V0SWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAZjdXJyRXEJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EDEVNUFRZX1BST0Q1MAGQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECXRlbXBQcm9kQgkBBmRyZXNzQgQFBmN1cnJFcQUMRU1QVFlfUFJPRDUwBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUGY3VyckVxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBmN1cnJFcQUJdGVtcFByb2RCBwUFc3RhdHMJAAACBQhuZXdQcm9kQgUIbmV3UHJvZEIBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgITLCB0ZXJyYWluQ291bnRzW2ldPQkApAMBCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkCECwgbGFuZFNpemVJbmRleD0JAKQDAQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARF1cGRhdGVQcm9wb3J0aW9ucwMNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24ECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8JALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgIBXwENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAuQkCBQFyAgFfAQ92aXJ0Q2xhaW1BZGRSZXMFCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAQMdG90YWxSZXNUeXBlCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQkAlAoCCQDNCAIIBQNhY2MCXzEFDHRvdGFsUmVzVHlwZQkAZAIIBQNhY2MCXzIFDHRvdGFsUmVzVHlwZQoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQl2aXJ0Q2xhaW0EDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjDHRlcnJhaW5Db3VudAQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMFDHRlcnJhaW5Db3VudAUNbGFuZFNpemVJbmRleAkAlAoCCQDNCAIIBQNhY2MCXzEFCXJlc09mVHlwZQkAZAIIBQNhY2MCXzIFCXJlc09mVHlwZQoAAiRsBQ10ZXJyYWluQ291bnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDWRpc3RyaWJ1dGVSZXMEDGN1cnJlbnRXaFJlcw5jdXJyZW50UGFja1JlcwpyZXNUb0NsYWltC3doU3BhY2VMZWZ0BA5yZXNMaXN0VG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzEEDHJlc0FtVG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUMcmVzQW1Ub0NsYWltAAAJAJQKAgkAuQkCBQxjdXJyZW50V2hSZXMCAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8DCQBnAgULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQoBCGFkZExpc3RzAgNhY2MBaQkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGFkZExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAgUBcgIBXwkAuQkCBQ5jdXJyZW50UGFja1JlcwIBXwoBDGFkZFBhcnRMaXN0cwIDYWNjAWkEBndoUGFydAkAawMJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0JAJQKAgkAzQgCCAUDYWNjAl8xCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpBQZ3aFBhcnQJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQUGd2hQYXJ0BAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWRkUGFydExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAggFAXICXzECAV8JALkJAggFAXICXzICAV8BA2FicwEBeAMJAMACAgUBeAkAtgIBAAAFAXgJAL4CAQUBeAAEZnJlcQkAzAgCCQDMCAIABgkAzAgCAAkJAMwIAgAOCQDMCAIADwkAzAgCABAFA25pbAkAzAgCCQDMCAIABQkAzAgCAAgJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAQJAMwIAgAJCQDMCAIACgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAYJAMwIAgAHCQDMCAIADwkAzAgCABMFA25pbAkAzAgCCQDMCAIABAkAzAgCAAcJAMwIAgAICQDMCAIADQkAzAgCABIFA25pbAUDbmlsAQdnZW5DaGFyAgFuBWZyZXFzBANyZW0JAKADAQkAuwICBQFuBQdUV0VOVFlYBAZsZXR0ZXIDCQBmAgkAkQMCBQVmcmVxcwAABQNyZW0CAUEDCQBmAgkAkQMCBQVmcmVxcwABBQNyZW0CAUIDCQBmAgkAkQMCBQVmcmVxcwACBQNyZW0CAUMDCQBmAgkAkQMCBQVmcmVxcwADBQNyZW0CAUQDCQBmAgkAkQMCBQVmcmVxcwAEBQNyZW0CAUUCAUYFBmxldHRlcgELZ2VuVGVycmFpbnMCBHNlZWQMY29udGluZW50SWR4BAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUEc2VlZAUFRklWRVgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHRlcnJhaW5HZW5lcmF0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFCAUBdAJfMQAGUEVSTTI1CQDMCAIABwkAzAgCAAIJAMwIAgAPCQDMCAIAEwkAzAgCAAgJAMwIAgAYCQDMCAIAAQkAzAgCABUJAMwIAgAQCQDMCAIABQkAzAgCAAAJAMwIAgAWCQDMCAIAFAkAzAgCABcJAMwIAgALCQDMCAIABAkAzAgCABIJAMwIAgAMCQDMCAIABgkAzAgCAAoJAMwIAgADCQDMCAIAEQkAzAgCAA0JAMwIAgAJCQDMCAIADgUDbmlsAAZUQ0hBUlMJAMwIAgIBQQkAzAgCAgFCCQDMCAICAUMJAMwIAgIBRAkAzAgCAgFFCQDMCAICAUYFA25pbAETZ2VuVGVycmFpbnNGb3JNZXJnZQILc3VtVGVycmFpbnMNbGFuZFNpemVJbmRleAoBBXN0ZXAxAgNhY2MBcwQBaggFA2FjYwJfMgQCZWwJAQ1wYXJzZUludFZhbHVlAQUBcwQBeAMJAAACBQJlbAAAAAADCQBnAgUCZWwJAGgCAAQFDWxhbmRTaXplSW5kZXgJAGkCBQJlbAUNbGFuZFNpemVJbmRleAMJAGYCBQJlbAkAaAIAAwUNbGFuZFNpemVJbmRleAADCQBkAgkAaQIJAGUCBQJlbAABBQ1sYW5kU2l6ZUluZGV4AAEJAJUKAwkAzQgCCAUDYWNjAl8xBQF4CQBkAggFA2FjYwJfMgABCQBkAggFA2FjYwJfMwUBeAQBdAoAAiRsBQtzdW1UZXJyYWlucwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFc3RlcDECBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEA2FycggFAXQCXzEEBm1heElkeAkBBXZhbHVlAQkAzwgCBQNhcnIJAJYDAQUDYXJyBAVkZWx0YQkAZQIIBQF0Al8zABkKAQZzdWJiZXICA2FjYwNpZHgEA3ZhbAMJAAACBQNpZHgFBm1heElkeAkAZQIJAJEDAgUDYXJyBQNpZHgFBWRlbHRhCQCRAwIFA2FycgUDaWR4BAZ6ZXJvZXMDCQAAAgUDdmFsAAAFA25pbAkAtQkCCQCwAgIJAKQDAQkAbAYACgAABQN2YWwAAAAABQRET1dOAAECAAQBYwkAkQMCBQZUQ0hBUlMFA2lkeAoBB2xpc3RHZW4CAmFjB2lnbm9yZWQJAM0IAgUCYWMFAWMEAXoKAAIkbAUGemVyb2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdsaXN0R2VuAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyNQkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZCQDOCAIFA2FjYwUBegQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGc3ViYmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEGcGVybXV0AgNhY2MBagkArAICBQNhY2MJAJEDAgUBcgUBagoAAiRsBQZQRVJNMjUKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBnBlcm11dAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjUJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEBHBrZ3MJAGkCCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUOUFJPRFVDVFBLR1NJWkUAAQUOUFJPRFVDVFBLR1NJWkUJAJQKAgkAZAIFA2lkeAABCQBkAggFA2FjYwJfMgkAaAIFBHBrZ3MFBU1VTFQ4BAh3aFJlc1ZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAh3aE1hdFZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp3aEdvb2RzVm9sAwkAAAIFBWdvb2RzAgAAAAgKAAIkbAkAvAkCBQVnb29kcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1bVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgJfMgkAZAIJAGQCBQh3aFJlc1ZvbAUId2hNYXRWb2wFCndoR29vZHNWb2wBDGdldFdhcmVob3VzZQMFd2hLZXkJbGFuZEluZGV4CmluZnJhTGV2ZWwECXZvbFByZWZpeAkArAICCQCsAgIJAKQDAQUJbGFuZEluZGV4AgFfCQCkAwEFCmluZnJhTGV2ZWwEB3doVG90YWwJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCXZvbFByZWZpeAQFd2hTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFd2hLZXkJAKwCAgUJdm9sUHJlZml4Ahs6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6OjAEAndoCQC8CQIFBXdoU3RyAgE6BAp3aE9jY3VwaWVkCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQGd2hMb2Z0AwkAZgIABQkAkAMBBQJ3aAkAuQkCCQDMCAICATAJAMwIAgkApAMBBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8EBGxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBAh3aExvY2tlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCXZvbExvY2tlZAQDb2NjAwkAZgIJAJADAQUEbG9mdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFCndoT2NjdXBpZWQJALkJAgkAzAgCCQCkAwEFCHdoTG9ja2VkCQDMCAIJAKQDAQUDb2NjCQDMCAIJAKQDAQkAZQIJAGUCBQd3aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3docgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdk0CA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hNYXQFAWkEA2JwbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaE1hdAUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2htAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0EAW0KAAIkbAUIbWF0UGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFyAl80CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdk0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdlACA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHADCQBmAgkAkAMBBQpjdXJyV2hQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycldoUHJvZAUBaQAABANicHADCQBmAgkAkAMBBQ9jdXJyZW50UGFja1Byb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ9jdXJyZW50UGFja1Byb2QFAWkAAAMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBBQN3aHAJAM0IAggFA2FjYwJfMwkApAMBBQNicHAIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAMJAGYCCQEBLQEFAmFtBQN3aHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sBAFwAwkBAiE9AgkAkAMBBQlwcm9kUGFydHMAAAoAAiRsBQlwcm9kUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFtAl80CgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAlgoEAAAFCmN1cnJXaFByb2QFD2N1cnJlbnRQYWNrUHJvZAgFAW0CXzQECHZvbFNhbGRvCAUBcAJfNAMJAGYCBQh2b2xTYWxkbwULd2hTcGFjZUxlZnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICFUF0dGVtcHQgdG8gcHV0IHRvdGFsIAkApAMBBQh2b2xTYWxkbwIRIHN0dWZmLCBidXQgb25seSAJAKQDAQULd2hTcGFjZUxlZnQCFSB3YXJlaG91c2Ugc3BhY2UgbGVmdAkAmQoHCQC5CQIIBQFyAl8yAgFfCQC5CQIIBQFtAl8yAgFfCQC6CQIIBQFwAl8yAgFfCQC5CQIIBQFyAl8zAgFfCQC5CQIIBQFtAl8zAgFfCQC6CQIIBQFwAl8zAgFfBQh2b2xTYWxkbwESZXhwZWRpdGlvbkludGVybmFsAgZjYWxsZXIEdHhJZAQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZiaWdOdW0JAQNhYnMBCQCeAwEFBHR4SWQEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQduZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50AQxmbGlnaHRDb21tb24DCHVzZXJBZGRyB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAvAkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAvAkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEFDG9sZEZyb21TdGF0ZQIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAQEhAQkBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZFcXVpcG1lbnQgaW5jb21wYXRpYmxlBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzNDE1MzM0NjkyAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDM0MTUzMzQ2OTICXzEEBmR1Y2tJZAgFDSR0MDM0MTUzMzQ2OTICXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIJAQlmaW5hbFRpbWUACAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgosIGZpbmFsID0gCQCkAwEJAQlmaW5hbFRpbWUABAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAgkBCWZpbmFsVGltZQAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDM3MDYyMzc5MzMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDM3MDYyMzc5MzMCXzEEBWJwUmVzCAUNJHQwMzcwNjIzNzkzMwJfMgQFbG9mdE8IBQ0kdDAzNzA2MjM3OTMzAl8zBAVsb2Z0RggFDSR0MDM3MDYyMzc5MzMCXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAgkBCWZpbmFsVGltZQAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwMJAQEhAQUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBnAgUIY3VyTGV2ZWwAAwcJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbWF4SW5mcmEJAGQCCQBpAgkBBHNxcnQEBQZwaWVjZXMAAAAABQRET1dOAAUAAgQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABAwMFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZgIFCG5ld0xldmVsBQhtYXhJbmZyYQcJAAIBCQCsAgICJUN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAJAKQDAQUIbWF4SW5mcmEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EB21hdFVzZWQJAGsDBRFJbmZyYVVwZ3JhZGVDb3N0UwkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUHbWF0VXNlZAIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIIBQFjAl8yBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sEBndoRGF0YQgFC2NsYWltUmVzdWx0Al81BAZvbGRWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwQKbmV3Vm9sRGF0YQkAuQkCCQDMCAIJAJEDAgkAtQkCCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMCAV8AAAkAzAgCCQCkAwEFCG5ld0xldmVsBQNuaWwCAV8EBm5ld1ZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUKbmV3Vm9sRGF0YQQEbG9mdAkAtQkCCQCRAwIFBndoRGF0YQUJd2hJZHhMT0ZUAgFfBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkAzAgCCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBm5ld1ZvbAUGb2xkVm9sCQDMCAIJAKQDAQUGbmV3Vm9sBQNuaWwCAV8JAJUKAwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIJAMwIAgUKbmV3Vm9sRGF0YQkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhSZXMJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4TWF0CQDMCAIJAJEDAgUGd2hEYXRhBQl3aElkeFByb2QJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwFB21hdFVzZWQBE3VwZGF0ZVN0YXRzSW50ZXJuYWwEBmx2bEtleQV4cEtleQlwb2ludHNLZXkHZGVsdGFYUAQCeHAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUGbHZsS2V5AAAFBW5ld1hQCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwb2ludHNLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCXBvaW50c0tleQAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAILZHVja0Fzc2V0SWQHZGVsdGFYUAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtkdWNrQXNzZXRJZAQEYWRkcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQULZHVja0Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMDBRNLU19BTExPV19ST0JPX0RVQ0tTCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwcJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQtST0JPX1BSRUZJWAcJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQlrZXlVc2VyWFABBQRhZGRyCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBQdkZWx0YVhQCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAkBCWtleUR1Y2tYUAEFC2R1Y2tBc3NldElkCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIEYWRkcgdkZWx0YVhQCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEJa2V5VXNlclhQAQUEYWRkcgkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgUHZGVsdGFYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCAULY2xhaW1SZXN1bHQCXzEJAQxJbnRlZ2VyRW50cnkCBQ1hY3RpdmF0aW9uS2V5BQZwaWVjZXMJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCAULY2xhaW1SZXN1bHQCXzUCAToBD2NoZWNrVG91cm5hbWVudAELZHVja0Fzc2V0SWQEBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFEnRvdXJuYW1lbnRDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAVQHAwMDCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIWZXhpdFRvdXJuYW1lbnRJbnRlcm5hbAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsBQNuaWwBDW1lcmdlSW50ZXJuYWwGC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIdbWVyZ2VJbnRlcm5hbF9jaGVja1RvdXJuYW1lbnQKAQpjaGVja01lcmdlAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJY29udGluZW50CQCRAwIFAWQFDHJlY0NvbnRpbmVudAMDCQECIT0CCAUDYWNjAl8zAgAJAQIhPQIIBQNhY2MCXzMFCWNvbnRpbmVudAcJAAIBAi5MYW5kcyBzaG91bGQgYmUgb24gdGhlIHNhbWUgY29udGluZW50IHRvIG1lcmdlBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQHc2l6ZXNJbggFA2FjYwJfMQQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCzCQIFB3NpemVzSW4FCGxhbmRTaXplAidZb3UgaGF2ZW4ndCBwYXNzZWQgYWxsIHRoZSBsYW5kcyBuZWVkZWQECHNpemVzT3V0CQCsAgIJAK8CAgUHc2l6ZXNJbgUBaQkAsAICBQdzaXplc0luCQBkAgUBaQABBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQEYXJ0cwkAZAIIBQNhY2MCXzIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECHJlcUxldmVsBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwAAMDCQAAAgIBTQUHJG1hdGNoMAAEAwkAAAICAUwFByRtYXRjaDAABQMJAAACAgJYTAUHJG1hdGNoMAAGCQACAQIaT25seSBTLCBNLCBMLCBYTCBjYW4gbWVyZ2UDCQECIT0CBQppbmZyYUxldmVsBQhyZXFMZXZlbAkAAgECIkFsbCBsYW5kcyBzaG91bGQgYmUgbWF4ZWQgdG8gbWVyZ2UEB2xhbmROdW0JAJEDAgUBZAUKcmVjTGFuZE51bQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVicFJlcwkBBmFkZFJlcwUJALUJAggFA2FjYwJfNAIBXwUNdGVycmFpbkNvdW50cwUJZGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzYFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAZjUHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwNfMTAFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAtzdW1UZXJyYWlucwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl85BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAnAoKBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzggCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFA2FjYwJfNQkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQUJY3VzdG9tS2V5CQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQMJAQIhPQIFCmN1c3RvbU5hbWUCAAkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBQNuaWwFA25pbAUFcHJvcHMJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAkAZAIIBQNhY2MCXzgFBnBpZWNlcwULc3VtVGVycmFpbnMFBmNQcm9wcwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEB2xhbmRzSW4DCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAQFY29udDAJAJEDAgkAtQkCCAkBBXZhbHVlAQkA7AcBCQDZBAEJAJEDAgUMbGFuZEFzc2V0SWRzAAALZGVzY3JpcHRpb24CAV8FDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQVjb250MAILMF8wXzBfMF8wXzACAV8EAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUIcHJvcExpc3QFB2xhbmRzSW4AAAkAtQkCAgswXzBfMF8wXzBfMAIBXwUJY29udFByb3BzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJARNnZW5UZXJyYWluc0Zvck1lcmdlAggFAXICXzkJAGkCCQEPbnVtUGllY2VzQnlTaXplAQULbmV3TGFuZFNpemUFBVNTSVpFBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEECm5ld0xhbmROdW0JAKQDAQUHZnJlZU51bQQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQpuZXdMYW5kTnVtBQtuZXdMYW5kU2l6ZQkAuQkCCQDMCAIFCm5ld0xhbmROdW0JAMwIAgULbmV3TGFuZFNpemUJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQObmV3TGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMJAGYCBQduZWVkTWF0AAAJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8FB25lZWRNYXQCAV8ECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAggFAXICXzgFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzCAUBcgJfOAkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABBQVpc3N1ZQkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQpuZXdMYW5kTnVtBQ5uZXdMYW5kQXNzZXRJZAkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDm5ld0xhbmRBc3NldElkBQRhZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQpuZXdMYW5kTnVtBQRhZGRyCQEMSW50ZWdlckVudHJ5AgkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACQC5CQIIBQFyAl82AgFfCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFCWNvbnRpbmVudAkAuQkCCAUBcgNfMTACAV8JAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTQADAgRTU1NTBQRhZGRyBQxsYW5kQXNzZXRJZHMAAAEDbTJsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFMAAQCA1NNTQUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMABAEEbDJ4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgICWEwABQIFU1NTTUwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAC8BBnhsMnh4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIDWFhMAAYCA0xYTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMANgELbWVyZ2VDb21tb24CBGFkZHIMbGFuZEFzc2V0SWRzBAckbWF0Y2gwCQCQAwEFDGxhbmRBc3NldElkcwMJAAACAAQFByRtYXRjaDAJAQNzMm0CBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgADBQckbWF0Y2gwCQEDbTJsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIABQUHJG1hdGNoMAkBBGwyeGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzCQACAQINVW5rbm93biBtZXJnZQEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQNuaWwBE3Vuc3Rha2VMYW5kSW50ZXJuYWwCBGFkZHILbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECGxhbmRJbmZvCQC1CQIICQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQLZGVzY3JpcHRpb24CAV8ECGxhbmRTaXplCQCRAwIFCGxhbmRJbmZvBQtyZWNMYW5kU2l6ZQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUIbGFuZEluZm8FC3JlY1RlcnJhaW5zBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARFAZXh0ck5hdGl2ZSgxMDU1KQEFB3RpbWVLZXkECWRlbHRhVGltZQkAZQIJAQlmaW5hbFRpbWUABQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCCiwgZmluYWwgPSAJAKQDAQkBCWZpbmFsVGltZQAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBA1yZXNBZnRlckNsYWltCQEPdmlydENsYWltQWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAED2FjcmVzRnJvbVBpZWNlcwkAZAIJAGgCBQZwaWVjZXMFBU1VTFQ4CQBpAgkAaAIJAGQCCQBoAgUGcGllY2VzBQppbmZyYUxldmVsBQlhcnRQaWVjZXMFBU1VTFQ4AAUEDGFjcmVzRnJvbVJlcwkAaAIJAGsDCAUNcmVzQWZ0ZXJDbGFpbQJfMgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgFFVVTRFQyQUNSRVNfTVVMVElQTElFUgoBBnN1bU1hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQFd2hNYXQKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBnN1bU1hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQMYWNyZXNGcm9tTWF0CQBoAgkAawMFBXdoTWF0CQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSBAVwcm9kcwMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfCgEHc3VtUHJvZAIDYWNjBGl0ZW0EAWoIBQNhY2MCXzIEC3JlY2lwZUNvZWZmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FCXJJZHhDb2VmZgkAlAoCCQBkAggFA2FjYwJfMQkAaAIJAGgCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FC3JlY2lwZUNvZWZmBQVNVUxUNgkAZAIFAWoAAQQGd2hQcm9kCgACJGwFBXByb2RzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjQJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgEDWFjcmVzRnJvbVByb2QJAGgCCQBrAwgFBndoUHJvZAJfMQkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgFFVVTRFQyQUNSRVNfTVVMVElQTElFUgkAlgoEBQ9hY3Jlc0Zyb21QaWVjZXMFDGFjcmVzRnJvbVJlcwUMYWNyZXNGcm9tTWF0BQ1hY3Jlc0Zyb21Qcm9kARN1bnN0YWtlRHVja0ludGVybmFsAgRhZGRyC2R1Y2tBc3NldElkBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQLY3VycmVudFNlZ3MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUDbmlsBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQl0ZW1wUHJvZEIKAQlzdW1SZXNNYXQCA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EBWJwUmVzCgACJGwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQMYWNyZXNGcm9tUmVzCQBoAgkAawMFBWJwUmVzBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSBAVicE1hdAoAAiRsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEDGFjcmVzRnJvbU1hdAkAaAIJAGsDBQVicE1hdAkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQFcHJvZHMDCQAAAgUKbmV3UHJvZFN0cgIABQNuaWwJALwJAgUKbmV3UHJvZFN0cgIBXwoBB3N1bVByb2QCA2FjYwRpdGVtBAFqCAUDYWNjAl8yBAtyZWNpcGVDb2VmZgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQFqAgFfBQlySWR4Q29lZmYJAJQKAgkAZAIIBQNhY2MCXzEJAGgCCQBoAgkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQtyZWNpcGVDb2VmZgUFTVVMVDYJAGQCBQFqAAEEBmJwUHJvZAoAAiRsBQVwcm9kcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1bVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDI0CQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYBA1hY3Jlc0Zyb21Qcm9kCQBoAgkAawMIBQZicFByb2QCXzEJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BRVVU0RUMkFDUkVTX01VTFRJUExJRVIJAJUKAwUMYWNyZXNGcm9tUmVzBQxhY3Jlc0Zyb21NYXQFDWFjcmVzRnJvbVByb2QvAWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQtzYXZlSW50ZWdlcgIDa2V5BmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECIHNhdmVJbnRlZ2VyIGlzIG5vdCBwdWJsaWMgbWV0aG9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBmFtb3VudAUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkxBTkRQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFBHRoaXMJAAIBAhdVbmtub3duIGlzc3VlciBvZiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkxBTkRQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpMQU5EUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQLbGFuZE51bVNpemUJALACAggFBWFzc2V0BG5hbWUABAQHbGFuZE51bQMJAQhjb250YWlucwIFC2xhbmROdW1TaXplAgNYWEwJALMCAgULbGFuZE51bVNpemUAAwMJAQhjb250YWlucwIFC2xhbmROdW1TaXplAgJYTAkAswICBQtsYW5kTnVtU2l6ZQACCQCzAgIFC2xhbmROdW1TaXplAAEDCQEBIQEJAQlpc0RlZmluZWQBCQC2CQEFB2xhbmROdW0JAAIBCQCsAgICHkNhbm5vdCBwYXJzZSBsYW5kIG51bWJlciBmcm9tIAgFBWFzc2V0BG5hbWUEC2xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQMcmVzQnlDb250S2V5CQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJAJEDAgUBZAUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQxyZXNCeUNvbnRLZXkCCzBfMF8wXzBfMF8wAgFfBBB1cGRhdGVkQ29udFByb3BzCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUJY29udFByb3BzBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQIBXwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQVsYW5kcwULbGFuZEFzc2V0SWQJAAIBCQCsAgICIllvdXIgc3Rha2VkIGxhbmRzIGFscmVhZHkgY29udGFpbiAFC2xhbmRBc3NldElkAwkAZwIJAJADAQUFbGFuZHMFGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgkAAgEJAKwCAgkArAICAhlZb3VyIGFscmVhZHkgc3Rha2VkIG1heCAoCQCkAwEFGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgIHKSBsYW5kcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzBAlvbGRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJAM0IAgUFbGFuZHMFC2xhbmRBc3NldElkAgFfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkJAGQCBQlvbGRQaWVjZXMFBnBpZWNlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEAWQIBQFjAl8zBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCBQxyZXNCeUNvbnRLZXkFEHVwZGF0ZWRDb250UHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMFA25pbAUNcHJvbG9nQWN0aW9ucwUJd2xnUmVzdWx0AWkBE3Vuc3Rha2VMYW5kQ2FsbGJhY2sCC2xhbmRBc3NldElkBGFkZHIDCQECIT0CCQClCAEIBQFpBmNhbGxlcgUQYWNyZXMyQWRkcmVzc1N0cgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA11bnN0YWtlUmVzdWx0CQETdW5zdGFrZUxhbmRJbnRlcm5hbAIFBGFkZHIFC2xhbmRBc3NldElkBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgUDbmlsCQCXCgUIBQ11bnN0YWtlUmVzdWx0Al8xCAUNdW5zdGFrZVJlc3VsdAJfMggFDXVuc3Rha2VSZXN1bHQCXzMIBQ11bnN0YWtlUmVzdWx0Al80BQl3bGdSZXN1bHQBaQETdW5zdGFrZUxhbmRSRUFET05MWQILbGFuZEFzc2V0SWQEYWRkcgQNdW5zdGFrZVJlc3VsdAkBE3Vuc3Rha2VMYW5kSW50ZXJuYWwCBQRhZGRyBQtsYW5kQXNzZXRJZAkAlAoCBQNuaWwFDXVuc3Rha2VSZXN1bHQBaQEcdW5zdGFrZUxhbmRzRmluYWxpemVDYWxsYmFjawEEYWRkcgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyBRBhY3JlczJBZGRyZXNzU3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIFA25pbAAAAWkBFGNvbnZlcnRVbnN0YWtlZExhbmRzAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEC2FjcmVzQW1vdW50CQBkAgkAaAIFBnBpZWNlcwUFTVVMVDgJAGkCCQBoAgkAZAIJAGgCBQZwaWVjZXMFCmluZnJhTGV2ZWwFCWFydFBpZWNlcwUFTVVMVDgABQQDcmVxCQD8BwQFDWFjcmVzQ29udHJhY3QCFHJlcXVlc3RBY3Jlc0NhbGxiYWNrCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAMJAAACBQNyZXEFA3JlcQQFY2FsbGIJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUQYWNyZXMyQWRkcmVzc1N0cgISc3Rha2VBY3Jlc0NhbGxiYWNrCQDMCAIFB2FkZHJlc3MFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMYWNyZXNBc3NldElkBQthY3Jlc0Ftb3VudAUDbmlsAwkAAAIFBWNhbGxiBQVjYWxsYgkAlAoCCQDMCAIJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQNuaWwAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlzdGFrZUR1Y2sABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEBmlzUm9ibwMDBRNLU19BTExPV19ST0JPX0RVQ0tTCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwcJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQtST0JPX1BSRUZJWAcDAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkBASEBBQZpc1JvYm8HCQACAQkArAICCQCsAgIJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBCBvciAFC1JPQk9fUFJFRklYAgYgdG9rZW4DAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkBASEBBQZpc1JvYm8HCQACAQkArAICCQCsAgIJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCBCBvciAFC1JPQk9fUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDOCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJY3VySGVhbHRoBQ1wcm9sb2dBY3Rpb25zAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAht1bnN0YWtlRHVja19jaGVja1RvdXJuYW1lbnQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBBQlrZXlIZWFsdGgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQNuaWwFDXByb2xvZ0FjdGlvbnMBaQETdW5zdGFrZUR1Y2tDYWxsYmFjawILZHVja0Fzc2V0SWQEYWRkcgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyBRBhY3JlczJBZGRyZXNzU3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlRHVja0ludGVybmFsAgUEYWRkcgULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEJANkEAQULZHVja0Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtkdWNrQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAULZHVja0Fzc2V0SWQFBGFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBE3Vuc3Rha2VEdWNrUkVBRE9OTFkCC2R1Y2tBc3NldElkBGFkZHIEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlRHVja0ludGVybmFsAgUEYWRkcgULZHVja0Fzc2V0SWQJAJQKAgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQFbmV3SFAIBQFmAl8xBAtkdWNrQXNzZXRJZAgFAWYCXzIEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQLbmV3TG9jYXRpb24IBQFmAl80AwkAAAIFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAAgECIllvdSBjYW4ndCBmbHkgdG8gdGhlIHNhbWUgbG9jYXRpb24EBm5ld0xvYwkAtQkCBQtuZXdMb2NhdGlvbgIBXwQGaXNUb3VyCQAAAgkAkQMCBQZuZXdMb2MFCmxvY0lkeFR5cGUCAVQEB2lzRGVsaXYJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBRAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDczNzY5NzM4NzUJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNzM3Njk3Mzg3NQJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNzM3Njk3Mzg3NQJfMgQHaWdub3JlZAgFDSR0MDczNzY5NzM4NzUCXzMEDSR0MDczODc4NzU3MTADCQEBIQEJAQlvbk1pc3Npb24CBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwUGaXNUb3VyCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAAUDCQEBIQEFB2lzRGVsaXYDCQBmAgUFbmV3SFAAAAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAJQKAgULY3VyTG9jYXRpb24AAAMJAGYCBQVuZXdIUAAABAFzCQD8BwQFBHRoaXMCD3Byb2Nlc3NEZWxpdmVyeQkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUBcwUBcwkAlAoCBQtjdXJMb2NhdGlvbgUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgULY3VyTG9jYXRpb24AAAMJAQ5pc0luVG91cm5hbWVudAIFEnRvdXJuYW1lbnRDb250cmFjdAULY3VyTG9jYXRpb24DCQEBIQEJAQ5pc0luVG91cm5hbWVudAIFEnRvdXJuYW1lbnRDb250cmFjdAULbmV3TG9jYXRpb24JAAIBAipZb3VyIGR1Y2sgaXMgdGFraW5nIHBhcnQgaW4gdGhlIHRvdXJuYW1lbnQEBXNjb3JlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGbmV3TG9jBQhsb2NJZHhJZAQGY3VyTG9jCQC1CQIFC2N1ckxvY2F0aW9uAgFfBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAADCQECIT0CBQVzY29yZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZjdXJMb2MFCGxvY0lkeElkAAEJAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ABwMJAGYCBQVuZXdIUAAABAlsb2NhbEJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0CQEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkAAAECHVwZExvY2FsAwkAZgIFBXNjb3JlBQlsb2NhbEJlc3QJAPwHBAUSdG91cm5hbWVudENvbnRyYWN0Ag5zYXZlRHVja1Jlc3VsdAkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQVzY29yZQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUIdXBkTG9jYWwFCHVwZExvY2FsCQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQtjdXJMb2NhdGlvbgAACQACAQkArAICAhRVbmtub3duIGN1ckxvY2F0aW9uOgULY3VyTG9jYXRpb24ECWxvY1RvU2F2ZQgFDSR0MDczODc4NzU3MTACXzEECGhwVG9TYXZlCAUNJHQwNzM4Nzg3NTcxMAJfMgkAlAoCCQDOCAIJAM4IAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUJbG9jVG9TYXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAUIaHBUb1NhdmUFA25pbAUNcHJvbG9nQWN0aW9ucwMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCBQVuZXdIUAAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwMDCQBmAgAABQpxdWFudGl0eUwxBgkAZgIAAAUKcXVhbnRpdHlMMgYJAGYCAAAFCnF1YW50aXR5TDMJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhRoZWFsX2NoZWNrVG91cm5hbWVudAQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGcCBQlvbGRIZWFsdGgFBW1heEhQCQACAQkArAICCQCsAgICD0hQIHNob3VsZCBiZSA8IAkApAMBBQVtYXhIUAIIIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBC2l0ZXJhdGVQcm9kAgNhY2MGcmVjaXBlBAFuCAUDYWNjAl8yBAF4AwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBbgAAAwkAZgIAAwUBbgQBcQkAkQMCBQNxdHMFAW4DCQBmAgUBcQUBeAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQCkAwEFAXgCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFuCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUBeAUBcQkAZAIFAW4AAQkAZAIIBQNhY2MCXzMJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCBQZyZWNpcGUCAV8FCnJJZHhFZmZlY3QFAXEJAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEFAXgJAGQCBQFuAAEIBQNhY2MCXzMEBnJlc3VsdAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQtpdGVyYXRlUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAluZXdIZWFsdGgJAJcDAQkAzAgCBQVtYXhIUAkAzAgCCQBkAgUJb2xkSGVhbHRoCAUGcmVzdWx0Al8zBQNuaWwJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZoZWFsRVNfY2hlY2tUb3VybmFtZW50BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC8CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8FCnJJZHhFZmZlY3QEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgUFTVVMVDgFDlBST0RVQ1RQS0dTSVpFAwkBAiE9AggFA3BtdAZhbW91bnQFCXNlbGxQcmljZQkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFCXNlbGxQcmljZQQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIPdXBkYXRlRXNTdG9yYWdlCQDMCAIFBW5ld0VTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3VzZHRBc3NldElkBQlzZWxsUHJpY2UFA25pbAkAlAoCCQDOCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCHhwQ2FsbEVTAl8xBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ9jb21taXRGb3JSYW5kb20ABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFC3JhbmRvbURlbGF5BARhZGRyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlDb21taXQBBQRhZGRyBQtmaW5pc2hCbG9jawUDbmlsBQ1wcm9sb2dBY3Rpb25zBQtmaW5pc2hCbG9jawFpAQxyZXZlYWxSYW5kb20BCG1heFZhbHVlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQEYWRkcgkApQgBCAUBaQZjYWxsZXIECWZpbmlzaEtleQkBCWtleUNvbW1pdAEFBGFkZHIEC2ZpbmlzaEJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUJZmluaXNoS2V5AiRZb3UgaGF2ZSB0byBjb21taXRGb3JSYW5kb20oKSBmaXJzdCEDCQBmAgULZmluaXNoQmxvY2sFBmhlaWdodAkAAgEJAKwCAgI0UmFuZG9tIG51bWJlciBpcyBub3QgcmVhZHkgeWV0LCB3YWl0IHVudGlsIGhlaWdodCA9IAkApAMBBQtmaW5pc2hCbG9jawQHZW50cm9weQkBBXZhbHVlAQgJAQV2YWx1ZQEJAO0HAQULZmluaXNoQmxvY2sDdnJmBARzYWx0CQCbAwEJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUEYWRkcgIABARyYW5kCQEPZ2V0UmFuZG9tTnVtYmVyAwUIbWF4VmFsdWUFBHNhbHQFB2VudHJvcHkJAJQKAgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEFCWZpbmlzaEtleQUDbmlsBQ1wcm9sb2dBY3Rpb25zBQRyYW5kAWkBCGJ1eVNMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDXByb2xvZ0FjdGlvbnMJAJQKAggIBQZyZXN1bHQCXzICXzEFC2FjcmVzUmVzdWx0AWkBCmV4cGVkaXRpb24CB21lc3NhZ2UDc2lnBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAgFAWYCXzIECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBA0kdDA4MzYzMDgzNzM2CQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81BAVuZXdFcQgFDSR0MDgzNjMwODM3MzYCXzEED3Nob3VsZFplcm9CdWZmcwgFDSR0MDgzNjMwODM3MzYCXzIEB2lnbm9yZWQIBQ0kdDA4MzYzMDgzNzM2Al8zBAFlCQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAJpZAgIBQFlAl8yAl8xBAZyZXN1bHQDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEFA25pbAIAAAAJAJUKAwkAzggCCAUBZQJfMQMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsCQDNCAIJAM0IAgkAzQgCCQDNCAIFA25pbAkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAggIBQFlAl8yAl8yCQDMCAICAUwJAMwIAgUCaWQFA25pbAIBXwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAgFAWYCXzEJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQIBQFmAl8zAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIaZXhwZWRpdGlvbl9jaGVja1RvdXJuYW1lbnQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDXByb2xvZ0FjdGlvbnMJAJUKAwgFBnJlc3VsdAJfMggFBnJlc3VsdAJfMwULYWNyZXNSZXN1bHQBaQEQYnV5U0xhbmRGb3JBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUMU19DT1NUX0FDUkVTCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUMU19DT1NUX0FDUkVTBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMYWNyZXNBc3NldElkBQNhbXQFA25pbAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDXByb2xvZ0FjdGlvbnMJAJQKAggIBQZyZXN1bHQCXzICXzEFC2FjcmVzUmVzdWx0AWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBggFAWkGY2FsbGVyAAAFC2xhbmRBc3NldElkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xBQ1wcm9sb2dBY3Rpb25zCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQ5sYW5kQXNzZXRJZE9wdAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDOCAIFBnJlc3VsdAUNcHJvbG9nQWN0aW9ucwFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uAgkApQgBCAUBaQZjYWxsZXIFDGxhbmRBc3NldElkcwkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQUNcHJvbG9nQWN0aW9ucwgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8DCQBmAgAABQVsb2Z0RgkAAgECME9wZXJhdGlvbiBsZWFkcyB0byBuZWdhdGl2ZSBmcmVlIHdhcmVob3VzZSBzcGFjZQQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzggCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQ1wcm9sb2dBY3Rpb25zAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyBApuZXdiaWVBZGRyCQCmCAEFCW5ld1BsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEFCm5ld2JpZUFkZHIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIECW9sZExhc3RUeAkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRMYXN0VHgJAAIBAiJvbGRQbGF5ZXIgZGlkbid0IGRvIGFueSB0eCBpbiBnYW1lAwkAZwIAAAgJAO8HAQkBBXZhbHVlAQUKbmV3YmllQWRkcglhdmFpbGFibGUJAAIBAhZuZXdQbGF5ZXIgaGFzIG5vIFdBVkVTBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAt2aXJ0V2xnRGF0YQkBCWFzQW55TGlzdAEJAPwHBAULd2xnQ29udHJhY3QCEmNoZWNrV2xnWHBSRUFET05MWQkAzAgCBQRhZGRyBQNuaWwFA25pbAQNdmlydFdsZ1BvaW50cwkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQABBA0kdDA5OTU0ODk5OTM4AwkAZwIAAAUNdmlydFdsZ1BvaW50cwkAlAoCAAAFA25pbAQHZGVsdGFYUAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIJdGFrZVdsZ1hwCQDMCAIFBGFkZHIFA25pbAUDbmlsAwkAAAIFB2RlbHRhWFAFB2RlbHRhWFAJAJQKAgUNdmlydFdsZ1BvaW50cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleVVzZXJYUAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAl3bGdQb2ludHMIBQ0kdDA5OTU0ODk5OTM4Al8xBAp3bGdBY3Rpb25zCAUNJHQwOTk1NDg5OTkzOAJfMgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpmcmVlS2V5QWNjAAAFCXdsZ1BvaW50cwQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwUKd2xnQWN0aW9ucwAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIZZXF1aXBEdWNrX2NoZWNrVG91cm5hbWVudAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUFbmV3RXEFC3NlZ0JhY2twYWNrAgE7AAEECmJ1ZmZFZmZlY3QDCQAAAgUIc2VnQnBBdXgCAAAABARhdXgwCQCRAwIJALUJAgUIc2VnQnBBdXgCASwAAAMJAAACBQRhdXgwAgAAAAQGaWR4Q250CQC1CQIFBGF1eDACAToEA2lkeAkAkQMCBQZpZHhDbnQAAAQDY250CQCRAwIFBmlkeENudAABAwMDAwMJAAACBQNpZHgCAjA2BgkAAAIFA2lkeAICMDcGCQAAAgUDaWR4AgIwOAkBAiE9AgUDY250AgAHCQBmAgkBDXBhcnNlSW50VmFsdWUBBQNjbnQAAAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUFbmV3RXEFCXRlbXBQcm9kQgcFBXN0YXRzBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBE2luaXREdWNrVG91ckF0dGVtcHQBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAx0b3VyTG9jYXRpb24JAKwCAgkApAMBBQZsYXN0SWQCBF9UXzAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQFCWN1ckhlYWx0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVtYXhIUAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDHRvdXJMb2NhdGlvbgUDbmlsBQx0b3VyTG9jYXRpb24BaQEMYnJlYWtBdHRlbXB0AAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAQIhPQIJAJEDAgkAtQkCBQtjdXJMb2NhdGlvbgIBXwUKbG9jSWR4VHlwZQIBVAkAAgECIllvdXIgZHVjayBpcyBub3QgaW4gdGhlIHRvdXJuYW1lbnQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDXNhdmVkTG9jYXRpb24FC2N1ckxvY2F0aW9uAWkBFGJyZWFrQXR0ZW1wdENhbGxiYWNrAAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFA25pbAIUYnJlYWtBdHRlbXB0Q2FsbGJhY2sBaQEWZXhpdFRvdXJuYW1lbnRJbnRlcm5hbAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAULc2F2ZWRIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ1zYXZlZExvY2F0aW9uBQNuaWwHAWkBD3Byb2Nlc3NEZWxpdmVyeQELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAUPZGVsaXZlcnlGdW5kS2V5AAADCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQlmdW5kVG90YWwJAAIBCQCsAgICIERlbGl2ZXJ5IGlzIG5vdCBhdmFpbGFibGUsIGZ1bmQ9CQEKZml4ZWRQb2ludAIFCWZ1bmRUb3RhbAAGBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhjb3VudEtleQkBFGtleVVzZXJEZWxpdmVyeUNvdW50AQUEYWRkcgQHbGFzdERheQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBGFkZHIAAAQFdG9kYXkJAGkCBQNub3cFCURBWU1JTExJUwQFY291bnQDCQAAAgUHbGFzdERheQUFdG9kYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAAABAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyAAAEEWFsbG93ZWREZWxpdmVyaWVzCQBkAgUXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMJAGkCBQVhY3JlcwUaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQDCQBnAgUFY291bnQFEWFsbG93ZWREZWxpdmVyaWVzCQACAQkArAICCQCsAgICEVlvdSBhbHJlYWR5IHVzZWQgCQCkAwEFEWFsbG93ZWREZWxpdmVyaWVzAhwgZGVsaXZlcnkgYXR0ZW1wdHMgZm9yIHRvZGF5BA5nbG9iYWxDb3VudEtleQkBFGtleUR1Y2tEZWxpdmVyeUNvdW50AQULZHVja0Fzc2V0SWQEBnJld2FyZAkA/AcEBQ9lY29ub215Q29udHJhY3QCEnNlbmREZWxpdmVyeVJld2FyZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIFBWNvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUEYWRkcgUFdG9kYXkJAMwIAgkBDEludGVnZXJFbnRyeQIFDmdsb2JhbENvdW50S2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5nbG9iYWxDb3VudEtleQAAAAEFA25pbAUGcmV3YXJkAWkBB3JvYkxhbmQCB21lc3NhZ2UDc2lnBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUKd2xnQXNzZXRJZAkAAgECFVdMR09MRCBwYXltZW50cyBvbmx5IQMJAQIhPQIFBndsZ0FtdAUSTUlOX1dMR09MRF9ST0JCRVJZCQACAQkArAICCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBRJNSU5fV0xHT0xEX1JPQkJFUlkACAIHIFdMR09MRAQEYWRkcgkApQgBCAUBaQZjYWxsZXIDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC8CQIJALAJAQUHbWVzc2FnZQIBOwQGcm9iTG9nCQC8CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQZyb2JMb2cFCHJsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQIcHJvZFVzZWQJAJEDAgUGcm9iTG9nBQtybFByb2RzVXNlZAQIbGFzdFBhcnQJALUJAgkAkQMCBQVwYXJ0cwABAgF8BAdyb2JUeXBlCQCRAwIFCGxhc3RQYXJ0BQZybFR5cGUDCQECIT0CBQdyb2JUeXBlAgFCCQACAQIeT25seSBiYW5rIHJvYmJlcnkgaXMgc3VwcG9ydGVkBAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIbGFzdFBhcnQFC3JsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFCGxhc3RQYXJ0BQhybExhc3RUeAQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFBGFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQPJHQwMTE3MTE2MTE3MjI3CQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEFCHByb2RVc2VkBAVuZXdFcQgFDyR0MDExNzExNjExNzIyNwJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUPJHQwMTE3MTE2MTE3MjI3Al8yBAhpc0JwVXNlZAgFDyR0MDExNzExNjExNzIyNwJfMwQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04DCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhjb3VudEtleQkBE2tleVVzZXJSb2JiZXJ5Q291bnQBBQRhZGRyBAdsYXN0RGF5CQELdmFsdWVPckVsc2UCCQCfCAEJARVrZXlVc2VyTGFzdFJvYmJlcnlEYXkBBQRhZGRyAAAEBXRvZGF5CQBpAgUDbm93BQlEQVlNSUxMSVMEBWNvdW50AwkAAAIFB2xhc3REYXkFBXRvZGF5CQELdmFsdWVPckVsc2UCCQCfCAEFCGNvdW50S2V5AAAAAAQFYWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNYWNyZXNDb250cmFjdAkBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQUEYWRkcgAABBBhbGxvd2VkUm9iYmVyaWVzCQBkAgUWQUxMT1dFRF9GUkVFX1JPQkJFUklFUwkAaQIFBWFjcmVzBRlBQ1JFU19GT1JfUk9CQkVSWV9BVFRFTVBUAwkAZwIFBWNvdW50BRBhbGxvd2VkUm9iYmVyaWVzCQACAQkArAICCQCsAgICEVlvdSBhbHJlYWR5IHVzZWQgCQCkAwEFEGFsbG93ZWRSb2JiZXJpZXMCGyByb2JiZXJ5IGF0dGVtcHRzIGZvciB0b2RheQQOZ2xvYmFsQ291bnRLZXkJARNrZXlEdWNrUm9iYmVyeUNvdW50AQULZHVja0Fzc2V0SWQEBGxvb3QDCQBmAgUFbmV3SFAAAAQJZnVuZFRvdGFsCQDwBwIFBHRoaXMFCndsZ0Fzc2V0SWQEBXByaXplAwUIaXNCcFVzZWQJAGgCAAIFEk1JTl9XTEdPTERfUk9CQkVSWQkAaAIABQUSTUlOX1dMR09MRF9ST0JCRVJZAwkAZgIFBXByaXplBQlmdW5kVG90YWwJAAIBCQCsAgIJAKwCAgkArAICAiJSb2JiZXJ5IGlzIG5vdCBhdmFpbGFibGUsIGZ1bmRzID0gCQEKZml4ZWRQb2ludAIFCWZ1bmRUb3RhbAAIAhQgV0xHT0xELCByZXF1aXJlZCA9IAkBCmZpeGVkUG9pbnQCBQVwcml6ZQAICQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUFcHJpemUFCndsZ0Fzc2V0SWQFA25pbAUDbmlsCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM4IAgkAzggCCQDOCAIFDXByb2xvZ0FjdGlvbnMFBGxvb3QDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAgUFbmV3SFAAAAUMeHBTdWNjZXNzUm9iBQl4cEZhaWxSb2ICXzEJAQxJbnRlZ2VyRW50cnkCCQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQFA25vdwkBDEludGVnZXJFbnRyeQIFCGNvdW50S2V5CQBkAgUFY291bnQAAQkBDEludGVnZXJFbnRyeQIJARVrZXlVc2VyTGFzdFJvYmJlcnlEYXkBBQRhZGRyBQV0b2RheQkBDEludGVnZXJFbnRyeQIFDmdsb2JhbENvdW50S2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5nbG9iYWxDb3VudEtleQAAAAEJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAJYDAQkAzAgCBQVuZXdIUAkAzAgCAAAFA25pbAAAAWkBC2J1eVJvYm9EdWNrAAMJAQEhAQUTS1NfQUxMT1dfUk9CT19EVUNLUwkAAgECFUZlYXR1cmUgaXMgdHVybmVkIG9mZgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQ5ST0JPX0RVQ0tfVVNEVAkAAgEJAKwCAgkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAQpmaXhlZFBvaW50AgUOUk9CT19EVUNLX1VTRFQABgIFIFVTRFQEB25leHROdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBD2tleU5leHRSb2JvRHVjawAAAAQFYnl0ZXoJAJoDAQUHbmV4dE51bQQEbmFtZQkArAICCQCsAgIFC1JPQk9fUFJFRklYAgEtCQCyAgIJANwEAQUFYnl0ZXoACAQFY29sb3IJALICAgkA3AQBCQDUFgEFBWJ5dGV6AAYEBWlzc3VlCQDCCAUFBG5hbWUJAKwCAgI3Um9ibyBEdWNrIE5GVCBmb3IgV2F2ZXNMYW5kcyBnYW1lLCBiYWNrZ3JvdW5kIGNvbG9yID0gIwUFY29sb3IAAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCCQEPa2V5TmV4dFJvYm9EdWNrAAkAZAIFB25leHROdW0AAQUFaXNzdWUJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpDG9yaWdpbkNhbGxlcgABBQdhc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAkAlAoCCQDYBAEFB2Fzc2V0SWQFBWNvbG9yAAkEEXI=", "height": 3308012, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8B2fhS4Zq69gjGusVTnD4w3eLioHdYYZYHMc6q1rNf34 Next: Cncztz3R3j6yxkecpx1KZTZEWFQktwULYbXbyRTAvedX Diff:
Old | New | Differences | |
---|---|---|---|
9 | 9 | ||
10 | 10 | let d = 86400000 | |
11 | 11 | ||
12 | - | let e = take(drop(this.bytes, 1), 1) | |
13 | - | ||
14 | - | let f = { | |
15 | - | let g = e | |
16 | - | if ((base58'2W' == g)) | |
12 | + | let e = 1727740799000 | |
13 | + | ||
14 | + | let f = take(drop(this.bytes, 1), 1) | |
15 | + | ||
16 | + | let g = { | |
17 | + | let h = f | |
18 | + | if ((base58'2W' == h)) | |
17 | 19 | then if (a) | |
18 | 20 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
19 | 21 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
20 | - | else if ((base58'2T' == | |
22 | + | else if ((base58'2T' == h)) | |
21 | 23 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
22 | 24 | else throw("Unknown chain") | |
23 | 25 | } | |
24 | 26 | ||
25 | - | let | |
26 | - | let | |
27 | - | if ((base58'2W' == | |
27 | + | let i = { | |
28 | + | let h = f | |
29 | + | if ((base58'2W' == h)) | |
28 | 30 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
29 | - | else if ((base58'2T' == | |
31 | + | else if ((base58'2T' == h)) | |
30 | 32 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
31 | 33 | else throw("Unknown chain") | |
32 | 34 | } | |
33 | 35 | ||
34 | - | let | |
35 | - | let | |
36 | - | if ((base58'2W' == | |
36 | + | let j = { | |
37 | + | let h = f | |
38 | + | if ((base58'2W' == h)) | |
37 | 39 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
38 | - | else if ((base58'2T' == | |
40 | + | else if ((base58'2T' == h)) | |
39 | 41 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
40 | 42 | else throw("Unknown chain") | |
41 | 43 | } | |
42 | 44 | ||
43 | - | let | |
44 | - | let | |
45 | - | if ((base58'2W' == | |
45 | + | let k = { | |
46 | + | let h = f | |
47 | + | if ((base58'2W' == h)) | |
46 | 48 | then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA" | |
47 | - | else if ((base58'2T' == | |
49 | + | else if ((base58'2T' == h)) | |
48 | 50 | then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh" | |
49 | 51 | else throw("Unknown chain") | |
50 | 52 | } | |
51 | 53 | ||
52 | - | let | |
53 | - | let | |
54 | - | if ((base58'2W' == | |
54 | + | let l = { | |
55 | + | let h = f | |
56 | + | if ((base58'2W' == h)) | |
55 | 57 | then 10000000000 | |
56 | - | else if ((base58'2T' == | |
58 | + | else if ((base58'2T' == h)) | |
57 | 59 | then 100000000 | |
58 | 60 | else throw("Unknown chain") | |
59 | 61 | } | |
60 | 62 | ||
61 | - | let | |
62 | - | let | |
63 | - | if ((base58'2W' == | |
63 | + | let m = { | |
64 | + | let h = f | |
65 | + | if ((base58'2W' == h)) | |
64 | 66 | then d | |
65 | - | else if ((base58'2T' == | |
67 | + | else if ((base58'2T' == h)) | |
66 | 68 | then 60000 | |
67 | 69 | else throw("Unknown chain") | |
68 | 70 | } | |
69 | 71 | ||
70 | - | let | |
71 | - | ||
72 | - | let | |
73 | - | ||
74 | - | let | |
75 | - | ||
76 | - | let | |
77 | - | ||
78 | - | let | |
79 | - | ||
80 | - | let | |
81 | - | ||
82 | - | let | |
83 | - | ||
84 | - | let | |
85 | - | ||
86 | - | let | |
87 | - | ||
88 | - | func | |
89 | - | ||
90 | - | ||
91 | - | let | |
92 | - | ||
93 | - | let | |
94 | - | ||
95 | - | let | |
96 | - | ||
97 | - | let | |
98 | - | ||
99 | - | let | |
100 | - | ||
101 | - | let | |
102 | - | ||
103 | - | func | |
104 | - | ||
105 | - | ||
106 | - | func | |
107 | - | ||
108 | - | ||
109 | - | func | |
110 | - | ||
111 | - | ||
112 | - | func | |
113 | - | ||
114 | - | ||
115 | - | let | |
116 | - | ||
117 | - | let | |
118 | - | ||
119 | - | let | |
120 | - | ||
121 | - | let | |
122 | - | ||
123 | - | let | |
124 | - | ||
125 | - | let | |
126 | - | ||
127 | - | let | |
128 | - | ||
129 | - | let | |
130 | - | ||
131 | - | let | |
132 | - | ||
133 | - | let | |
134 | - | ||
135 | - | let | |
136 | - | ||
137 | - | let | |
138 | - | ||
139 | - | let | |
140 | - | ||
141 | - | let | |
142 | - | ||
143 | - | let | |
144 | - | ||
145 | - | let | |
146 | - | ||
147 | - | let | |
148 | - | ||
149 | - | func | |
150 | - | ||
151 | - | ||
152 | - | func | |
153 | - | ||
154 | - | ||
155 | - | func | |
156 | - | ||
157 | - | ||
158 | - | func | |
159 | - | ||
160 | - | ||
161 | - | func | |
162 | - | ||
163 | - | ||
164 | - | func | |
165 | - | let | |
166 | - | if ($isInstanceOf( | |
72 | + | let n = "__" | |
73 | + | ||
74 | + | let o = 1000000 | |
75 | + | ||
76 | + | let p = 100000000 | |
77 | + | ||
78 | + | let q = 25 | |
79 | + | ||
80 | + | let r = 100 | |
81 | + | ||
82 | + | let s = 225 | |
83 | + | ||
84 | + | let t = 400 | |
85 | + | ||
86 | + | let u = 625 | |
87 | + | ||
88 | + | let v = [0, 1, 2, 3, 4, 5] | |
89 | + | ||
90 | + | func w (x,y) = valueOrErrorMessage(getString(x, y), makeString(["mandatory ", toString(x), ".", y, " is not defined"], "")) | |
91 | + | ||
92 | + | ||
93 | + | let z = 1 | |
94 | + | ||
95 | + | let A = 2 | |
96 | + | ||
97 | + | let B = 3 | |
98 | + | ||
99 | + | let C = 4 | |
100 | + | ||
101 | + | let D = 7 | |
102 | + | ||
103 | + | let E = 8 | |
104 | + | ||
105 | + | func F () = "%s__restConfig" | |
106 | + | ||
107 | + | ||
108 | + | func G () = "%s__restAddr" | |
109 | + | ||
110 | + | ||
111 | + | func H (I) = split_4C(w(I, F()), n) | |
112 | + | ||
113 | + | ||
114 | + | func J (K,L) = valueOrErrorMessage(addressFromString(K[L]), ("Rest cfg doesn't contain address at index " + toString(L))) | |
115 | + | ||
116 | + | ||
117 | + | let M = addressFromStringValue(valueOrElse(getString(this, G()), j)) | |
118 | + | ||
119 | + | let K = H(M) | |
120 | + | ||
121 | + | let N = J(K, z) | |
122 | + | ||
123 | + | let O = J(K, A) | |
124 | + | ||
125 | + | let P = J(K, B) | |
126 | + | ||
127 | + | let Q = J(K, C) | |
128 | + | ||
129 | + | let R = J(K, D) | |
130 | + | ||
131 | + | let S = J(K, E) | |
132 | + | ||
133 | + | let T = 0 | |
134 | + | ||
135 | + | let U = 1 | |
136 | + | ||
137 | + | let V = 2 | |
138 | + | ||
139 | + | let W = 3 | |
140 | + | ||
141 | + | let X = "wlg_assetId" | |
142 | + | ||
143 | + | let Y = valueOrErrorMessage(getBinary(Q, X), "WLGOLD is not issued yet") | |
144 | + | ||
145 | + | let Z = "acresAssetId" | |
146 | + | ||
147 | + | let aa = valueOrErrorMessage(getBinary(S, Z), "ACRES is not issued yet") | |
148 | + | ||
149 | + | let ab = 2 | |
150 | + | ||
151 | + | func ac (x) = ("finishBlockFor_" + x) | |
152 | + | ||
153 | + | ||
154 | + | func ad () = "resTypesProportions" | |
155 | + | ||
156 | + | ||
157 | + | func ae (af) = ("resTypesByContinent_" + af) | |
158 | + | ||
159 | + | ||
160 | + | func ag (ah) = ("stakedLandsByOwner_" + ah) | |
161 | + | ||
162 | + | ||
163 | + | func ai (ah) = ("stakedPiecesByOwner_" + ah) | |
164 | + | ||
165 | + | ||
166 | + | func aj (ak) = { | |
167 | + | let h = ak | |
168 | + | if ($isInstanceOf(h, "String")) | |
167 | 169 | then { | |
168 | - | let | |
169 | - | | |
170 | + | let al = h | |
171 | + | al | |
170 | 172 | } | |
171 | 173 | else throw("fail to cast into String") | |
172 | 174 | } | |
173 | 175 | ||
174 | 176 | ||
175 | - | func | |
176 | - | let | |
177 | - | if ($isInstanceOf( | |
177 | + | func am (ak) = { | |
178 | + | let h = ak | |
179 | + | if ($isInstanceOf(h, "Int")) | |
178 | 180 | then { | |
179 | - | let | |
180 | - | | |
181 | + | let an = h | |
182 | + | an | |
181 | 183 | } | |
182 | 184 | else throw("fail to cast into Int") | |
183 | 185 | } | |
184 | 186 | ||
185 | 187 | ||
186 | - | func | |
187 | - | let | |
188 | - | if ($isInstanceOf( | |
188 | + | func ao (ak) = { | |
189 | + | let h = ak | |
190 | + | if ($isInstanceOf(h, "List[Any]")) | |
189 | 191 | then { | |
190 | - | let | |
191 | - | | |
192 | + | let ap = h | |
193 | + | ap | |
192 | 194 | } | |
193 | 195 | else throw("fail to cast into List[Any]") | |
194 | 196 | } | |
195 | 197 | ||
196 | 198 | ||
197 | - | func | |
198 | - | let | |
199 | - | if ($isInstanceOf( | |
199 | + | func aq (ak) = { | |
200 | + | let h = ak | |
201 | + | if ($isInstanceOf(h, "Boolean")) | |
200 | 202 | then { | |
201 | - | let | |
202 | - | | |
203 | + | let al = h | |
204 | + | al | |
203 | 205 | } | |
204 | 206 | else throw("fail to cast into Boolean") | |
205 | 207 | } | |
206 | 208 | ||
207 | 209 | ||
208 | - | func | |
209 | - | let | |
210 | - | if (("S" == | |
211 | - | then | |
212 | - | else if (("M" == | |
213 | - | then | |
214 | - | else if (("L" == | |
215 | - | then | |
216 | - | else if (("XL" == | |
217 | - | then | |
218 | - | else if (("XXL" == | |
219 | - | then | |
210 | + | func ar (as) = { | |
211 | + | let h = as | |
212 | + | if (("S" == h)) | |
213 | + | then q | |
214 | + | else if (("M" == h)) | |
215 | + | then r | |
216 | + | else if (("L" == h)) | |
217 | + | then s | |
218 | + | else if (("XL" == h)) | |
219 | + | then t | |
220 | + | else if (("XXL" == h)) | |
221 | + | then u | |
220 | 222 | else throw("Unknown land size") | |
221 | 223 | } | |
222 | 224 | ||
223 | 225 | ||
224 | - | func | |
225 | - | ||
226 | - | ||
227 | - | func | |
228 | - | ||
229 | - | ||
230 | - | func | |
231 | - | ||
232 | - | ||
233 | - | func | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | (((toString(( | |
238 | - | } | |
239 | - | ||
240 | - | ||
241 | - | func | |
226 | + | func at (al) = isDefined(parseInt(al)) | |
227 | + | ||
228 | + | ||
229 | + | func au () = "contractsBlocked" | |
230 | + | ||
231 | + | ||
232 | + | func av (aw) = ("lastTxIdByUser_" + aw) | |
233 | + | ||
234 | + | ||
235 | + | func ax (ay,az) = { | |
236 | + | let aA = pow(10, 0, az, 0, 0, DOWN) | |
237 | + | let aB = toString((ay % aA)) | |
238 | + | let aC = drop(toString(aA), (1 + size(aB))) | |
239 | + | (((toString((ay / aA)) + ".") + aC) + aB) | |
240 | + | } | |
241 | + | ||
242 | + | ||
243 | + | func aD (aE,aF,aG) = if ((0 >= aE)) | |
242 | 244 | then throw("maxValue should be > 0") | |
243 | 245 | else { | |
244 | - | let aG = sha256((aE + aF)) | |
245 | - | (toInt(aG) % aD) | |
246 | - | } | |
247 | - | ||
248 | - | ||
249 | - | func aH () = min([lastBlock.timestamp, 1727740799000]) | |
250 | - | ||
251 | - | ||
252 | - | let aI = "LAND" | |
253 | - | ||
254 | - | let aJ = "DUCK" | |
255 | - | ||
256 | - | let aK = "ROBO" | |
257 | - | ||
258 | - | let aL = "PRESALE" | |
259 | - | ||
260 | - | let aM = 6 | |
261 | - | ||
262 | - | let aN = 25 | |
263 | - | ||
264 | - | let aO = 3456000 | |
265 | - | ||
266 | - | let aP = 10000000000 | |
267 | - | ||
268 | - | let aQ = "Africa_F_Africa" | |
269 | - | ||
270 | - | let aR = 39637 | |
271 | - | ||
272 | - | let aS = 10 | |
273 | - | ||
274 | - | let aT = 50000 | |
275 | - | ||
276 | - | let aU = 10 | |
277 | - | ||
278 | - | let aV = 100000000 | |
279 | - | ||
280 | - | let aW = 0 | |
281 | - | ||
282 | - | let aX = 200000000 | |
283 | - | ||
284 | - | let aY = 0 | |
285 | - | ||
286 | - | let aZ = 200000000 | |
287 | - | ||
288 | - | let ba = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
289 | - | ||
290 | - | let bb = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
291 | - | ||
292 | - | let bc = 10000000 | |
293 | - | ||
294 | - | let bd = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
295 | - | ||
296 | - | let be = 6 | |
297 | - | ||
298 | - | let bf = 8 | |
299 | - | ||
300 | - | let bg = 9 | |
301 | - | ||
302 | - | let bh = 10 | |
246 | + | let aH = sha256((aF + aG)) | |
247 | + | (toInt(aH) % aE) | |
248 | + | } | |
249 | + | ||
250 | + | ||
251 | + | func aI () = min([lastBlock.timestamp, e]) | |
252 | + | ||
253 | + | ||
254 | + | let aJ = "LAND" | |
255 | + | ||
256 | + | let aK = "DUCK" | |
257 | + | ||
258 | + | let aL = "ROBO" | |
259 | + | ||
260 | + | let aM = "PRESALE" | |
261 | + | ||
262 | + | let aN = 6 | |
263 | + | ||
264 | + | let aO = 25 | |
265 | + | ||
266 | + | let aP = 3456000 | |
267 | + | ||
268 | + | let aQ = 10000000000 | |
269 | + | ||
270 | + | let aR = "Africa_F_Africa" | |
271 | + | ||
272 | + | let aS = 39637 | |
273 | + | ||
274 | + | let aT = 10 | |
275 | + | ||
276 | + | let aU = 50000 | |
277 | + | ||
278 | + | let aV = 10 | |
279 | + | ||
280 | + | let aW = 100000000 | |
281 | + | ||
282 | + | let aX = 0 | |
283 | + | ||
284 | + | let aY = 200000000 | |
285 | + | ||
286 | + | let aZ = 0 | |
287 | + | ||
288 | + | let ba = 200000000 | |
289 | + | ||
290 | + | let bb = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
291 | + | ||
292 | + | let bc = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
293 | + | ||
294 | + | let bd = 10000000 | |
295 | + | ||
296 | + | let be = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
297 | + | ||
298 | + | let bf = 6 | |
299 | + | ||
300 | + | let bg = 8 | |
301 | + | ||
302 | + | let bh = 9 | |
303 | 303 | ||
304 | 304 | let bi = 10 | |
305 | 305 | ||
306 | - | let bj = 0 | |
307 | - | ||
308 | - | let bk = 1 | |
309 | - | ||
310 | - | let bl = 2 | |
311 | - | ||
312 | - | let bm = 3 | |
313 | - | ||
314 | - | let bn = 4 | |
315 | - | ||
316 | - | let bo = 0 | |
317 | - | ||
318 | - | let bp = 1 | |
319 | - | ||
320 | - | let bq = 2 | |
321 | - | ||
322 | - | let br = 3 | |
323 | - | ||
324 | - | let bs = 0 | |
325 | - | ||
326 | - | let bt = 1 | |
327 | - | ||
328 | - | let bu = 2 | |
329 | - | ||
330 | - | let bv = 3 | |
331 | - | ||
332 | - | let bw = 0 | |
333 | - | ||
334 | - | let bx = 1 | |
335 | - | ||
336 | - | let by = 2 | |
337 | - | ||
338 | - | func bz (bA) = ("no_" + bA) | |
339 | - | ||
340 | - | ||
341 | - | func bB (bA) = ("lcna_" + bA) | |
342 | - | ||
343 | - | ||
344 | - | func bC (bA) = ("st_" + bA) | |
345 | - | ||
346 | - | ||
347 | - | func bD (bE,bA) = makeString(["las", bE, bA], "_") | |
348 | - | ||
349 | - | ||
350 | - | func bF (bG,bA,ag) = ((((("sttao_" + bG) + "_") + bA) + "_") + ag) | |
351 | - | ||
352 | - | ||
353 | - | func bH (bI) = ("wh_" + bI) | |
354 | - | ||
355 | - | ||
356 | - | func bJ (bA) = ("infraLevel_" + bA) | |
357 | - | ||
358 | - | ||
359 | - | func bK (bA) = ("duckCustomNameByAssetId_" + bA) | |
360 | - | ||
361 | - | ||
362 | - | func bL (av) = ("accountCustomNameByAddr_" + av) | |
363 | - | ||
364 | - | ||
365 | - | func bM (av) = ("accRefBy_" + av) | |
366 | - | ||
367 | - | ||
368 | - | func bN (bO) = ("onboardArtActivatedOnDuck_" + bO) | |
369 | - | ||
370 | - | ||
371 | - | func bP (av) = ("onboardArtActivatedDuckBy_" + av) | |
372 | - | ||
373 | - | ||
374 | - | func bQ (av) = ("accReferrals_" + av) | |
375 | - | ||
376 | - | ||
377 | - | func bR (bA) = ("duckOwner_" + bA) | |
378 | - | ||
379 | - | ||
380 | - | func bS (ag) = ("stakedDuckByOwner_" + ag) | |
381 | - | ||
382 | - | ||
383 | - | func bT (bO) = ("backPack_" + bO) | |
384 | - | ||
385 | - | ||
386 | - | func bU (bO) = ("duckLocation_" + bO) | |
387 | - | ||
388 | - | ||
389 | - | func bV (bW) = ("%s%s__userGwlReleaseTime__" + bW) | |
390 | - | ||
391 | - | ||
392 | - | func bX () = "emergencyWarehouseProducts" | |
393 | - | ||
394 | - | ||
395 | - | let bY = "deliveryFund" | |
396 | - | ||
397 | - | let bZ = "%s__lastTourId" | |
398 | - | ||
399 | - | func ca (cb) = ("%s%d__tourStaticData__" + toString(cb)) | |
400 | - | ||
401 | - | ||
402 | - | func cc (cb) = ("%s%d__tourDynamicData__" + toString(cb)) | |
403 | - | ||
404 | - | ||
405 | - | func cd (cb,bO) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(cb), bO], "__") | |
406 | - | ||
407 | - | ||
408 | - | let ce = 0 | |
409 | - | ||
410 | - | let cf = 1 | |
411 | - | ||
412 | - | let cg = 6 | |
413 | - | ||
414 | - | let ch = 1 | |
415 | - | ||
416 | - | func ci (cj,cb) = { | |
417 | - | let ck = split(valueOrErrorMessage(getString(cj, ca(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__") | |
418 | - | let cl = split_4C(valueOrErrorMessage(getString(cj, cc(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__") | |
419 | - | [ck, cl] | |
420 | - | } | |
421 | - | ||
422 | - | ||
423 | - | func cm (cj,cn) = { | |
424 | - | let co = valueOrElse(getInteger(cj, bZ), 0) | |
425 | - | let cp = split(cn, "_") | |
426 | - | let cq = lastBlock.timestamp | |
427 | - | let cr = ci(cj, co) | |
428 | - | let ck = cr[ce] | |
429 | - | let cl = cr[cf] | |
430 | - | if (if (if ((cp[bx] == "T")) | |
431 | - | then (parseIntValue(cp[bw]) == co) | |
306 | + | let bj = 10 | |
307 | + | ||
308 | + | let bk = 0 | |
309 | + | ||
310 | + | let bl = 1 | |
311 | + | ||
312 | + | let bm = 2 | |
313 | + | ||
314 | + | let bn = 3 | |
315 | + | ||
316 | + | let bo = 4 | |
317 | + | ||
318 | + | let bp = 0 | |
319 | + | ||
320 | + | let bq = 1 | |
321 | + | ||
322 | + | let br = 2 | |
323 | + | ||
324 | + | let bs = 3 | |
325 | + | ||
326 | + | let bt = 0 | |
327 | + | ||
328 | + | let bu = 1 | |
329 | + | ||
330 | + | let bv = 2 | |
331 | + | ||
332 | + | let bw = 3 | |
333 | + | ||
334 | + | let bx = 0 | |
335 | + | ||
336 | + | let by = 1 | |
337 | + | ||
338 | + | let bz = 2 | |
339 | + | ||
340 | + | func bA (bB) = ("no_" + bB) | |
341 | + | ||
342 | + | ||
343 | + | func bC (bB) = ("lcna_" + bB) | |
344 | + | ||
345 | + | ||
346 | + | func bD (bB) = ("st_" + bB) | |
347 | + | ||
348 | + | ||
349 | + | func bE (bF,bB) = makeString(["las", bF, bB], "_") | |
350 | + | ||
351 | + | ||
352 | + | func bG (bH,bB,ah) = ((((("sttao_" + bH) + "_") + bB) + "_") + ah) | |
353 | + | ||
354 | + | ||
355 | + | func bI (bJ) = ("wh_" + bJ) | |
356 | + | ||
357 | + | ||
358 | + | func bK (bB) = ("infraLevel_" + bB) | |
359 | + | ||
360 | + | ||
361 | + | func bL (bB) = ("duckCustomNameByAssetId_" + bB) | |
362 | + | ||
363 | + | ||
364 | + | func bM (aw) = ("accountCustomNameByAddr_" + aw) | |
365 | + | ||
366 | + | ||
367 | + | func bN (aw) = ("accRefBy_" + aw) | |
368 | + | ||
369 | + | ||
370 | + | func bO (bP) = ("onboardArtActivatedOnDuck_" + bP) | |
371 | + | ||
372 | + | ||
373 | + | func bQ (aw) = ("onboardArtActivatedDuckBy_" + aw) | |
374 | + | ||
375 | + | ||
376 | + | func bR (aw) = ("accReferrals_" + aw) | |
377 | + | ||
378 | + | ||
379 | + | func bS (bB) = ("duckOwner_" + bB) | |
380 | + | ||
381 | + | ||
382 | + | func bT (ah) = ("stakedDuckByOwner_" + ah) | |
383 | + | ||
384 | + | ||
385 | + | func bU (bP) = ("backPack_" + bP) | |
386 | + | ||
387 | + | ||
388 | + | func bV (bP) = ("duckLocation_" + bP) | |
389 | + | ||
390 | + | ||
391 | + | func bW (bX) = ("%s%s__userGwlReleaseTime__" + bX) | |
392 | + | ||
393 | + | ||
394 | + | func bY () = "emergencyWarehouseProducts" | |
395 | + | ||
396 | + | ||
397 | + | let bZ = "deliveryFund" | |
398 | + | ||
399 | + | let ca = "%s__lastTourId" | |
400 | + | ||
401 | + | func cb (cc) = ("%s%d__tourStaticData__" + toString(cc)) | |
402 | + | ||
403 | + | ||
404 | + | func cd (cc) = ("%s%d__tourDynamicData__" + toString(cc)) | |
405 | + | ||
406 | + | ||
407 | + | func ce (cc,bP) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(cc), bP], "__") | |
408 | + | ||
409 | + | ||
410 | + | let cf = 0 | |
411 | + | ||
412 | + | let cg = 1 | |
413 | + | ||
414 | + | let ch = 6 | |
415 | + | ||
416 | + | let ci = 1 | |
417 | + | ||
418 | + | func cj (ck,cc) = { | |
419 | + | let cl = split(valueOrErrorMessage(getString(ck, cb(cc)), (("Error reading tournament " + toString(cc)) + " data")), "__") | |
420 | + | let cm = split_4C(valueOrErrorMessage(getString(ck, cd(cc)), (("Error reading tournament " + toString(cc)) + " data")), "__") | |
421 | + | [cl, cm] | |
422 | + | } | |
423 | + | ||
424 | + | ||
425 | + | func cn (ck,co) = { | |
426 | + | let cp = valueOrElse(getInteger(ck, ca), 0) | |
427 | + | let cq = split(co, "_") | |
428 | + | let cr = lastBlock.timestamp | |
429 | + | let cs = cj(ck, cp) | |
430 | + | let cl = cs[cf] | |
431 | + | let cm = cs[cg] | |
432 | + | if (if (if ((cq[by] == "T")) | |
433 | + | then (parseIntValue(cq[bx]) == cp) | |
432 | 434 | else false) | |
433 | - | then ( | |
435 | + | then (cm[ci] == "INPROGRESS") | |
434 | 436 | else false) | |
435 | - | then (parseIntValue( | |
437 | + | then (parseIntValue(cl[ch]) > cr) | |
436 | 438 | else false | |
437 | 439 | } | |
438 | 440 | ||
439 | 441 | ||
440 | - | func | |
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | if (if (if (( | |
449 | - | then (parseIntValue( | |
442 | + | func ct (ck,co) = { | |
443 | + | let cp = valueOrElse(getInteger(ck, ca), 0) | |
444 | + | let cq = split(co, "_") | |
445 | + | let cr = lastBlock.timestamp | |
446 | + | let cs = cj(ck, cp) | |
447 | + | let cl = cs[cf] | |
448 | + | let cm = cs[cg] | |
449 | + | let cu = cq[by] | |
450 | + | if (if (if ((cq[by] == "T")) | |
451 | + | then (parseIntValue(cq[bx]) == cp) | |
450 | 452 | else false) | |
451 | - | then ( | |
453 | + | then (cm[ci] == "INPROGRESS") | |
452 | 454 | else false) | |
453 | - | then (parseIntValue( | |
455 | + | then (parseIntValue(cl[ch]) > cr) | |
454 | 456 | else false | |
455 | 457 | } | |
456 | 458 | ||
457 | 459 | ||
458 | - | func cu (cv) = (parseIntValue(cv[be]) * bc) | |
459 | - | ||
460 | - | ||
461 | - | func cw (cx,cy,cz) = throw(((((("Cheat attempt: oldLoc=" + cx) + ", newLoc=") + cy) + ", case=") + toString(cz))) | |
462 | - | ||
463 | - | ||
464 | - | let cA = 100000000 | |
465 | - | ||
466 | - | let cB = 3200 | |
467 | - | ||
468 | - | let cC = 4000 | |
469 | - | ||
470 | - | let cD = 3 | |
471 | - | ||
472 | - | let cE = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
473 | - | ||
474 | - | let cF = 0 | |
475 | - | ||
476 | - | let cG = 1 | |
477 | - | ||
478 | - | let cH = 2 | |
479 | - | ||
480 | - | let cI = 3 | |
481 | - | ||
482 | - | let cJ = 4 | |
483 | - | ||
484 | - | let cK = 0 | |
485 | - | ||
486 | - | let cL = 6 | |
487 | - | ||
488 | - | let cM = 2 | |
460 | + | func cv (cw) = (parseIntValue(cw[bf]) * bd) | |
461 | + | ||
462 | + | ||
463 | + | func cx (cy,cz,cA) = throw(((((("Cheat attempt: oldLoc=" + cy) + ", newLoc=") + cz) + ", case=") + toString(cA))) | |
464 | + | ||
465 | + | ||
466 | + | let cB = 100000000 | |
467 | + | ||
468 | + | let cC = 3200 | |
469 | + | ||
470 | + | let cD = 4000 | |
471 | + | ||
472 | + | let cE = 3 | |
473 | + | ||
474 | + | let cF = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
475 | + | ||
476 | + | let cG = 0 | |
477 | + | ||
478 | + | let cH = 1 | |
479 | + | ||
480 | + | let cI = 2 | |
481 | + | ||
482 | + | let cJ = 3 | |
483 | + | ||
484 | + | let cK = 4 | |
485 | + | ||
486 | + | let cL = 0 | |
487 | + | ||
488 | + | let cM = 6 | |
489 | 489 | ||
490 | 490 | let cN = 2 | |
491 | 491 | ||
492 | - | let cO = | |
493 | - | ||
494 | - | ||
495 | - | ||
496 | - | ||
497 | - | ||
498 | - | ||
499 | - | ||
500 | - | ||
501 | - | ||
502 | - | ||
503 | - | ||
504 | - | ||
505 | - | ||
506 | - | ||
507 | - | ||
508 | - | ||
509 | - | ||
510 | - | ||
511 | - | ||
512 | - | ||
513 | - | ||
514 | - | ||
515 | - | ||
516 | - | ||
517 | - | ||
518 | - | ||
519 | - | ||
520 | - | ||
521 | - | ||
522 | - | ||
523 | - | ||
524 | - | ||
525 | - | ||
526 | - | ||
527 | - | ||
528 | - | ||
529 | - | ||
530 | - | ||
531 | - | ||
532 | - | ||
533 | - | ||
534 | - | ||
535 | - | ||
536 | - | ||
537 | - | ||
538 | - | ||
539 | - | ||
540 | - | ||
541 | - | ||
542 | - | ||
543 | - | ||
544 | - | ||
545 | - | ||
546 | - | ||
547 | - | ||
548 | - | ||
549 | - | ||
550 | - | ||
551 | - | ||
492 | + | let cO = 2 | |
493 | + | ||
494 | + | let cP = 30 | |
495 | + | ||
496 | + | func cQ (bP) = ("duckHealth_" + bP) | |
497 | + | ||
498 | + | ||
499 | + | func cR (bP) = ("duckChars_" + bP) | |
500 | + | ||
501 | + | ||
502 | + | func cS (bP) = ("duckXP_" + bP) | |
503 | + | ||
504 | + | ||
505 | + | func cT (bP) = ("duckLevel_" + bP) | |
506 | + | ||
507 | + | ||
508 | + | func cU (bP) = ("duckFreePoints_" + bP) | |
509 | + | ||
510 | + | ||
511 | + | func cV (bP) = ("duckEquipment_" + bP) | |
512 | + | ||
513 | + | ||
514 | + | func cW (aw) = ("userXP_" + aw) | |
515 | + | ||
516 | + | ||
517 | + | func cX (aw) = ("userLevel_" + aw) | |
518 | + | ||
519 | + | ||
520 | + | func cY (aw) = ("userFreePoints_" + aw) | |
521 | + | ||
522 | + | ||
523 | + | func cZ (bP) = ("savedHealth_" + bP) | |
524 | + | ||
525 | + | ||
526 | + | func da (bP) = ("savedLocation_" + bP) | |
527 | + | ||
528 | + | ||
529 | + | func db (bP) = ("duckBuffs_" + bP) | |
530 | + | ||
531 | + | ||
532 | + | func dc (bP) = ("lastRobberyTime_" + bP) | |
533 | + | ||
534 | + | ||
535 | + | func dd (bP) = ("totalRobberyCountByDuck_" + bP) | |
536 | + | ||
537 | + | ||
538 | + | func de (aw) = ("userRobberyCount_" + aw) | |
539 | + | ||
540 | + | ||
541 | + | func df (aw) = ("userLastRobberyDay_" + aw) | |
542 | + | ||
543 | + | ||
544 | + | func dg (bP) = ("totalDeliveryCountByDuck_" + bP) | |
545 | + | ||
546 | + | ||
547 | + | func dh (aw) = ("userDeliveryCount_" + aw) | |
548 | + | ||
549 | + | ||
550 | + | func di (aw) = ("userLastDeliveryDay_" + aw) | |
551 | + | ||
552 | 552 | ||
553 | 553 | let dj = 10000 | |
554 | 554 | ||
555 | - | let dk = | |
556 | - | ||
557 | - | let dl = | |
558 | - | ||
559 | - | let dm = | |
560 | - | ||
561 | - | let dn = | |
562 | - | ||
563 | - | let do = | |
564 | - | ||
565 | - | let dp = | |
566 | - | ||
567 | - | let dq = | |
568 | - | ||
569 | - | let dr = | |
555 | + | let dk = 10000 | |
556 | + | ||
557 | + | let dl = 2000 | |
558 | + | ||
559 | + | let dm = 10000 | |
560 | + | ||
561 | + | let dn = 2000 | |
562 | + | ||
563 | + | let do = 100000 | |
564 | + | ||
565 | + | let dp = 1000000 | |
566 | + | ||
567 | + | let dq = 5000000 | |
568 | + | ||
569 | + | let dr = 10000 | |
570 | 570 | ||
571 | 571 | let ds = 1000000 | |
572 | 572 | ||
573 | - | let dt = 10000 | |
574 | - | ||
575 | - | func du (dv) = fraction(cB, pow(dv, 4, cC, 4, 4, DOWN), cA) | |
576 | - | ||
577 | - | ||
578 | - | func dw (dx) = (100 + dx) | |
579 | - | ||
580 | - | ||
581 | - | func dy (dz,dA) = { | |
582 | - | let dB = du(dA) | |
583 | - | [dB, (cD * (dB - dz))] | |
584 | - | } | |
585 | - | ||
586 | - | ||
587 | - | func dC (M,bO,dD,dE) = { | |
588 | - | let dF = split(valueOrElse(getString(M, cQ(bO)), "0_0_0_0_0"), "_") | |
589 | - | let dG = valueOrElse(getInteger(M, cS(bO)), 0) | |
590 | - | let dH = valueOrElse(getInteger(M, cP(bO)), dw(dG)) | |
591 | - | let dI = split(valueOrElse(getString(M, da(bO)), "0_0_0_0_0"), "_") | |
592 | - | ([parseIntValue(dF[cF]), parseIntValue(dF[cG]), parseIntValue(dF[cH]), parseIntValue(dF[cI]), parseIntValue(dF[cJ]), dG, dH] ++ (if (dE) | |
593 | - | then [dD, dD, dD, dD, dD] | |
594 | - | else [parseIntValue(dI[cF]), parseIntValue(dI[cG]), parseIntValue(dI[cH]), parseIntValue(dI[cI]), parseIntValue(dI[cJ])])) | |
595 | - | } | |
596 | - | ||
597 | - | ||
598 | - | let dJ = 86400000 | |
599 | - | ||
600 | - | func dK (av) = ("lastArbTimeUser_" + av) | |
601 | - | ||
602 | - | ||
603 | - | func dL (av) = ("acresStakedAmountByUser_" + av) | |
604 | - | ||
605 | - | ||
606 | - | let dM = { | |
607 | - | let g = e | |
608 | - | if ((base58'2W' == g)) | |
573 | + | let dt = 1000000 | |
574 | + | ||
575 | + | let du = 10000 | |
576 | + | ||
577 | + | func dv (dw) = fraction(cC, pow(dw, 4, cD, 4, 4, DOWN), cB) | |
578 | + | ||
579 | + | ||
580 | + | func dx (dy) = (100 + dy) | |
581 | + | ||
582 | + | ||
583 | + | func dz (dA,dB) = { | |
584 | + | let dC = dv(dB) | |
585 | + | [dC, (cE * (dC - dA))] | |
586 | + | } | |
587 | + | ||
588 | + | ||
589 | + | func dD (N,bP,dE,dF) = { | |
590 | + | let dG = split(valueOrElse(getString(N, cR(bP)), "0_0_0_0_0"), "_") | |
591 | + | let dH = valueOrElse(getInteger(N, cT(bP)), 0) | |
592 | + | let dI = valueOrElse(getInteger(N, cQ(bP)), dx(dH)) | |
593 | + | let dJ = split(valueOrElse(getString(N, db(bP)), "0_0_0_0_0"), "_") | |
594 | + | ([parseIntValue(dG[cG]), parseIntValue(dG[cH]), parseIntValue(dG[cI]), parseIntValue(dG[cJ]), parseIntValue(dG[cK]), dH, dI] ++ (if (dF) | |
595 | + | then [dE, dE, dE, dE, dE] | |
596 | + | else [parseIntValue(dJ[cG]), parseIntValue(dJ[cH]), parseIntValue(dJ[cI]), parseIntValue(dJ[cJ]), parseIntValue(dJ[cK])])) | |
597 | + | } | |
598 | + | ||
599 | + | ||
600 | + | let dK = 86400000 | |
601 | + | ||
602 | + | func dL (aw) = ("lastArbTimeUser_" + aw) | |
603 | + | ||
604 | + | ||
605 | + | func dM (aw) = ("acresStakedAmountByUser_" + aw) | |
606 | + | ||
607 | + | ||
608 | + | let dN = { | |
609 | + | let h = f | |
610 | + | if ((base58'2W' == h)) | |
609 | 611 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
610 | - | else if ((base58'2T' == | |
612 | + | else if ((base58'2T' == h)) | |
611 | 613 | then this | |
612 | 614 | else throw("Unknown chain") | |
613 | 615 | } | |
614 | 616 | ||
615 | - | let | |
616 | - | let | |
617 | - | if ((base58'2W' == | |
617 | + | let dO = { | |
618 | + | let h = f | |
619 | + | if ((base58'2W' == h)) | |
618 | 620 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
619 | - | else if ((base58'2T' == | |
621 | + | else if ((base58'2T' == h)) | |
620 | 622 | then this | |
621 | 623 | else throw("Unknown chain") | |
622 | 624 | } | |
623 | 625 | ||
624 | - | let | |
625 | - | ||
626 | - | let | |
627 | - | ||
628 | - | let | |
629 | - | ||
630 | - | let | |
631 | - | ||
632 | - | let | |
633 | - | let | |
634 | - | if ((base58'2W' == | |
626 | + | let dP = 300000 | |
627 | + | ||
628 | + | let dQ = 5000000 | |
629 | + | ||
630 | + | let dR = 50 | |
631 | + | ||
632 | + | let dS = 10000000 | |
633 | + | ||
634 | + | let dT = { | |
635 | + | let h = f | |
636 | + | if ((base58'2W' == h)) | |
635 | 637 | then 252289527462 | |
636 | - | else if ((base58'2T' == | |
638 | + | else if ((base58'2T' == h)) | |
637 | 639 | then 2522895274 | |
638 | 640 | else throw("Unknown chain") | |
639 | 641 | } | |
640 | 642 | ||
641 | - | let | |
642 | - | let | |
643 | - | if ((base58'2W' == | |
643 | + | let dU = { | |
644 | + | let h = f | |
645 | + | if ((base58'2W' == h)) | |
644 | 646 | then 250000000 | |
645 | - | else if ((base58'2T' == | |
647 | + | else if ((base58'2T' == h)) | |
646 | 648 | then 250000000 | |
647 | 649 | else throw("Unknown chain") | |
648 | 650 | } | |
649 | 651 | ||
650 | - | let | |
651 | - | ||
652 | - | let | |
653 | - | ||
654 | - | let | |
655 | - | ||
656 | - | let | |
657 | - | ||
658 | - | let | |
659 | - | ||
660 | - | let | |
661 | - | ||
662 | - | let | |
663 | - | ||
664 | - | let | |
665 | - | ||
666 | - | let | |
667 | - | ||
668 | - | func | |
669 | - | ||
670 | - | ||
671 | - | func | |
672 | - | ||
673 | - | ||
674 | - | func | |
675 | - | ||
676 | - | ||
677 | - | func | |
678 | - | ||
679 | - | ||
680 | - | func | |
681 | - | ||
682 | - | ||
683 | - | func | |
684 | - | ||
685 | - | ||
686 | - | func | |
687 | - | ||
688 | - | ||
689 | - | func | |
690 | - | ||
691 | - | ||
692 | - | func | |
693 | - | ||
694 | - | ||
695 | - | let | |
696 | - | ||
697 | - | let | |
698 | - | ||
699 | - | let | |
700 | - | ||
701 | - | let | |
702 | - | ||
703 | - | let | |
704 | - | ||
705 | - | let | |
706 | - | ||
707 | - | let | |
708 | - | ||
709 | - | let | |
710 | - | ||
711 | - | let | |
712 | - | ||
713 | - | let | |
714 | - | ||
715 | - | let | |
716 | - | ||
717 | - | let | |
718 | - | ||
719 | - | func | |
720 | - | ||
721 | - | ||
722 | - | func | |
723 | - | let | |
724 | - | then ((( | |
725 | - | else -((((-( | |
726 | - | ( | |
727 | - | } | |
728 | - | ||
729 | - | ||
730 | - | func | |
731 | - | let | |
732 | - | if ((0 >= | |
652 | + | let dV = 100000 | |
653 | + | ||
654 | + | let dW = 2500000000 | |
655 | + | ||
656 | + | let dX = toBigInt(5) | |
657 | + | ||
658 | + | let dY = toBigInt(20) | |
659 | + | ||
660 | + | let dZ = toBigInt((20 * 20)) | |
661 | + | ||
662 | + | let ea = toBigInt(((20 * 20) * 20)) | |
663 | + | ||
664 | + | let eb = toBigInt((((20 * 20) * 20) * 20)) | |
665 | + | ||
666 | + | let ec = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
667 | + | ||
668 | + | let ed = 500 | |
669 | + | ||
670 | + | func ee () = "nextLandNum" | |
671 | + | ||
672 | + | ||
673 | + | func ef (eg) = ("lcn_" + eg) | |
674 | + | ||
675 | + | ||
676 | + | func eh (ei) = ("la_" + ei) | |
677 | + | ||
678 | + | ||
679 | + | func ej (bB,ah) = ((("ilao_" + bB) + "_") + ah) | |
680 | + | ||
681 | + | ||
682 | + | func ek (ei) = ("lo_" + ei) | |
683 | + | ||
684 | + | ||
685 | + | func el (eg) = ("duckByCustomName_" + eg) | |
686 | + | ||
687 | + | ||
688 | + | func em (eg) = ("accountByCustomName_" + eg) | |
689 | + | ||
690 | + | ||
691 | + | func en () = "oldiesList" | |
692 | + | ||
693 | + | ||
694 | + | func eo () = "nextRoboDuck" | |
695 | + | ||
696 | + | ||
697 | + | let ep = 0 | |
698 | + | ||
699 | + | let eq = 1 | |
700 | + | ||
701 | + | let er = 2 | |
702 | + | ||
703 | + | let es = 0 | |
704 | + | ||
705 | + | let et = 5 | |
706 | + | ||
707 | + | let eu = 6 | |
708 | + | ||
709 | + | let ev = 7 | |
710 | + | ||
711 | + | let ew = 0 | |
712 | + | ||
713 | + | let ex = 1 | |
714 | + | ||
715 | + | let ey = 0 | |
716 | + | ||
717 | + | let ez = 2 | |
718 | + | ||
719 | + | let eA = 3 | |
720 | + | ||
721 | + | func eB (ei,as) = ((aJ + ei) + as) | |
722 | + | ||
723 | + | ||
724 | + | func eC (eD,eE) = { | |
725 | + | let eF = if ((eD >= 0)) | |
726 | + | then (((eD + eE) - 1) / eE) | |
727 | + | else -((((-(eD) + eE) - 1) / eE)) | |
728 | + | (eF * p) | |
729 | + | } | |
730 | + | ||
731 | + | ||
732 | + | func eG (eH,eI) = { | |
733 | + | let eJ = (((((eI[0] + eI[1]) + eI[2]) + eI[3]) + eI[4]) + eI[5]) | |
734 | + | if ((0 >= eJ)) | |
733 | 735 | then throw("Zero weights sum") | |
734 | 736 | else { | |
735 | - | let | |
736 | - | func | |
737 | - | ||
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | func | |
742 | - | then | |
743 | - | else | |
744 | - | ||
745 | - | func | |
746 | - | then | |
737 | + | let eK = fraction(eH, o, eJ) | |
738 | + | func eL (eM,eN) = (eM :+ fraction(eN, eK, o)) | |
739 | + | ||
740 | + | let eO = eI | |
741 | + | let eP = size(eO) | |
742 | + | let eQ = nil | |
743 | + | func eR (eS,eT) = if ((eT >= eP)) | |
744 | + | then eS | |
745 | + | else eL(eS, eO[eT]) | |
746 | + | ||
747 | + | func eU (eS,eT) = if ((eT >= eP)) | |
748 | + | then eS | |
747 | 749 | else throw("List size exceeds 6") | |
748 | 750 | ||
749 | - | | |
750 | - | } | |
751 | - | } | |
752 | - | ||
753 | - | ||
754 | - | func | |
755 | - | let | |
756 | - | if ((size( | |
751 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
752 | + | } | |
753 | + | } | |
754 | + | ||
755 | + | ||
756 | + | func eV (eH) = { | |
757 | + | let eW = split(value(getString(ad())), "_") | |
758 | + | if ((size(eW) != aN)) | |
757 | 759 | then throw("Wrong proportions data") | |
758 | 760 | else { | |
759 | - | let | |
760 | - | | |
761 | - | } | |
762 | - | } | |
763 | - | ||
764 | - | ||
765 | - | func | |
766 | - | let | |
767 | - | func | |
768 | - | let | |
769 | - | if ((0 > | |
770 | - | then throw(((((("Not enough material idx=" + toString( | |
771 | - | else ( | |
772 | - | } | |
773 | - | ||
774 | - | if ( | |
761 | + | let eX = [parseIntValue(eW[0]), parseIntValue(eW[1]), parseIntValue(eW[2]), parseIntValue(eW[3]), parseIntValue(eW[4]), parseIntValue(eW[5])] | |
762 | + | eG(eH, eX) | |
763 | + | } | |
764 | + | } | |
765 | + | ||
766 | + | ||
767 | + | func eY (eZ,fa,fb) = { | |
768 | + | let fc = eV(fb) | |
769 | + | func fd (eM,L) = { | |
770 | + | let fe = (parseIntValue(fa[L]) - fc[L]) | |
771 | + | if ((0 > fe)) | |
772 | + | then throw(((((("Not enough material idx=" + toString(L)) + ", you have ") + fa[L]) + ", but need ") + toString(fc[L]))) | |
773 | + | else (eM :+ toString(fe)) | |
774 | + | } | |
775 | + | ||
776 | + | if (eZ) | |
775 | 777 | then { | |
776 | - | let | |
777 | - | let | |
778 | - | let | |
779 | - | func | |
780 | - | then | |
781 | - | else | |
782 | - | ||
783 | - | func | |
784 | - | then | |
778 | + | let eO = v | |
779 | + | let eP = size(eO) | |
780 | + | let eQ = nil | |
781 | + | func eR (eS,eT) = if ((eT >= eP)) | |
782 | + | then eS | |
783 | + | else fd(eS, eO[eT]) | |
784 | + | ||
785 | + | func eU (eS,eT) = if ((eT >= eP)) | |
786 | + | then eS | |
785 | 787 | else throw("List size exceeds 6") | |
786 | 788 | ||
787 | - | | |
788 | - | } | |
789 | - | else | |
790 | - | } | |
791 | - | ||
792 | - | ||
793 | - | func | |
794 | - | then $Tuple3( | |
789 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
790 | + | } | |
791 | + | else fa | |
792 | + | } | |
793 | + | ||
794 | + | ||
795 | + | func ff (fg,fh) = if ((fh == "")) | |
796 | + | then $Tuple3(fg, false, false) | |
795 | 797 | else { | |
796 | - | func | |
797 | - | let | |
798 | - | if ((size( | |
798 | + | func fi (eM,fj) = { | |
799 | + | let fk = split(fj, ",") | |
800 | + | if ((size(fk) != 2)) | |
799 | 801 | then throw("Incorrect format, should be index,amount") | |
800 | 802 | else { | |
801 | - | let | |
802 | - | if (if ((0 > | |
803 | + | let L = parseIntValue(fk[0]) | |
804 | + | if (if ((0 > L)) | |
803 | 805 | then true | |
804 | - | else ( | |
806 | + | else (L >= size(be))) | |
805 | 807 | then throw("Unknown product idx") | |
806 | 808 | else { | |
807 | - | let | |
808 | - | let | |
809 | - | if ((size( | |
810 | - | then throw((("You don't have " + | |
809 | + | let fl = parseIntValue(fk[1]) | |
810 | + | let fm = split(eM._1, (fk[0] + ":")) | |
811 | + | if ((size(fm) != 2)) | |
812 | + | then throw((("You don't have " + bb[L]) + " equipped")) | |
811 | 813 | else { | |
812 | - | let | |
813 | - | let | |
814 | + | let fn = fm[1] | |
815 | + | let fo = if (at(take(drop(fn, 1), 1))) | |
814 | 816 | then 2 | |
815 | 817 | else 1 | |
816 | - | let | |
817 | - | let | |
818 | - | let | |
819 | - | then ( | |
820 | - | else throw(((((("You equipped " + toString( | |
821 | - | $Tuple3((((( | |
818 | + | let fp = parseIntValue(take(fn, fo)) | |
819 | + | let fq = drop(fn, fo) | |
820 | + | let fr = if ((fp >= fl)) | |
821 | + | then (fp - fl) | |
822 | + | else throw(((((("You equipped " + toString(fp)) + " of ") + bb[L]) + ", but tried to use ") + toString(fl))) | |
823 | + | $Tuple3(((((fm[0] + fk[0]) + ":") + toString(fr)) + fq), if (eM._2) | |
822 | 824 | then true | |
823 | - | else if (if (( | |
824 | - | then (8 >= | |
825 | + | else if (if ((L >= 6)) | |
826 | + | then (8 >= L) | |
825 | 827 | else false) | |
826 | - | then ( | |
827 | - | else false, if ( | |
828 | + | then (fr == 0) | |
829 | + | else false, if (eM._3) | |
828 | 830 | then true | |
829 | - | else if (if (( | |
830 | - | then (5 >= | |
831 | + | else if (if ((L >= 3)) | |
832 | + | then (5 >= L) | |
831 | 833 | else false) | |
832 | - | then ( | |
834 | + | then (fl > 0) | |
833 | 835 | else false) | |
834 | 836 | } | |
835 | 837 | } | |
836 | 838 | } | |
837 | 839 | } | |
838 | 840 | ||
839 | - | let | |
840 | - | let | |
841 | - | let | |
842 | - | func | |
843 | - | then | |
844 | - | else | |
845 | - | ||
846 | - | func | |
847 | - | then | |
841 | + | let eO = split(fh, "_") | |
842 | + | let eP = size(eO) | |
843 | + | let eQ = $Tuple3(fg, false, false) | |
844 | + | func eR (eS,eT) = if ((eT >= eP)) | |
845 | + | then eS | |
846 | + | else fi(eS, eO[eT]) | |
847 | + | ||
848 | + | func eU (eS,eT) = if ((eT >= eP)) | |
849 | + | then eS | |
848 | 850 | else throw("List size exceeds 10") | |
849 | 851 | ||
850 | - | | |
851 | - | } | |
852 | - | ||
853 | - | ||
854 | - | func | |
855 | - | let | |
852 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
853 | + | } | |
854 | + | ||
855 | + | ||
856 | + | func fs (ft) = { | |
857 | + | let fu = if ((ft == "")) | |
856 | 858 | then nil | |
857 | - | else split_4C( | |
858 | - | func | |
859 | - | let | |
860 | - | let | |
861 | - | then parseIntValue( | |
859 | + | else split_4C(ft, "_") | |
860 | + | func fv (eM,cw) = { | |
861 | + | let fw = (size(eM) / 8) | |
862 | + | let fp = if ((size(fu) > fw)) | |
863 | + | then parseIntValue(fu[fw]) | |
862 | 864 | else 0 | |
863 | - | ( | |
864 | - | } | |
865 | - | ||
866 | - | let | |
867 | - | let | |
868 | - | let | |
869 | - | func | |
870 | - | then | |
871 | - | else | |
872 | - | ||
873 | - | func | |
874 | - | then | |
865 | + | (eM + toBytes(fp)) | |
866 | + | } | |
867 | + | ||
868 | + | let eO = be | |
869 | + | let eP = size(eO) | |
870 | + | let eQ = base58'' | |
871 | + | func eR (eS,eT) = if ((eT >= eP)) | |
872 | + | then eS | |
873 | + | else fv(eS, eO[eT]) | |
874 | + | ||
875 | + | func eU (eS,eT) = if ((eT >= eP)) | |
876 | + | then eS | |
875 | 877 | else throw("List size exceeds 50") | |
876 | 878 | ||
877 | - | | |
878 | - | } | |
879 | - | ||
880 | - | ||
881 | - | func | |
882 | - | func | |
883 | - | let | |
884 | - | let | |
885 | - | ( | |
879 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
880 | + | } | |
881 | + | ||
882 | + | ||
883 | + | func fx (fy) = { | |
884 | + | func fz (eM,cw) = { | |
885 | + | let fw = size(eM) | |
886 | + | let fA = take(drop(fy, (8 * fw)), 8) | |
887 | + | (eM :+ toString(toInt(fA))) | |
886 | 888 | } | |
887 | 889 | ||
888 | 890 | makeString_2C({ | |
889 | - | let | |
890 | - | let | |
891 | - | let | |
892 | - | func | |
893 | - | then | |
894 | - | else | |
895 | - | ||
896 | - | func | |
897 | - | then | |
891 | + | let eO = be | |
892 | + | let eP = size(eO) | |
893 | + | let eQ = nil | |
894 | + | func eR (eS,eT) = if ((eT >= eP)) | |
895 | + | then eS | |
896 | + | else fz(eS, eO[eT]) | |
897 | + | ||
898 | + | func eU (eS,eT) = if ((eT >= eP)) | |
899 | + | then eS | |
898 | 900 | else throw("List size exceeds 50") | |
899 | 901 | ||
900 | - | | |
902 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
901 | 903 | }, "_") | |
902 | 904 | } | |
903 | 905 | ||
904 | 906 | ||
905 | - | func | |
906 | - | func | |
907 | - | let | |
908 | - | then | |
907 | + | func fB (fC,fD) = { | |
908 | + | func fE (eM,fw) = { | |
909 | + | let fF = if ((size(fC) > (7 + fw))) | |
910 | + | then fC[(7 + fw)] | |
909 | 911 | else 0 | |
910 | - | if ((parseIntValue( | |
911 | - | then throw(("Requirement not satisfied: " + | |
912 | + | if ((parseIntValue(fD[fw]) > (fC[fw] + fF))) | |
913 | + | then throw(("Requirement not satisfied: " + cF[fw])) | |
912 | 914 | else true | |
913 | 915 | } | |
914 | 916 | ||
915 | - | let | |
916 | - | let | |
917 | - | let | |
918 | - | func | |
919 | - | then | |
920 | - | else | |
921 | - | ||
922 | - | func | |
923 | - | then | |
917 | + | let eO = [0, 1, 2, 3, 4, 5, 6] | |
918 | + | let eP = size(eO) | |
919 | + | let eQ = false | |
920 | + | func eR (eS,eT) = if ((eT >= eP)) | |
921 | + | then eS | |
922 | + | else fE(eS, eO[eT]) | |
923 | + | ||
924 | + | func eU (eS,eT) = if ((eT >= eP)) | |
925 | + | then eS | |
924 | 926 | else throw("List size exceeds 7") | |
925 | 927 | ||
926 | - | | |
927 | - | } | |
928 | - | ||
929 | - | ||
930 | - | func | |
931 | - | let | |
932 | - | if ((size( | |
928 | + | eU(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7) | |
929 | + | } | |
930 | + | ||
931 | + | ||
932 | + | func fG (fH,fu,fI,fJ,fK,fL,fC) = { | |
933 | + | let fk = split(fH, ":") | |
934 | + | if ((size(fk) != 2)) | |
933 | 935 | then throw("Incorrect format, should be index:amount") | |
934 | - | else if (if (!( | |
935 | - | then (size( | |
936 | + | else if (if (!(fI)) | |
937 | + | then (size(fk[0]) != 2) | |
936 | 938 | else false) | |
937 | 939 | then throw("Product idx should be 2 digits, zero padded") | |
938 | 940 | else { | |
939 | - | let | |
940 | - | let | |
941 | - | if (if ((0 > | |
941 | + | let fM = parseIntValue(fk[0]) | |
942 | + | let fN = parseIntValue(fk[1]) | |
943 | + | if (if ((0 > fM)) | |
942 | 944 | then true | |
943 | - | else ( | |
945 | + | else (fM >= size(be))) | |
944 | 946 | then throw("Unknown product idx") | |
945 | - | else if ((0 > | |
947 | + | else if ((0 > fN)) | |
946 | 948 | then throw("Count can't be negative") | |
947 | - | else if (( | |
948 | - | then throw(((("Can't put more than " + toString( | |
949 | - | else if (( | |
950 | - | then $Tuple2( | |
949 | + | else if ((fN > cP)) | |
950 | + | then throw(((("Can't put more than " + toString(cP)) + " of ") + bb[fM])) | |
951 | + | else if ((fN == 0)) | |
952 | + | then $Tuple2(fu, false) | |
951 | 953 | else { | |
952 | - | let | |
953 | - | let | |
954 | - | let | |
955 | - | let | |
956 | - | if (if (!( | |
957 | - | then ( | |
954 | + | let fO = take(fu, (8 * fM)) | |
955 | + | let fp = toInt(take(drop(fu, (8 * fM)), 8)) | |
956 | + | let fq = drop(fu, (8 * (fM + 1))) | |
957 | + | let cw = split(be[fM], "_") | |
958 | + | if (if (!(fI)) | |
959 | + | then (fN > fp) | |
958 | 960 | else false) | |
959 | - | then throw(((((("You have " + toString( | |
961 | + | then throw(((((("You have " + toString(fp)) + " of ") + bb[fM]) + ", but tried to use ") + toString(fN))) | |
960 | 962 | else { | |
961 | - | let | |
962 | - | then | |
963 | + | let fP = if (if (!(fI)) | |
964 | + | then fB(fC, split(cw[bh], ",")) | |
963 | 965 | else false) | |
964 | 966 | then { | |
965 | - | let | |
966 | - | if (( | |
967 | + | let fQ = cw[bi] | |
968 | + | if ((fQ == "")) | |
967 | 969 | then throw("Item cannot be equipped") | |
968 | 970 | else { | |
969 | - | let | |
970 | - | let | |
971 | - | if (( | |
971 | + | let fR = parseIntValue(fQ) | |
972 | + | let fS = (fR / 100) | |
973 | + | if ((fJ != fS)) | |
972 | 974 | then throw("Segment incompatible") | |
973 | 975 | else { | |
974 | - | let | |
975 | - | if (( | |
976 | + | let fT = ((fR % 100) / 10) | |
977 | + | if ((fK != fT)) | |
976 | 978 | then throw("Slot incompatible") | |
977 | 979 | else { | |
978 | - | let | |
979 | - | if (if (( | |
980 | - | then ( | |
980 | + | let fU = (fR % 10) | |
981 | + | if (if ((fL != 0)) | |
982 | + | then (fU > 1) | |
981 | 983 | else false) | |
982 | 984 | then throw("Big items should occupy slot 0") | |
983 | - | else ( | |
985 | + | else (fU > 1) | |
984 | 986 | } | |
985 | 987 | } | |
986 | 988 | } | |
987 | 989 | } | |
988 | 990 | else false | |
989 | - | $Tuple2((( | |
990 | - | then | |
991 | - | else -( | |
991 | + | $Tuple2(((fO + toBytes((fp + (if (fI) | |
992 | + | then fN | |
993 | + | else -(fN))))) + fq), fP) | |
992 | 994 | } | |
993 | 995 | } | |
994 | 996 | } | |
995 | 997 | } | |
996 | 998 | ||
997 | 999 | ||
998 | - | func | |
1000 | + | func fV (fW,fX,fI,fJ,fK,fY) = if ((fW != "")) | |
999 | 1001 | then { | |
1000 | - | let | |
1001 | - | if ((size( | |
1002 | + | let fZ = split(fW, ",") | |
1003 | + | if ((size(fZ) > cO)) | |
1002 | 1004 | then throw("Wrong slots format") | |
1003 | 1005 | else { | |
1004 | - | let | |
1005 | - | let | |
1006 | - | then | |
1006 | + | let ga = fZ[0] | |
1007 | + | let gb = if ((size(fZ) > 1)) | |
1008 | + | then fZ[1] | |
1007 | 1009 | else "" | |
1008 | - | if (if (( | |
1009 | - | then ( | |
1010 | + | if (if ((ga == "")) | |
1011 | + | then (gb == "") | |
1010 | 1012 | else false) | |
1011 | - | then | |
1013 | + | then fX | |
1012 | 1014 | else { | |
1013 | - | let | |
1014 | - | then | |
1015 | - | else $Tuple2( | |
1016 | - | if (( | |
1017 | - | then if ( | |
1015 | + | let gc = if ((ga != "")) | |
1016 | + | then fG(ga, fX, fI, fJ, fK, 0, fY) | |
1017 | + | else $Tuple2(fX, false) | |
1018 | + | if ((gb != "")) | |
1019 | + | then if (gc._2) | |
1018 | 1020 | then throw("Big item already occupies slot") | |
1019 | - | else | |
1020 | - | else | |
1021 | + | else fG(gb, gc._1, fI, fJ, fK, 1, fY)._1 | |
1022 | + | else gc._1 | |
1021 | 1023 | } | |
1022 | 1024 | } | |
1023 | 1025 | } | |
1024 | - | else | |
1025 | - | ||
1026 | - | ||
1027 | - | func | |
1028 | - | func | |
1029 | - | let | |
1030 | - | let | |
1031 | - | if ((size( | |
1026 | + | else fX | |
1027 | + | ||
1028 | + | ||
1029 | + | func gd (ge,gf,fI,fY) = { | |
1030 | + | func fJ (eM,gg) = { | |
1031 | + | let fw = eM._1 | |
1032 | + | let fK = split(gg, ";") | |
1033 | + | if ((size(fK) != cN)) | |
1032 | 1034 | then throw("Wrong segment format") | |
1033 | 1035 | else { | |
1034 | - | let | |
1035 | - | let | |
1036 | - | if (if (( | |
1037 | - | then ( | |
1036 | + | let gh = fK[0] | |
1037 | + | let gi = fK[1] | |
1038 | + | if (if ((gh == "")) | |
1039 | + | then (gi == "") | |
1038 | 1040 | else false) | |
1039 | - | then $Tuple2(( | |
1041 | + | then $Tuple2((fw + 1), eM._2) | |
1040 | 1042 | else { | |
1041 | - | let | |
1042 | - | $Tuple2(( | |
1043 | + | let gj = fV(gh, eM._2, fI, fw, 0, fY) | |
1044 | + | $Tuple2((fw + 1), fV(gi, gj, fI, fw, 1, fY)) | |
1043 | 1045 | } | |
1044 | 1046 | } | |
1045 | 1047 | } | |
1046 | 1048 | ||
1047 | - | ( let | |
1048 | - | let | |
1049 | - | let | |
1050 | - | func | |
1051 | - | then | |
1052 | - | else | |
1053 | - | ||
1054 | - | func | |
1055 | - | then | |
1049 | + | ( let eO = ge | |
1050 | + | let eP = size(eO) | |
1051 | + | let eQ = $Tuple2(0, gf) | |
1052 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1053 | + | then eS | |
1054 | + | else fJ(eS, eO[eT]) | |
1055 | + | ||
1056 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1057 | + | then eS | |
1056 | 1058 | else throw("List size exceeds 6") | |
1057 | 1059 | ||
1058 | - | | |
1059 | - | } | |
1060 | - | ||
1061 | - | ||
1062 | - | func | |
1063 | - | let | |
1064 | - | let | |
1065 | - | let | |
1066 | - | let | |
1067 | - | let | |
1068 | - | let | |
1060 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6))._2 | |
1061 | + | } | |
1062 | + | ||
1063 | + | ||
1064 | + | func gk (bP) = { | |
1065 | + | let gl = cV(bP) | |
1066 | + | let gm = split(valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1067 | + | let gn = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
1068 | + | let go = gd(gm, gn, true, nil) | |
1069 | + | let gp = split(gm[cL], ";")[1] | |
1070 | + | let dE = if ((gp == "")) | |
1069 | 1071 | then 0 | |
1070 | 1072 | else { | |
1071 | - | let | |
1072 | - | if (( | |
1073 | + | let gq = split(gp, ",")[0] | |
1074 | + | if ((gq == "")) | |
1073 | 1075 | then 0 | |
1074 | 1076 | else { | |
1075 | - | let | |
1076 | - | let | |
1077 | - | let | |
1078 | - | if (if (if (if (if (( | |
1077 | + | let fH = split(gq, ":") | |
1078 | + | let L = fH[0] | |
1079 | + | let gr = fH[1] | |
1080 | + | if (if (if (if (if ((L == "06")) | |
1079 | 1081 | then true | |
1080 | - | else ( | |
1082 | + | else (L == "07")) | |
1081 | 1083 | then true | |
1082 | - | else ( | |
1083 | - | then ( | |
1084 | + | else (L == "08")) | |
1085 | + | then (gr != "") | |
1084 | 1086 | else false) | |
1085 | - | then (parseIntValue( | |
1087 | + | then (parseIntValue(gr) > 0) | |
1086 | 1088 | else false) | |
1087 | - | then parseIntValue(split( | |
1089 | + | then parseIntValue(split(be[parseIntValue(L)], "_")[bg]) | |
1088 | 1090 | else 0 | |
1089 | 1091 | } | |
1090 | 1092 | } | |
1091 | - | let | |
1092 | - | let | |
1093 | - | ( | |
1094 | - | } | |
1095 | - | ||
1096 | - | ||
1097 | - | func | |
1093 | + | let fY = dD(this, bP, dE, true) | |
1094 | + | let gs = gd(gm, go, false, fY) | |
1095 | + | (gs == gs) | |
1096 | + | } | |
1097 | + | ||
1098 | + | ||
1099 | + | func gt (gu,gv,gw,gx) = if ((size(gu) != aN)) | |
1098 | 1100 | then throw("Wrong proportions data") | |
1099 | 1101 | else { | |
1100 | - | func | |
1101 | - | let | |
1102 | - | if ((0 > | |
1103 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1104 | - | else ( | |
1105 | - | } | |
1106 | - | ||
1107 | - | let | |
1108 | - | let | |
1109 | - | let | |
1110 | - | func | |
1111 | - | then | |
1112 | - | else | |
1113 | - | ||
1114 | - | func | |
1115 | - | then | |
1102 | + | func gy (eM,gz) = { | |
1103 | + | let fe = (parseIntValue(gu[gz]) + ((gx * gv[gz]) * gw)) | |
1104 | + | if ((0 > fe)) | |
1105 | + | then throw(((((((("Panic! Pieces of type=" + toString(gz)) + ", sign=") + toString(gx)) + ", terrainCounts[i]=") + toString(gv[gz])) + ", landSizeIndex=") + toString(gw))) | |
1106 | + | else (eM :+ toString(fe)) | |
1107 | + | } | |
1108 | + | ||
1109 | + | let eO = v | |
1110 | + | let eP = size(eO) | |
1111 | + | let eQ = nil | |
1112 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1113 | + | then eS | |
1114 | + | else gy(eS, eO[eT]) | |
1115 | + | ||
1116 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1117 | + | then eS | |
1116 | 1118 | else throw("List size exceeds 6") | |
1117 | 1119 | ||
1118 | - | | |
1119 | - | } | |
1120 | - | ||
1121 | - | ||
1122 | - | func | |
1123 | - | let | |
1124 | - | makeString( | |
1125 | - | } | |
1126 | - | ||
1127 | - | ||
1128 | - | func | |
1129 | - | ||
1130 | - | ||
1131 | - | func | |
1132 | - | func | |
1133 | - | let | |
1134 | - | ( | |
1135 | - | } | |
1136 | - | ||
1137 | - | let | |
1138 | - | let | |
1139 | - | let | |
1140 | - | let | |
1141 | - | func | |
1142 | - | then | |
1143 | - | else | |
1144 | - | ||
1145 | - | func | |
1146 | - | then | |
1120 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1121 | + | } | |
1122 | + | ||
1123 | + | ||
1124 | + | func gA (gv,gw,gx) = { | |
1125 | + | let gu = split(valueOrElse(getString(ad()), "0_0_0_0_0_0"), "_") | |
1126 | + | makeString(gt(gu, gv, gw, gx), "_") | |
1127 | + | } | |
1128 | + | ||
1129 | + | ||
1130 | + | func gB (gC) = [(size(split(gC, "A")) - 1), (size(split(gC, "B")) - 1), (size(split(gC, "C")) - 1), (size(split(gC, "D")) - 1), (size(split(gC, "E")) - 1), (size(split(gC, "F")) - 1)] | |
1131 | + | ||
1132 | + | ||
1133 | + | func gD (gE,gv,gF,gw,gG) = { | |
1134 | + | func gH (eM,gz) = { | |
1135 | + | let gI = ((fraction(gF, gG, dK) * gv[gz]) * gw) | |
1136 | + | (eM :+ toString((parseIntValue(gE[gz]) + gI))) | |
1137 | + | } | |
1138 | + | ||
1139 | + | let eX = { | |
1140 | + | let eO = v | |
1141 | + | let eP = size(eO) | |
1142 | + | let eQ = nil | |
1143 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1144 | + | then eS | |
1145 | + | else gH(eS, eO[eT]) | |
1146 | + | ||
1147 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1148 | + | then eS | |
1147 | 1149 | else throw("List size exceeds 6") | |
1148 | 1150 | ||
1149 | - | | |
1150 | - | } | |
1151 | - | makeString( | |
1152 | - | } | |
1153 | - | ||
1154 | - | ||
1155 | - | func | |
1156 | - | func | |
1157 | - | let | |
1158 | - | let | |
1159 | - | $Tuple2(( | |
1160 | - | } | |
1161 | - | ||
1162 | - | let | |
1163 | - | let | |
1164 | - | let | |
1165 | - | func | |
1166 | - | then | |
1167 | - | else | |
1168 | - | ||
1169 | - | func | |
1170 | - | then | |
1151 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1152 | + | } | |
1153 | + | makeString(eX, "_") | |
1154 | + | } | |
1155 | + | ||
1156 | + | ||
1157 | + | func gJ (gE,gv,gF,gw,gG) = { | |
1158 | + | func gH (eM,gz) = { | |
1159 | + | let gI = ((fraction(gF, gG, dK) * gv[gz]) * gw) | |
1160 | + | let gK = (parseIntValue(gE[gz]) + gI) | |
1161 | + | $Tuple2((eM._1 :+ gK), (eM._2 + gK)) | |
1162 | + | } | |
1163 | + | ||
1164 | + | let eO = v | |
1165 | + | let eP = size(eO) | |
1166 | + | let eQ = $Tuple2(nil, 0) | |
1167 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1168 | + | then eS | |
1169 | + | else gH(eS, eO[eT]) | |
1170 | + | ||
1171 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1172 | + | then eS | |
1171 | 1173 | else throw("List size exceeds 6") | |
1172 | 1174 | ||
1173 | - | | |
1174 | - | } | |
1175 | - | ||
1176 | - | ||
1177 | - | func | |
1178 | - | func | |
1179 | - | let | |
1180 | - | $Tuple2(( | |
1181 | - | } | |
1182 | - | ||
1183 | - | let | |
1184 | - | let | |
1185 | - | let | |
1186 | - | func | |
1187 | - | then | |
1188 | - | else | |
1189 | - | ||
1190 | - | func | |
1191 | - | then | |
1175 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1176 | + | } | |
1177 | + | ||
1178 | + | ||
1179 | + | func gL (gv,gF,gw,gG) = { | |
1180 | + | func gH (eM,gM) = { | |
1181 | + | let gI = ((fraction(gF, gG, dK) * gM) * gw) | |
1182 | + | $Tuple2((eM._1 :+ gI), (eM._2 + gI)) | |
1183 | + | } | |
1184 | + | ||
1185 | + | let eO = gv | |
1186 | + | let eP = size(eO) | |
1187 | + | let eQ = $Tuple2(nil, 0) | |
1188 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1189 | + | then eS | |
1190 | + | else gH(eS, eO[eT]) | |
1191 | + | ||
1192 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1193 | + | then eS | |
1192 | 1194 | else throw("List size exceeds 6") | |
1193 | 1195 | ||
1194 | - | | |
1195 | - | } | |
1196 | - | ||
1197 | - | ||
1198 | - | func | |
1199 | - | let | |
1200 | - | let | |
1201 | - | if (( | |
1202 | - | then $Tuple2(makeString( | |
1203 | - | else if (( | |
1196 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1197 | + | } | |
1198 | + | ||
1199 | + | ||
1200 | + | func gN (gO,gP,gQ,gR) = { | |
1201 | + | let gS = gQ._1 | |
1202 | + | let gT = gQ._2 | |
1203 | + | if ((gT == 0)) | |
1204 | + | then $Tuple2(makeString(gO, "_"), makeString(gP, "_")) | |
1205 | + | else if ((gR >= gT)) | |
1204 | 1206 | then { | |
1205 | - | func | |
1206 | - | ||
1207 | - | let | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let | |
1211 | - | func | |
1212 | - | then | |
1213 | - | else | |
1214 | - | ||
1215 | - | func | |
1216 | - | then | |
1207 | + | func gU (eM,gz) = (eM :+ toString((parseIntValue(gO[gz]) + gS[gz]))) | |
1208 | + | ||
1209 | + | let eX = { | |
1210 | + | let eO = v | |
1211 | + | let eP = size(eO) | |
1212 | + | let eQ = nil | |
1213 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1214 | + | then eS | |
1215 | + | else gU(eS, eO[eT]) | |
1216 | + | ||
1217 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1218 | + | then eS | |
1217 | 1219 | else throw("List size exceeds 6") | |
1218 | 1220 | ||
1219 | - | | |
1221 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1220 | 1222 | } | |
1221 | - | $Tuple2(makeString( | |
1223 | + | $Tuple2(makeString(eX, "_"), makeString(gP, "_")) | |
1222 | 1224 | } | |
1223 | 1225 | else { | |
1224 | - | func | |
1225 | - | let | |
1226 | - | $Tuple2(( | |
1226 | + | func gV (eM,gz) = { | |
1227 | + | let gW = fraction(gS[gz], gR, gT) | |
1228 | + | $Tuple2((eM._1 :+ toString((parseIntValue(gO[gz]) + gW))), (eM._2 :+ toString(((parseIntValue(gP[gz]) + gS[gz]) - gW)))) | |
1227 | 1229 | } | |
1228 | 1230 | ||
1229 | - | let | |
1230 | - | let | |
1231 | - | let | |
1232 | - | let | |
1233 | - | func | |
1234 | - | then | |
1235 | - | else | |
1236 | - | ||
1237 | - | func | |
1238 | - | then | |
1231 | + | let eX = { | |
1232 | + | let eO = v | |
1233 | + | let eP = size(eO) | |
1234 | + | let eQ = $Tuple2(nil, nil) | |
1235 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1236 | + | then eS | |
1237 | + | else gV(eS, eO[eT]) | |
1238 | + | ||
1239 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1240 | + | then eS | |
1239 | 1241 | else throw("List size exceeds 6") | |
1240 | 1242 | ||
1241 | - | | |
1243 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1242 | 1244 | } | |
1243 | - | $Tuple2(makeString( | |
1245 | + | $Tuple2(makeString(eX._1, "_"), makeString(eX._2, "_")) | |
1244 | 1246 | } | |
1245 | 1247 | } | |
1246 | 1248 | ||
1247 | 1249 | ||
1248 | - | func | |
1249 | - | then | |
1250 | - | else -( | |
1251 | - | ||
1252 | - | ||
1253 | - | let | |
1254 | - | ||
1255 | - | func | |
1256 | - | let | |
1257 | - | let | |
1250 | + | func gX (gY) = if ((gY >= toBigInt(0))) | |
1251 | + | then gY | |
1252 | + | else -(gY) | |
1253 | + | ||
1254 | + | ||
1255 | + | let gZ = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
1256 | + | ||
1257 | + | func ha (an,hb) = { | |
1258 | + | let hc = toInt((an % dY)) | |
1259 | + | let hd = if ((hb[0] > hc)) | |
1258 | 1260 | then "A" | |
1259 | - | else if (( | |
1261 | + | else if ((hb[1] > hc)) | |
1260 | 1262 | then "B" | |
1261 | - | else if (( | |
1263 | + | else if ((hb[2] > hc)) | |
1262 | 1264 | then "C" | |
1263 | - | else if (( | |
1265 | + | else if ((hb[3] > hc)) | |
1264 | 1266 | then "D" | |
1265 | - | else if (( | |
1267 | + | else if ((hb[4] > hc)) | |
1266 | 1268 | then "E" | |
1267 | 1269 | else "F" | |
1268 | - | | |
1269 | - | } | |
1270 | - | ||
1271 | - | ||
1272 | - | func | |
1273 | - | let | |
1274 | - | func | |
1275 | - | ||
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | func | |
1281 | - | then | |
1282 | - | else | |
1283 | - | ||
1284 | - | func | |
1285 | - | then | |
1270 | + | hd | |
1271 | + | } | |
1272 | + | ||
1273 | + | ||
1274 | + | func he (hf,hg) = { | |
1275 | + | let hh = gZ[hg] | |
1276 | + | func hi (eM,eN) = $Tuple2((((((eM._1 + ha(eM._2, hh)) + ha((eM._2 / dY), hh)) + ha((eM._2 / dZ), hh)) + ha((eM._2 / ea), hh)) + ha((eM._2 / eb), hh)), (eM._2 / ec)) | |
1277 | + | ||
1278 | + | let hj = { | |
1279 | + | let eO = [1, 2, 3, 4, 5] | |
1280 | + | let eP = size(eO) | |
1281 | + | let eQ = $Tuple2("", (hf / dX)) | |
1282 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1283 | + | then eS | |
1284 | + | else hi(eS, eO[eT]) | |
1285 | + | ||
1286 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1287 | + | then eS | |
1286 | 1288 | else throw("List size exceeds 5") | |
1287 | 1289 | ||
1288 | - | | |
1289 | - | } | |
1290 | - | | |
1291 | - | } | |
1292 | - | ||
1293 | - | ||
1294 | - | let | |
1295 | - | ||
1296 | - | let | |
1297 | - | ||
1298 | - | func | |
1299 | - | func | |
1300 | - | let | |
1301 | - | let | |
1302 | - | let | |
1290 | + | eU(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5) | |
1291 | + | } | |
1292 | + | hj._1 | |
1293 | + | } | |
1294 | + | ||
1295 | + | ||
1296 | + | let hk = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1297 | + | ||
1298 | + | let hl = ["A", "B", "C", "D", "E", "F"] | |
1299 | + | ||
1300 | + | func hm (hn,gw) = { | |
1301 | + | func ho (eM,al) = { | |
1302 | + | let fw = eM._2 | |
1303 | + | let hp = parseIntValue(al) | |
1304 | + | let gY = if ((hp == 0)) | |
1303 | 1305 | then 0 | |
1304 | - | else if (( | |
1305 | - | then ( | |
1306 | - | else if (( | |
1306 | + | else if ((hp >= (4 * gw))) | |
1307 | + | then (hp / gw) | |
1308 | + | else if ((hp > (3 * gw))) | |
1307 | 1309 | then 3 | |
1308 | - | else ((( | |
1309 | - | $Tuple3(( | |
1310 | - | } | |
1311 | - | ||
1312 | - | let | |
1313 | - | let | |
1314 | - | let | |
1315 | - | let | |
1316 | - | func | |
1317 | - | then | |
1318 | - | else | |
1319 | - | ||
1320 | - | func | |
1321 | - | then | |
1310 | + | else (((hp - 1) / gw) + 1) | |
1311 | + | $Tuple3((eM._1 :+ gY), (eM._2 + 1), (eM._3 + gY)) | |
1312 | + | } | |
1313 | + | ||
1314 | + | let hj = { | |
1315 | + | let eO = hn | |
1316 | + | let eP = size(eO) | |
1317 | + | let eQ = $Tuple3(nil, 0, 0) | |
1318 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1319 | + | then eS | |
1320 | + | else ho(eS, eO[eT]) | |
1321 | + | ||
1322 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1323 | + | then eS | |
1322 | 1324 | else throw("List size exceeds 6") | |
1323 | 1325 | ||
1324 | - | | |
1325 | - | } | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | func | |
1330 | - | let | |
1331 | - | then ( | |
1332 | - | else | |
1333 | - | let | |
1326 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1327 | + | } | |
1328 | + | let hq = hj._1 | |
1329 | + | let hr = value(indexOf(hq, max(hq))) | |
1330 | + | let hs = (hj._3 - 25) | |
1331 | + | func ht (eM,L) = { | |
1332 | + | let ay = if ((L == hr)) | |
1333 | + | then (hq[L] - hs) | |
1334 | + | else hq[L] | |
1335 | + | let aC = if ((ay == 0)) | |
1334 | 1336 | then nil | |
1335 | - | else split(drop(toString(pow(10, 0, | |
1336 | - | let | |
1337 | - | func | |
1338 | - | ||
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | func | |
1344 | - | then | |
1345 | - | else | |
1346 | - | ||
1347 | - | func | |
1348 | - | then | |
1337 | + | else split(drop(toString(pow(10, 0, ay, 0, 0, DOWN)), 1), "") | |
1338 | + | let fR = hl[L] | |
1339 | + | func hu (hv,hw) = (hv :+ fR) | |
1340 | + | ||
1341 | + | let hx = { | |
1342 | + | let eO = aC | |
1343 | + | let eP = size(eO) | |
1344 | + | let eQ = nil | |
1345 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1346 | + | then eS | |
1347 | + | else hu(eS, eO[eT]) | |
1348 | + | ||
1349 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1350 | + | then eS | |
1349 | 1351 | else throw("List size exceeds 25") | |
1350 | 1352 | ||
1351 | - | hy( | |
1352 | - | } | |
1353 | - | ( | |
1354 | - | } | |
1355 | - | ||
1356 | - | let | |
1357 | - | let | |
1358 | - | let | |
1359 | - | let | |
1360 | - | func | |
1361 | - | then | |
1362 | - | else | |
1363 | - | ||
1364 | - | func | |
1365 | - | then | |
1353 | + | hz(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25) | |
1354 | + | } | |
1355 | + | (eM ++ hx) | |
1356 | + | } | |
1357 | + | ||
1358 | + | let eX = { | |
1359 | + | let eO = v | |
1360 | + | let eP = size(eO) | |
1361 | + | let eQ = nil | |
1362 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1363 | + | then eS | |
1364 | + | else ht(eS, eO[eT]) | |
1365 | + | ||
1366 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1367 | + | then eS | |
1366 | 1368 | else throw("List size exceeds 6") | |
1367 | 1369 | ||
1368 | - | hy( | |
1369 | - | } | |
1370 | - | func | |
1371 | - | ||
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | func | |
1376 | - | then | |
1377 | - | else | |
1378 | - | ||
1379 | - | func | |
1380 | - | then | |
1370 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1371 | + | } | |
1372 | + | func hA (eM,fw) = (eM + eX[fw]) | |
1373 | + | ||
1374 | + | let eO = hk | |
1375 | + | let eP = size(eO) | |
1376 | + | let eQ = "" | |
1377 | + | func hB (eS,eT) = if ((eT >= eP)) | |
1378 | + | then eS | |
1379 | + | else hA(eS, eO[eT]) | |
1380 | + | ||
1381 | + | func hC (eS,eT) = if ((eT >= eP)) | |
1382 | + | then eS | |
1381 | 1383 | else throw("List size exceeds 25") | |
1382 | 1384 | ||
1383 | - | hB( | |
1384 | - | } | |
1385 | - | ||
1386 | - | ||
1387 | - | func | |
1388 | - | let | |
1389 | - | [toString(valueOrElse(parseInt( | |
1390 | - | then | |
1391 | - | else "0_0_0_0_0_0", if ((size(split( | |
1392 | - | then | |
1393 | - | else "0_0_0_0_0_0", | |
1394 | - | } | |
1395 | - | ||
1396 | - | ||
1397 | - | func | |
1398 | - | let | |
1399 | - | (( | |
1400 | - | } | |
1401 | - | ||
1402 | - | ||
1403 | - | func | |
1404 | - | let | |
1405 | - | func | |
1406 | - | ||
1407 | - | func | |
1408 | - | let | |
1409 | - | let | |
1410 | - | $Tuple2(( | |
1411 | - | } | |
1412 | - | ||
1413 | - | let | |
1414 | - | let | |
1415 | - | let | |
1416 | - | let | |
1417 | - | func | |
1418 | - | then | |
1419 | - | else | |
1420 | - | ||
1421 | - | func | |
1422 | - | then | |
1385 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25) | |
1386 | + | } | |
1387 | + | ||
1388 | + | ||
1389 | + | func hD (hE) = { | |
1390 | + | let hF = split(valueOrElse(getString(hE), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1391 | + | [toString(valueOrElse(parseInt(hF[bt]), 0)), if ((size(split(hF[bu], "_")) == aN)) | |
1392 | + | then hF[bu] | |
1393 | + | else "0_0_0_0_0_0", if ((size(split(hF[bv], "_")) == aN)) | |
1394 | + | then hF[bv] | |
1395 | + | else "0_0_0_0_0_0", hF[bw]] | |
1396 | + | } | |
1397 | + | ||
1398 | + | ||
1399 | + | func hG (hH) = { | |
1400 | + | let fk = split(hH, "_") | |
1401 | + | ((aQ * (parseIntValue(fk[1]) + 1)) * parseIntValue(fk[0])) | |
1402 | + | } | |
1403 | + | ||
1404 | + | ||
1405 | + | func hI (hJ) = { | |
1406 | + | let hK = hJ[bn] | |
1407 | + | func hL (eM,hM) = (eM + parseIntValue(hM)) | |
1408 | + | ||
1409 | + | func hN (eM,hM) = { | |
1410 | + | let L = eM._1 | |
1411 | + | let eF = (((parseIntValue(hM) + bj) - 1) / bj) | |
1412 | + | $Tuple2((L + 1), (eM._2 + (eF * p))) | |
1413 | + | } | |
1414 | + | ||
1415 | + | let hO = { | |
1416 | + | let eO = split(hJ[bl], "_") | |
1417 | + | let eP = size(eO) | |
1418 | + | let eQ = 0 | |
1419 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1420 | + | then eS | |
1421 | + | else hL(eS, eO[eT]) | |
1422 | + | ||
1423 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1424 | + | then eS | |
1423 | 1425 | else throw("List size exceeds 6") | |
1424 | 1426 | ||
1425 | - | | |
1426 | - | } | |
1427 | - | let | |
1428 | - | let | |
1429 | - | let | |
1430 | - | let | |
1431 | - | func | |
1432 | - | then | |
1433 | - | else | |
1434 | - | ||
1435 | - | func | |
1436 | - | then | |
1427 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1428 | + | } | |
1429 | + | let hP = { | |
1430 | + | let eO = split(hJ[bm], "_") | |
1431 | + | let eP = size(eO) | |
1432 | + | let eQ = 0 | |
1433 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1434 | + | then eS | |
1435 | + | else hL(eS, eO[eT]) | |
1436 | + | ||
1437 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1438 | + | then eS | |
1437 | 1439 | else throw("List size exceeds 6") | |
1438 | 1440 | ||
1439 | - | hy( | |
1440 | - | } | |
1441 | - | let | |
1441 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1442 | + | } | |
1443 | + | let hQ = if ((hK == "")) | |
1442 | 1444 | then 0 | |
1443 | - | else ( let | |
1444 | - | let | |
1445 | - | let | |
1446 | - | func | |
1447 | - | then | |
1448 | - | else | |
1449 | - | ||
1450 | - | func | |
1451 | - | then | |
1445 | + | else ( let eO = split_4C(hK, "_") | |
1446 | + | let eP = size(eO) | |
1447 | + | let eQ = $Tuple2(0, 0) | |
1448 | + | func hB (eS,eT) = if ((eT >= eP)) | |
1449 | + | then eS | |
1450 | + | else hN(eS, eO[eT]) | |
1451 | + | ||
1452 | + | func hC (eS,eT) = if ((eT >= eP)) | |
1453 | + | then eS | |
1452 | 1454 | else throw("List size exceeds 50") | |
1453 | 1455 | ||
1454 | - | hB( | |
1455 | - | (( | |
1456 | - | } | |
1457 | - | ||
1458 | - | ||
1459 | - | func | |
1460 | - | let | |
1461 | - | let | |
1462 | - | let | |
1463 | - | let | |
1464 | - | let | |
1465 | - | let | |
1466 | - | then makeString(["0", toString( | |
1456 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
1457 | + | ((hO + hP) + hQ) | |
1458 | + | } | |
1459 | + | ||
1460 | + | ||
1461 | + | func hR (hS,hT,hU) = { | |
1462 | + | let hH = ((toString(hT) + "_") + toString(hU)) | |
1463 | + | let hV = hG(hH) | |
1464 | + | let hW = valueOrElse(getString(hS), (hH + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1465 | + | let hX = split_4C(hW, ":") | |
1466 | + | let hY = hI(hX) | |
1467 | + | let hZ = if ((5 > size(hX))) | |
1468 | + | then makeString(["0", toString(hY), toString((hV - hY)), toString(hV)], "_") | |
1467 | 1469 | else { | |
1468 | - | let | |
1469 | - | let | |
1470 | - | let | |
1471 | - | then parseIntValue( | |
1472 | - | else | |
1473 | - | makeString([toString( | |
1474 | - | } | |
1475 | - | [ | |
1476 | - | then | |
1477 | - | else "0_0_0_0_0_0", if ((size(split( | |
1478 | - | then | |
1479 | - | else "0_0_0_0_0_0", | |
1480 | - | } | |
1481 | - | ||
1482 | - | ||
1483 | - | func | |
1484 | - | let | |
1485 | - | let | |
1486 | - | (( | |
1487 | - | } | |
1488 | - | ||
1489 | - | ||
1490 | - | func | |
1470 | + | let ia = split(hX[bo], "_") | |
1471 | + | let ib = parseIntValue(ia[bp]) | |
1472 | + | let ic = if ((size(ia) > 1)) | |
1473 | + | then parseIntValue(ia[bq]) | |
1474 | + | else hY | |
1475 | + | makeString([toString(ib), toString(ic), toString(((hV - ib) - ic)), toString(hV)], "_") | |
1476 | + | } | |
1477 | + | [hX[bk], if ((size(split(hX[bl], "_")) == aN)) | |
1478 | + | then hX[bl] | |
1479 | + | else "0_0_0_0_0_0", if ((size(split(hX[bm], "_")) == aN)) | |
1480 | + | then hX[bm] | |
1481 | + | else "0_0_0_0_0_0", hX[bn], hZ] | |
1482 | + | } | |
1483 | + | ||
1484 | + | ||
1485 | + | func id (hJ) = { | |
1486 | + | let ie = hI(hJ) | |
1487 | + | let if = parseIntValue(split(hJ[bo], "_")[bp]) | |
1488 | + | ((hG(hJ[bk]) - ie) - if) | |
1489 | + | } | |
1490 | + | ||
1491 | + | ||
1492 | + | func ig (ih,hJ,ii) = if ((size(ih) != 3)) | |
1491 | 1493 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1492 | 1494 | else { | |
1493 | - | let | |
1494 | - | let | |
1495 | - | let | |
1495 | + | let ij = split(ih[0], "_") | |
1496 | + | let ik = split(ih[1], "_") | |
1497 | + | let il = if ((ih[2] == "")) | |
1496 | 1498 | then nil | |
1497 | - | else split_4C( | |
1498 | - | if ((size( | |
1499 | + | else split_4C(ih[2], "_") | |
1500 | + | if ((size(ij) != aN)) | |
1499 | 1501 | then throw("All 6 resources should be passed") | |
1500 | - | else if ((size( | |
1502 | + | else if ((size(ik) != aN)) | |
1501 | 1503 | then throw("All 6 materials should be passed") | |
1502 | 1504 | else { | |
1503 | - | let | |
1504 | - | let | |
1505 | - | let | |
1506 | - | let | |
1505 | + | let gR = id(hJ) | |
1506 | + | let im = split(hJ[bl], "_") | |
1507 | + | let in = split(hJ[bm], "_") | |
1508 | + | let io = if ((hJ[bn] == "")) | |
1507 | 1509 | then nil | |
1508 | - | else split_4C( | |
1509 | - | let | |
1510 | - | let | |
1511 | - | let | |
1510 | + | else split_4C(hJ[bn], "_") | |
1511 | + | let gP = split(ii[bu], "_") | |
1512 | + | let ip = split(ii[bv], "_") | |
1513 | + | let iq = if ((ii[bw] == "")) | |
1512 | 1514 | then nil | |
1513 | - | else split_4C( | |
1514 | - | func | |
1515 | - | let | |
1516 | - | let | |
1517 | - | let | |
1518 | - | let | |
1519 | - | if (( | |
1520 | - | then $Tuple4(( | |
1521 | - | else if (( | |
1522 | - | then if (( | |
1523 | - | then throw((((("Attempt to take " + | |
1524 | - | else $Tuple4(( | |
1525 | - | else if ((-( | |
1526 | - | then throw((((("Attempt to take " + toString(-( | |
1527 | - | else $Tuple4(( | |
1515 | + | else split_4C(ii[bw], "_") | |
1516 | + | func ir (eM,hM) = { | |
1517 | + | let gz = eM._1 | |
1518 | + | let is = parseIntValue(hM) | |
1519 | + | let it = parseIntValue(im[gz]) | |
1520 | + | let iu = parseIntValue(gP[gz]) | |
1521 | + | if ((is == 0)) | |
1522 | + | then $Tuple4((gz + 1), (eM._2 :+ im[gz]), (eM._3 :+ gP[gz]), eM._4) | |
1523 | + | else if ((is > 0)) | |
1524 | + | then if ((is > iu)) | |
1525 | + | then throw((((("Attempt to take " + hM) + " from backpack, but only ") + toString(iu)) + " available")) | |
1526 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((it + is))), (eM._3 :+ toString((iu - is))), (eM._4 + is)) | |
1527 | + | else if ((-(is) > it)) | |
1528 | + | then throw((((("Attempt to take " + toString(-(is))) + " from warehouse, but only ") + toString(it)) + " available")) | |
1529 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((it + is))), (eM._3 :+ toString((iu - is))), (eM._4 + is)) | |
1528 | 1530 | } | |
1529 | 1531 | ||
1530 | - | let | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let | |
1534 | - | func | |
1535 | - | then | |
1536 | - | else | |
1537 | - | ||
1538 | - | func | |
1539 | - | then | |
1532 | + | let eX = { | |
1533 | + | let eO = ij | |
1534 | + | let eP = size(eO) | |
1535 | + | let eQ = $Tuple4(0, nil, nil, 0) | |
1536 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1537 | + | then eS | |
1538 | + | else ir(eS, eO[eT]) | |
1539 | + | ||
1540 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1541 | + | then eS | |
1540 | 1542 | else throw("List size exceeds 6") | |
1541 | 1543 | ||
1542 | - | | |
1544 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1543 | 1545 | } | |
1544 | - | func | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | let | |
1549 | - | if (( | |
1550 | - | then $Tuple4(( | |
1551 | - | else if (( | |
1552 | - | then if (( | |
1553 | - | then throw((((("Attempt to take " + | |
1554 | - | else $Tuple4(( | |
1555 | - | else if ((-( | |
1556 | - | then throw((((("Attempt to take " + toString(-( | |
1557 | - | else $Tuple4(( | |
1546 | + | func iv (eM,hM) = { | |
1547 | + | let gz = eM._1 | |
1548 | + | let is = parseIntValue(hM) | |
1549 | + | let iw = parseIntValue(in[gz]) | |
1550 | + | let ix = parseIntValue(ip[gz]) | |
1551 | + | if ((is == 0)) | |
1552 | + | then $Tuple4((gz + 1), (eM._2 :+ in[gz]), (eM._3 :+ ip[gz]), eM._4) | |
1553 | + | else if ((is > 0)) | |
1554 | + | then if ((is > ix)) | |
1555 | + | then throw((((("Attempt to take " + hM) + " from backpack, but only ") + toString(ix)) + " available")) | |
1556 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((iw + is))), (eM._3 :+ toString((ix - is))), (eM._4 + is)) | |
1557 | + | else if ((-(is) > iw)) | |
1558 | + | then throw((((("Attempt to take " + toString(-(is))) + " from warehouse, but only ") + toString(iw)) + " available")) | |
1559 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((iw + is))), (eM._3 :+ toString((ix - is))), (eM._4 + is)) | |
1558 | 1560 | } | |
1559 | 1561 | ||
1560 | - | let | |
1561 | - | let | |
1562 | - | let | |
1563 | - | let | |
1564 | - | func | |
1565 | - | then | |
1566 | - | else | |
1567 | - | ||
1568 | - | func | |
1569 | - | then | |
1562 | + | let gh = { | |
1563 | + | let eO = ik | |
1564 | + | let eP = size(eO) | |
1565 | + | let eQ = $Tuple4(0, nil, nil, eX._4) | |
1566 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1567 | + | then eS | |
1568 | + | else iv(eS, eO[eT]) | |
1569 | + | ||
1570 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1571 | + | then eS | |
1570 | 1572 | else throw("List size exceeds 6") | |
1571 | 1573 | ||
1572 | - | hy( | |
1574 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1573 | 1575 | } | |
1574 | - | func | |
1575 | - | let | |
1576 | - | let | |
1577 | - | let | |
1578 | - | then parseIntValue( | |
1576 | + | func iy (eM,hM) = { | |
1577 | + | let gz = eM._1 | |
1578 | + | let is = parseIntValue(hM) | |
1579 | + | let iz = if ((size(io) > gz)) | |
1580 | + | then parseIntValue(io[gz]) | |
1579 | 1581 | else 0 | |
1580 | - | let | |
1581 | - | then parseIntValue( | |
1582 | + | let iA = if ((size(iq) > gz)) | |
1583 | + | then parseIntValue(iq[gz]) | |
1582 | 1584 | else 0 | |
1583 | - | if (( | |
1584 | - | then $Tuple4(( | |
1585 | - | else if (( | |
1586 | - | then if (( | |
1587 | - | then throw((((("Attempt to take " + | |
1585 | + | if ((is == 0)) | |
1586 | + | then $Tuple4((gz + 1), (eM._2 :+ toString(iz)), (eM._3 :+ toString(iA)), eM._4) | |
1587 | + | else if ((is > 0)) | |
1588 | + | then if ((is > iA)) | |
1589 | + | then throw((((("Attempt to take " + hM) + " from backpack, but only ") + toString(iA)) + " available")) | |
1588 | 1590 | else { | |
1589 | - | let | |
1590 | - | $Tuple4(( | |
1591 | + | let iB = (eC((iz + is), bj) - eC(iz, bj)) | |
1592 | + | $Tuple4((gz + 1), (eM._2 :+ toString((iz + is))), (eM._3 :+ toString((iA - is))), (eM._4 + iB)) | |
1591 | 1593 | } | |
1592 | - | else if ((-( | |
1593 | - | then throw((((("Attempt to take " + toString(-( | |
1594 | + | else if ((-(is) > iz)) | |
1595 | + | then throw((((("Attempt to take " + toString(-(is))) + " from warehouse, but only ") + toString(iz)) + " available")) | |
1594 | 1596 | else { | |
1595 | - | let | |
1596 | - | $Tuple4(( | |
1597 | + | let iB = (eC((iz + is), bj) - eC(iz, bj)) | |
1598 | + | $Tuple4((gz + 1), (eM._2 :+ toString((iz + is))), (eM._3 :+ toString((iA - is))), (eM._4 + iB)) | |
1597 | 1599 | } | |
1598 | 1600 | } | |
1599 | 1601 | ||
1600 | - | let | |
1602 | + | let hF = if ((size(il) != 0)) | |
1601 | 1603 | then { | |
1602 | - | let | |
1603 | - | let | |
1604 | - | let | |
1605 | - | func | |
1606 | - | then | |
1607 | - | else | |
1608 | - | ||
1609 | - | func | |
1610 | - | then | |
1604 | + | let eO = il | |
1605 | + | let eP = size(eO) | |
1606 | + | let eQ = $Tuple4(0, nil, nil, gh._4) | |
1607 | + | func hB (eS,eT) = if ((eT >= eP)) | |
1608 | + | then eS | |
1609 | + | else iy(eS, eO[eT]) | |
1610 | + | ||
1611 | + | func hC (eS,eT) = if ((eT >= eP)) | |
1612 | + | then eS | |
1611 | 1613 | else throw("List size exceeds 50") | |
1612 | 1614 | ||
1613 | - | hB( | |
1615 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1614 | 1616 | } | |
1615 | - | else $Tuple4(0, | |
1616 | - | let | |
1617 | - | if (( | |
1618 | - | then throw((((("Attempt to put total " + toString( | |
1619 | - | else $Tuple7(makeString( | |
1617 | + | else $Tuple4(0, io, iq, gh._4) | |
1618 | + | let iC = hF._4 | |
1619 | + | if ((iC > gR)) | |
1620 | + | then throw((((("Attempt to put total " + toString(iC)) + " stuff, but only ") + toString(gR)) + " warehouse space left")) | |
1621 | + | else $Tuple7(makeString(eX._2, "_"), makeString(gh._2, "_"), makeString_2C(hF._2, "_"), makeString(eX._3, "_"), makeString(gh._3, "_"), makeString_2C(hF._3, "_"), iC) | |
1620 | 1622 | } | |
1621 | 1623 | } | |
1622 | 1624 | ||
1623 | 1625 | ||
1624 | - | func | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | let | |
1629 | - | let | |
1630 | - | let | |
1631 | - | let | |
1632 | - | let | |
1633 | - | let | |
1634 | - | let | |
1635 | - | $Tuple2([IntegerEntry( | |
1636 | - | } | |
1637 | - | ||
1638 | - | ||
1639 | - | func | |
1626 | + | func iD (iE,iF) = { | |
1627 | + | let bX = toString(iE) | |
1628 | + | let iG = gX(toBigInt(iF)) | |
1629 | + | let iH = valueOrElse(getInteger(ee()), (ed + 1)) | |
1630 | + | let ei = toString(iH) | |
1631 | + | let hg = toInt((iG % dX)) | |
1632 | + | let gC = he(iG, hg) | |
1633 | + | let af = bc[hg] | |
1634 | + | let iI = Issue(eB(ei, "S"), makeString([ei, "S", gC, af], "_"), 1, 0, false) | |
1635 | + | let bB = calculateAssetId(iI) | |
1636 | + | let iJ = toBase58String(bB) | |
1637 | + | $Tuple2([IntegerEntry(ee(), (iH + 1)), iI, StringEntry(eh(ei), iJ), StringEntry(bA(iJ), bX), StringEntry(ek(ei), bX), IntegerEntry(bK(iJ), 0), IntegerEntry(ej(iJ, bX), 0), ScriptTransfer(iE, 1, bB)], $Tuple2(iJ, af)) | |
1638 | + | } | |
1639 | + | ||
1640 | + | ||
1641 | + | func iK (bX,iL,iM) = if (!(sigVerify_8Kb(iL, iM, g))) | |
1640 | 1642 | then throw("signature does not match") | |
1641 | 1643 | else { | |
1642 | - | let | |
1643 | - | let | |
1644 | - | let | |
1645 | - | let | |
1646 | - | let | |
1647 | - | let | |
1648 | - | let | |
1649 | - | let | |
1650 | - | if (if (( | |
1644 | + | let fk = split_4C(toUtf8String(iL), ";") | |
1645 | + | let iN = split_4C(fk[0], "|") | |
1646 | + | let iO = split(iN[es], "_") | |
1647 | + | let iP = parseIntValue(iO[0]) | |
1648 | + | let iQ = parseIntValue(iO[1]) | |
1649 | + | let iR = split(fk[1], ":") | |
1650 | + | let iS = iR[0] | |
1651 | + | let iT = parseIntValue(iN[et]) | |
1652 | + | if (if ((iT > (lastBlock.timestamp + dP))) | |
1651 | 1653 | then true | |
1652 | - | else ((lastBlock.timestamp - | |
1653 | - | then throw(((("signature outdated: logTime=" + toString( | |
1654 | + | else ((lastBlock.timestamp - dP) > iT)) | |
1655 | + | then throw(((("signature outdated: logTime=" + toString(iT)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1654 | 1656 | else { | |
1655 | - | let | |
1656 | - | let | |
1657 | - | if (( | |
1658 | - | then throw(((("Tx ids don't match! In state: " + | |
1657 | + | let iU = iR[1] | |
1658 | + | let iV = valueOrElse(getString(av(bX)), "") | |
1659 | + | if ((iV != iU)) | |
1660 | + | then throw(((("Tx ids don't match! In state: " + iV) + ", in msg: ") + iU)) | |
1659 | 1661 | else { | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | if (( | |
1665 | - | then throw(((("oldHealth=" + toString( | |
1666 | - | else if ((0 >= | |
1662 | + | let bP = valueOrErrorMessage(getString(bT(bX)), "You don't have a duck staked") | |
1663 | + | let iW = cQ(bP) | |
1664 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
1665 | + | let iY = valueOrElse(getInteger(iW), iX) | |
1666 | + | if ((iY != iP)) | |
1667 | + | then throw(((("oldHealth=" + toString(iY)) + " from state does not match one from flight log=") + toString(iP))) | |
1668 | + | else if ((0 >= iP)) | |
1667 | 1669 | then throw("You can't fly with zero health") | |
1668 | - | else if (!( | |
1670 | + | else if (!(gk(bP))) | |
1669 | 1671 | then throw("Equipment incompatible") | |
1670 | 1672 | else { | |
1671 | - | let | |
1672 | - | then | |
1673 | + | let iZ = if ((size(iN) > eu)) | |
1674 | + | then iN[eu] | |
1673 | 1675 | else "" | |
1674 | - | let | |
1675 | - | then | |
1676 | + | let ja = if ((size(iN) > ev)) | |
1677 | + | then iN[ev] | |
1676 | 1678 | else "" | |
1677 | - | let | |
1678 | - | then ( | |
1679 | + | let jb = if (if ((iQ > 0)) | |
1680 | + | then (iZ == "$") | |
1679 | 1681 | else false) | |
1680 | - | then | |
1682 | + | then am(invoke(M, "sendUsdtPrize", [bX], nil)) | |
1681 | 1683 | else 0 | |
1682 | - | $Tuple5( | |
1684 | + | $Tuple5(iQ, bP, jb, iS, ja) | |
1683 | 1685 | } | |
1684 | 1686 | } | |
1685 | 1687 | } | |
1686 | 1688 | } | |
1687 | 1689 | ||
1688 | 1690 | ||
1689 | - | func | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | (( | |
1695 | - | } | |
1696 | - | ||
1697 | - | ||
1698 | - | func | |
1699 | - | let | |
1700 | - | then $Tuple2( | |
1691 | + | func jc (bJ,jd) = { | |
1692 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
1693 | + | let je = valueOrElse(getInteger(bE(aM, bJ)), 0) | |
1694 | + | let jf = (hU / 6) | |
1695 | + | let jg = (hU / 7) | |
1696 | + | ((aP + fraction(aP, ((hU + jf) + (2 * jg)), 5)) + fraction(aP, je, (jd * 5))) | |
1697 | + | } | |
1698 | + | ||
1699 | + | ||
1700 | + | func jh (aw,ji,jj) = { | |
1701 | + | let jk = if ((ji == ep)) | |
1702 | + | then $Tuple2(jj, valueOrElse(getString(bT(aw)), "")) | |
1701 | 1703 | else { | |
1702 | - | let | |
1703 | - | let | |
1704 | - | let | |
1705 | - | if (( | |
1706 | - | then throw((("Duck location type is " + | |
1707 | - | else $Tuple2( | |
1708 | - | } | |
1709 | - | let | |
1710 | - | let | |
1711 | - | let | |
1712 | - | let | |
1713 | - | let | |
1714 | - | let | |
1715 | - | if (( | |
1716 | - | then throw(( | |
1704 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
1705 | + | let jl = valueOrElse(getString(bV(bP)), aR) | |
1706 | + | let cq = split(value(jl), "_") | |
1707 | + | if ((cq[by] != "L")) | |
1708 | + | then throw((("Duck location type is " + cq[by]) + ", but should be L")) | |
1709 | + | else $Tuple2(cq[bz], bP) | |
1710 | + | } | |
1711 | + | let bJ = jk._1 | |
1712 | + | let jm = jk._2 | |
1713 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
1714 | + | let jo = bD(bJ) | |
1715 | + | let jp = valueOrErrorMessage(getInteger(jo), (("Land " + jn.name) + " is not staked")) | |
1716 | + | let jq = valueOrErrorMessage(getString(bA(bJ)), (("NFT " + jn.name) + " is orphaned")) | |
1717 | + | if ((jq != aw)) | |
1718 | + | then throw((aJ + " is not yours")) | |
1717 | 1719 | else { | |
1718 | - | let | |
1719 | - | $Tuple4( | |
1720 | - | } | |
1721 | - | } | |
1722 | - | ||
1723 | - | ||
1724 | - | func | |
1720 | + | let jr = split(jn.description, "_") | |
1721 | + | $Tuple4(jm, bJ, jr, jp) | |
1722 | + | } | |
1723 | + | } | |
1724 | + | ||
1725 | + | ||
1726 | + | func js (aw,eD,ji,jj) = if ((0 > eD)) | |
1725 | 1727 | then throw("Negative amount") | |
1726 | 1728 | else { | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | let | |
1731 | - | if ((0 > | |
1732 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1729 | + | let fR = jh(aw, ji, jj) | |
1730 | + | let as = fR._3[U] | |
1731 | + | let gv = gB(fR._3[V]) | |
1732 | + | let gF = (aI() - fR._4) | |
1733 | + | if ((0 > gF)) | |
1734 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fR._4)) + ", final = ") + toString(aI()))) | |
1733 | 1735 | else { | |
1734 | - | let | |
1735 | - | let | |
1736 | - | let | |
1737 | - | if (( | |
1738 | - | then throw(((("Not enough resources, available = " + toString( | |
1736 | + | let jd = ar(as) | |
1737 | + | let jt = jc(fR._2, jd) | |
1738 | + | let ju = fraction(gF, (jt * jd), dK) | |
1739 | + | if ((eD > ju)) | |
1740 | + | then throw(((("Not enough resources, available = " + toString(ju)) + ", requested = ") + toString(eD))) | |
1739 | 1741 | else { | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1743 | - | let | |
1744 | - | let | |
1745 | - | let | |
1746 | - | let | |
1747 | - | let | |
1748 | - | let | |
1749 | - | if (if (( | |
1750 | - | then ( | |
1742 | + | let jv = fraction((ju - eD), dK, (jt * jd)) | |
1743 | + | let jw = (aI() - jv) | |
1744 | + | let hT = (jd / q) | |
1745 | + | let gQ = gL(gv, (gF - jv), hT, jt) | |
1746 | + | let hS = bI(fR._2) | |
1747 | + | let hU = valueOrElse(getInteger(bK(fR._2)), 0) | |
1748 | + | let hJ = hR(hS, hT, hU) | |
1749 | + | let ia = split(hJ[bo], "_") | |
1750 | + | let gR = parseIntValue(ia[br]) | |
1751 | + | if (if ((ji == ep)) | |
1752 | + | then (eD > gR) | |
1751 | 1753 | else false) | |
1752 | - | then throw((("Only " + toString( | |
1754 | + | then throw((("Only " + toString(gR)) + " space left in warehouse")) | |
1753 | 1755 | else { | |
1754 | - | let | |
1755 | - | let | |
1756 | - | let | |
1757 | - | let | |
1758 | - | let | |
1759 | - | then $Tuple4( | |
1760 | - | else if (( | |
1761 | - | then $Tuple4( | |
1756 | + | let hE = bU(fR._1) | |
1757 | + | let ii = hD(hE) | |
1758 | + | let gP = split(ii[bu], "_") | |
1759 | + | let gO = split(hJ[bl], "_") | |
1760 | + | let jx = if ((ji == ep)) | |
1761 | + | then $Tuple4(gD(gO, gv, (gF - jv), hT, jt), ii[bu], (parseIntValue(ia[bq]) + gQ._2), (parseIntValue(ia[br]) - gQ._2)) | |
1762 | + | else if ((ji == eq)) | |
1763 | + | then $Tuple4(hJ[bl], gD(gP, gv, (gF - jv), hT, jt), parseIntValue(ia[bq]), parseIntValue(ia[br])) | |
1762 | 1764 | else { | |
1763 | - | let | |
1764 | - | let | |
1765 | - | $Tuple4( | |
1765 | + | let jy = gN(gO, gP, gQ, gR) | |
1766 | + | let jz = min([parseIntValue(ia[br]), gQ._2]) | |
1767 | + | $Tuple4(jy._1, jy._2, (parseIntValue(ia[bq]) + jz), (parseIntValue(ia[br]) - jz)) | |
1766 | 1768 | } | |
1767 | - | let | |
1768 | - | let | |
1769 | - | let | |
1770 | - | let | |
1771 | - | $Tuple5([IntegerEntry( | |
1769 | + | let jA = jx._1 | |
1770 | + | let jB = jx._2 | |
1771 | + | let jC = jx._3 | |
1772 | + | let jD = jx._4 | |
1773 | + | $Tuple5([IntegerEntry(bD(fR._2), jw), IntegerEntry(bG(aJ, fR._2, aw), jw)], hE, [ii[bt], jB, ii[bv], ii[bw]], hS, [hJ[bk], jA, hJ[bm], hJ[bn], makeString([ia[bp], toString(jC), toString(jD), ia[bs]], "_")]) | |
1772 | 1774 | } | |
1773 | 1775 | } | |
1774 | 1776 | } | |
1775 | 1777 | } | |
1776 | 1778 | ||
1777 | 1779 | ||
1778 | - | func | |
1779 | - | let | |
1780 | - | let | |
1781 | - | let | |
1782 | - | | |
1783 | - | } | |
1784 | - | ||
1785 | - | ||
1786 | - | func | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1780 | + | func jE (aw,bJ,jd,ji) = { | |
1781 | + | let jo = bD(bJ) | |
1782 | + | let jp = value(getInteger(jo)) | |
1783 | + | let ju = (fraction((aI() - jp), jc(bJ, jd), dK) * jd) | |
1784 | + | js(aw, ju, ji, bJ) | |
1785 | + | } | |
1786 | + | ||
1787 | + | ||
1788 | + | func jF (eZ,iE,jG,bJ) = { | |
1789 | + | let aw = toString(iE) | |
1790 | + | let fR = jh(aw, er, bJ) | |
1791 | + | let jd = ar(fR._3[U]) | |
1792 | + | let jH = bK(fR._2) | |
1793 | + | let jI = valueOrElse(getInteger(jH), 0) | |
1792 | 1794 | if (if (!(b)) | |
1793 | - | then ( | |
1795 | + | then (jI >= 3) | |
1794 | 1796 | else false) | |
1795 | 1797 | then throw("Currently max infrastructure level = 3") | |
1796 | 1798 | else { | |
1797 | - | let | |
1798 | - | let | |
1799 | + | let jJ = ((sqrt(jd, 0, 0, DOWN) / 5) + 2) | |
1800 | + | let dC = (jI + 1) | |
1799 | 1801 | if (if (b) | |
1800 | - | then ( | |
1802 | + | then (dC > jJ) | |
1801 | 1803 | else false) | |
1802 | - | then throw(("Currently max infrastructure level = " + toString( | |
1804 | + | then throw(("Currently max infrastructure level = " + toString(jJ))) | |
1803 | 1805 | else { | |
1804 | - | let | |
1805 | - | if (if (!( | |
1806 | - | then ( | |
1806 | + | let jK = fraction(dS, (jd * dC), q) | |
1807 | + | if (if (!(eZ)) | |
1808 | + | then (jG != jK) | |
1807 | 1809 | else false) | |
1808 | - | then throw(("Payment attached should be " + toString( | |
1810 | + | then throw(("Payment attached should be " + toString(jK))) | |
1809 | 1811 | else { | |
1810 | - | let | |
1811 | - | let | |
1812 | - | let | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | let | |
1820 | - | let | |
1821 | - | let | |
1822 | - | $Tuple3(([IntegerEntry( | |
1812 | + | let hE = bU(fR._1) | |
1813 | + | let ii = hD(hE) | |
1814 | + | let jL = split(ii[bv], "_") | |
1815 | + | let jM = fraction(l, (jd * dC), q) | |
1816 | + | let jN = makeString(eY(eZ, jL, jM), "_") | |
1817 | + | let jO = jE(aw, fR._2, jd, er) | |
1818 | + | let jP = jO._5 | |
1819 | + | let jQ = hG(jP[bk]) | |
1820 | + | let jR = makeString([split(jP[bk], "_")[0], toString(dC)], "_") | |
1821 | + | let jS = hG(jR) | |
1822 | + | let ia = split(jP[bo], "_") | |
1823 | + | let jT = makeString([ia[bp], ia[bq], toString(((parseIntValue(ia[br]) + jS) - jQ)), toString(jS)], "_") | |
1824 | + | $Tuple3(([IntegerEntry(jH, dC), IntegerEntry(ej(fR._2, aw), dC), StringEntry(hE, makeString([ii[bt], jO._3[bu], jN, ii[bw]], ":")), StringEntry(jO._4, makeString([jR, jP[bl], jP[bm], jP[bn], jT], ":"))] ++ jO._1), dC, jM) | |
1823 | 1825 | } | |
1824 | 1826 | } | |
1825 | 1827 | } | |
1826 | 1828 | } | |
1827 | 1829 | ||
1828 | 1830 | ||
1829 | - | func | |
1830 | - | let | |
1831 | - | let | |
1832 | - | let | |
1833 | - | $Tuple2([IntegerEntry( | |
1834 | - | } | |
1835 | - | ||
1836 | - | ||
1837 | - | func | |
1838 | - | let | |
1839 | - | let | |
1831 | + | func jU (jV,jW,jX,jY) = { | |
1832 | + | let dw = valueOrElse(getInteger(jW), 0) | |
1833 | + | let dB = (dw + jY) | |
1834 | + | let jZ = dz(valueOrElse(getInteger(jV), 0), dB) | |
1835 | + | $Tuple2([IntegerEntry(jV, jZ[0]), IntegerEntry(jW, dB), IntegerEntry(jX, (valueOrElse(getInteger(jX), 0) + jZ[1]))], dB) | |
1836 | + | } | |
1837 | + | ||
1838 | + | ||
1839 | + | func ka (bP,jY) = { | |
1840 | + | let jn = value(assetInfo(fromBase58String(bP))) | |
1841 | + | let aw = valueOrErrorMessage(getString(bS(bP)), (("NFT " + jn.name) + " is orphaned")) | |
1840 | 1842 | if (if (if (c) | |
1841 | - | then ( | |
1843 | + | then (jn.issuer == this) | |
1842 | 1844 | else false) | |
1843 | - | then contains( | |
1845 | + | then contains(jn.name, aL) | |
1844 | 1846 | else false) | |
1845 | - | then | |
1846 | - | else | |
1847 | - | } | |
1848 | - | ||
1849 | - | ||
1850 | - | func | |
1851 | - | ||
1852 | - | ||
1853 | - | func | |
1854 | - | let | |
1855 | - | let | |
1856 | - | let | |
1857 | - | if (!(isDefined( | |
1847 | + | then jU(cX(aw), cW(aw), cY(aw), jY) | |
1848 | + | else jU(cT(bP), cS(bP), cU(bP), jY) | |
1849 | + | } | |
1850 | + | ||
1851 | + | ||
1852 | + | func kb (aw,jY) = jU(cX(aw), cW(aw), cY(aw), jY) | |
1853 | + | ||
1854 | + | ||
1855 | + | func kc (aw) = { | |
1856 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
1857 | + | let kd = bN(aw) | |
1858 | + | let ke = getString(kd) | |
1859 | + | if (!(isDefined(ke))) | |
1858 | 1860 | then throw("You are not eligible for ONBOARD artifact") | |
1859 | 1861 | else { | |
1860 | - | let | |
1861 | - | let | |
1862 | - | if (isDefined( | |
1863 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1862 | + | let kf = bQ(aw) | |
1863 | + | let kg = getString(kf) | |
1864 | + | if (isDefined(kg)) | |
1865 | + | then throw(("You already used your ONBOARD artifact on duck " + value(kg))) | |
1864 | 1866 | else { | |
1865 | - | let | |
1866 | - | let | |
1867 | - | if (isDefined( | |
1868 | - | then throw(((("The duck " + | |
1869 | - | else ([StringEntry( | |
1867 | + | let kh = bO(bP) | |
1868 | + | let ki = getString(kh) | |
1869 | + | if (isDefined(ki)) | |
1870 | + | then throw(((("The duck " + bP) + " already got points from ONBOARD artifact from user ") + value(ki))) | |
1871 | + | else ([StringEntry(kf, bP), StringEntry(kh, aw)] ++ ka(bP, dt)._1) | |
1870 | 1872 | } | |
1871 | 1873 | } | |
1872 | 1874 | } | |
1873 | 1875 | ||
1874 | 1876 | ||
1875 | - | func | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | let | |
1880 | - | if ((valueOrElse(getInteger( | |
1877 | + | func kj (aw,jj) = { | |
1878 | + | let fR = jh(aw, er, jj) | |
1879 | + | let bJ = fR._2 | |
1880 | + | let jd = ar(fR._3[U]) | |
1881 | + | let kk = bE(aM, bJ) | |
1882 | + | if ((valueOrElse(getInteger(kk), 0) > 0)) | |
1881 | 1883 | then throw("Presale artifact is already activated") | |
1882 | - | else if ((parseIntValue( | |
1883 | - | then throw(((( | |
1884 | + | else if ((parseIntValue(fR._3[T]) > ed)) | |
1885 | + | then throw((((aJ + " ") + bJ) + " is not eligible for presale artifact")) | |
1884 | 1886 | else { | |
1885 | - | let | |
1886 | - | ((( | |
1887 | + | let jO = jE(aw, bJ, jd, er) | |
1888 | + | (((jO._1 :+ IntegerEntry(kk, jd)) :+ StringEntry(jO._2, makeString(jO._3, ":"))) :+ StringEntry(jO._4, makeString(jO._5, ":"))) | |
1887 | 1889 | } | |
1888 | 1890 | } | |
1889 | 1891 | ||
1890 | 1892 | ||
1891 | - | func | |
1892 | - | let | |
1893 | - | let | |
1894 | - | let | |
1895 | - | let | |
1896 | - | let | |
1897 | - | let | |
1898 | - | if (( | |
1893 | + | func kl (bP) = { | |
1894 | + | let cp = valueOrElse(getInteger(R, ca), 0) | |
1895 | + | let jl = split(valueOrElse(getString(bV(bP)), aR), "_") | |
1896 | + | let cr = lastBlock.timestamp | |
1897 | + | let cs = cj(R, cp) | |
1898 | + | let cl = cs[cf] | |
1899 | + | let cm = cs[cg] | |
1900 | + | if ((jl[by] != "T")) | |
1899 | 1901 | then false | |
1900 | - | else if (if (if ((parseIntValue( | |
1901 | - | then ( | |
1902 | + | else if (if (if ((parseIntValue(jl[bx]) == cp)) | |
1903 | + | then (cm[ci] == "INPROGRESS") | |
1902 | 1904 | else false) | |
1903 | - | then (parseIntValue( | |
1905 | + | then (parseIntValue(cl[ch]) > cr) | |
1904 | 1906 | else false) | |
1905 | 1907 | then throw("Your duck is taking part in the tournament") | |
1906 | - | else | |
1907 | - | } | |
1908 | - | ||
1909 | - | ||
1910 | - | func | |
1911 | - | let | |
1912 | - | if ( | |
1908 | + | else aq(invoke(this, "exitTournamentInternal", [bP], nil)) | |
1909 | + | } | |
1910 | + | ||
1911 | + | ||
1912 | + | func km (kn,dC,ko,aw,kp,kq) = { | |
1913 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
1914 | + | if (kl(bP)) | |
1913 | 1915 | then throw("mergeInternal_checkTournament") | |
1914 | 1916 | else { | |
1915 | - | func | |
1916 | - | let | |
1917 | - | let | |
1918 | - | let | |
1919 | - | let | |
1920 | - | if (( | |
1921 | - | then throw(( | |
1917 | + | func kr (eM,bJ) = { | |
1918 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
1919 | + | let jo = bD(bJ) | |
1920 | + | let jp = valueOrErrorMessage(getInteger(jo), (("NFT " + jn.name) + " is not staked")) | |
1921 | + | let jq = valueOrErrorMessage(getString(bA(bJ)), (("NFT " + jn.name) + " is orphaned")) | |
1922 | + | if ((jq != aw)) | |
1923 | + | then throw((aJ + " is not yours")) | |
1922 | 1924 | else { | |
1923 | - | let | |
1924 | - | let | |
1925 | - | if (if (( | |
1926 | - | then ( | |
1925 | + | let jr = split(jn.description, "_") | |
1926 | + | let af = jr[W] | |
1927 | + | if (if ((eM._3 != "")) | |
1928 | + | then (eM._3 != af) | |
1927 | 1929 | else false) | |
1928 | 1930 | then throw("Lands should be on the same continent to merge") | |
1929 | 1931 | else { | |
1930 | - | let | |
1931 | - | let | |
1932 | - | let | |
1933 | - | let | |
1934 | - | let | |
1935 | - | let | |
1936 | - | let | |
1937 | - | let | |
1938 | - | let | |
1939 | - | if (("S" == | |
1932 | + | let as = jr[U] | |
1933 | + | let ks = eM._1 | |
1934 | + | let gz = valueOrErrorMessage(indexOf(ks, as), "You haven't passed all the lands needed") | |
1935 | + | let kt = (take(ks, gz) + drop(ks, (gz + 1))) | |
1936 | + | let jd = ar(as) | |
1937 | + | let ku = (eM._2 + valueOrElse(getInteger(bE(aM, bJ)), 0)) | |
1938 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
1939 | + | let kv = { | |
1940 | + | let h = as | |
1941 | + | if (("S" == h)) | |
1940 | 1942 | then 3 | |
1941 | - | else if (("M" == | |
1943 | + | else if (("M" == h)) | |
1942 | 1944 | then 4 | |
1943 | - | else if (("L" == | |
1945 | + | else if (("L" == h)) | |
1944 | 1946 | then 5 | |
1945 | - | else if (("XL" == | |
1947 | + | else if (("XL" == h)) | |
1946 | 1948 | then 6 | |
1947 | 1949 | else throw("Only S, M, L, XL can merge") | |
1948 | 1950 | } | |
1949 | - | if (( | |
1951 | + | if ((hU != kv)) | |
1950 | 1952 | then throw("All lands should be maxed to merge") | |
1951 | 1953 | else { | |
1952 | - | let | |
1953 | - | let | |
1954 | - | let | |
1955 | - | if ((0 > | |
1956 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1954 | + | let ei = jr[T] | |
1955 | + | let gv = gB(jr[V]) | |
1956 | + | let gF = (lastBlock.timestamp - jp) | |
1957 | + | if ((0 > gF)) | |
1958 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jp)) + ", current = ") + toString(lastBlock.timestamp))) | |
1957 | 1959 | else { | |
1958 | - | let | |
1959 | - | let | |
1960 | - | let | |
1961 | - | let | |
1962 | - | let | |
1963 | - | let | |
1964 | - | let | |
1965 | - | let | |
1966 | - | if (!(isDefined( | |
1967 | - | then throw(("Your staked lands don't contain " + | |
1960 | + | let jt = jc(bJ, jd) | |
1961 | + | let hT = (jd / q) | |
1962 | + | let jB = gD(split(eM._4, "_"), gv, gF, hT, jt) | |
1963 | + | let eW = gt(eM._6, gv, hT, -1) | |
1964 | + | let kw = gt(eM._10, gv, hT, -1) | |
1965 | + | let hn = gt(eM._9, gv, hT, 1) | |
1966 | + | let kx = eM._7 | |
1967 | + | let L = indexOf(kx, bJ) | |
1968 | + | if (!(isDefined(L))) | |
1969 | + | then throw(("Your staked lands don't contain " + bJ)) | |
1968 | 1970 | else { | |
1969 | - | let | |
1970 | - | let | |
1971 | - | $Tuple10( | |
1972 | - | then [DeleteEntry( | |
1973 | - | else nil)), | |
1971 | + | let ky = bC(bJ) | |
1972 | + | let kz = valueOrElse(getString(ky), "") | |
1973 | + | $Tuple10(kt, ku, af, jB, ((((((((((((eM._5 :+ DeleteEntry(bD(bJ))) :+ DeleteEntry(bG(aJ, bJ, aw))) :+ DeleteEntry(eh(ei))) :+ DeleteEntry(bA(bJ))) :+ DeleteEntry(bK(bJ))) :+ DeleteEntry(ej(bJ, aw))) :+ DeleteEntry(bE(aM, bJ))) :+ DeleteEntry(ek(ei))) :+ DeleteEntry(bI(bJ))) :+ DeleteEntry(ky)) :+ Burn(fromBase58String(bJ), 1)) ++ (if ((kz != "")) | |
1974 | + | then [DeleteEntry(ef(kz))] | |
1975 | + | else nil)), eW, removeByIndex(kx, value(L)), (eM._8 + jd), hn, kw) | |
1974 | 1976 | } | |
1975 | 1977 | } | |
1976 | 1978 | } | |
1978 | 1980 | } | |
1979 | 1981 | } | |
1980 | 1982 | ||
1981 | - | let | |
1982 | - | let | |
1983 | - | let | |
1984 | - | let | |
1985 | - | let | |
1986 | - | let | |
1987 | - | then split_51C(value( | |
1983 | + | let hE = bU(bP) | |
1984 | + | let ii = hD(hE) | |
1985 | + | let gu = split(valueOrElse(getString(ad()), "0_0_0_0_0_0"), "_") | |
1986 | + | let kA = ag(aw) | |
1987 | + | let kB = getString(kA) | |
1988 | + | let kC = if (isDefined(kB)) | |
1989 | + | then split_51C(value(kB), "_") | |
1988 | 1990 | else nil | |
1989 | - | let | |
1990 | - | let | |
1991 | - | let | |
1992 | - | let | |
1993 | - | let | |
1994 | - | let | |
1995 | - | func | |
1996 | - | then | |
1997 | - | else | |
1998 | - | ||
1999 | - | func | |
2000 | - | then | |
1991 | + | let kD = split(value(assetInfo(fromBase58String(kp[0]))).description, "_")[W] | |
1992 | + | let kE = split(valueOrElse(getString(ae(kD)), "0_0_0_0_0_0"), "_") | |
1993 | + | let eX = { | |
1994 | + | let eO = kp | |
1995 | + | let eP = size(eO) | |
1996 | + | let eQ = $Tuple10(ko, 0, "", ii[bu], nil, gu, kC, 0, split("0_0_0_0_0_0", "_"), kE) | |
1997 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1998 | + | then eS | |
1999 | + | else kr(eS, eO[eT]) | |
2000 | + | ||
2001 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2002 | + | then eS | |
2001 | 2003 | else throw("List size exceeds 5") | |
2002 | 2004 | ||
2003 | - | | |
2005 | + | eU(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5) | |
2004 | 2006 | } | |
2005 | - | let | |
2006 | - | let | |
2007 | - | let | |
2008 | - | let | |
2009 | - | let | |
2010 | - | let | |
2011 | - | let | |
2012 | - | let | |
2013 | - | let | |
2014 | - | let | |
2015 | - | let | |
2016 | - | $Tuple2(((((((((((((((( | |
2017 | - | then StringEntry( | |
2018 | - | else DeleteEntry( | |
2007 | + | let af = eX._3 | |
2008 | + | let hg = valueOrErrorMessage(indexOf(bc, af), ("Unknown continent: " + af)) | |
2009 | + | let gC = hm(eX._9, (ar(kn) / q)) | |
2010 | + | let iH = valueOrElse(getInteger(ee()), (ed + 1)) | |
2011 | + | let kF = toString(iH) | |
2012 | + | let iI = Issue(eB(kF, kn), makeString([kF, kn, gC, af], "_"), 1, 0, false) | |
2013 | + | let bB = calculateAssetId(iI) | |
2014 | + | let kG = toBase58String(bB) | |
2015 | + | let jN = makeString(eY((kq > 0), split(ii[bv], "_"), kq), "_") | |
2016 | + | let kH = ai(aw) | |
2017 | + | let kI = valueOrElse(getInteger(kH), 0) | |
2018 | + | $Tuple2((((((((((((((((eX._5 :+ (if ((size(eX._7) > 0)) | |
2019 | + | then StringEntry(kA, makeString_11C(eX._7, "_")) | |
2020 | + | else DeleteEntry(kA))) :+ IntegerEntry(kH, if ((eX._8 > kI)) | |
2019 | 2021 | then 0 | |
2020 | - | else ( | |
2021 | - | } | |
2022 | - | } | |
2023 | - | ||
2024 | - | ||
2025 | - | func | |
2026 | - | ||
2027 | - | ||
2028 | - | func | |
2029 | - | ||
2030 | - | ||
2031 | - | func | |
2032 | - | ||
2033 | - | ||
2034 | - | func | |
2035 | - | ||
2036 | - | ||
2037 | - | func | |
2038 | - | let | |
2039 | - | if ((4 == | |
2040 | - | then | |
2041 | - | else if ((3 == | |
2042 | - | then | |
2043 | - | else if ((5 == | |
2044 | - | then | |
2045 | - | else if ((2 == | |
2046 | - | then | |
2022 | + | else (kI - eX._8))) :+ IntegerEntry(ee(), (iH + 1))) :+ iI) :+ StringEntry(eh(kF), kG)) :+ StringEntry(bA(kG), aw)) :+ StringEntry(ek(kF), aw)) :+ IntegerEntry(bE(aM, kG), eX._2)) :+ IntegerEntry(bK(kG), dC)) :+ IntegerEntry(ej(kG, aw), dC)) :+ StringEntry(hE, makeString([ii[bt], eX._4, jN, ii[bw]], ":"))) :+ StringEntry(ad(), makeString(eX._6, "_"))) :+ StringEntry(ae(af), makeString(eX._10, "_"))) :+ StringEntry(bV(bP), makeString([af, "L", kG], "_"))) :+ ScriptTransfer(addressFromStringValue(aw), 1, bB)), kG) | |
2023 | + | } | |
2024 | + | } | |
2025 | + | ||
2026 | + | ||
2027 | + | func kJ (aw,kp) = km("M", 3, "SSSS", aw, kp, 0) | |
2028 | + | ||
2029 | + | ||
2030 | + | func kK (aw,kp) = km("L", 4, "SMM", aw, kp, (l * 4)) | |
2031 | + | ||
2032 | + | ||
2033 | + | func kL (aw,kp) = km("XL", 5, "SSSML", aw, kp, (l * 47)) | |
2034 | + | ||
2035 | + | ||
2036 | + | func kM (aw,kp) = km("XXL", 6, "LXL", aw, kp, (l * 54)) | |
2037 | + | ||
2038 | + | ||
2039 | + | func kN (aw,kp) = { | |
2040 | + | let h = size(kp) | |
2041 | + | if ((4 == h)) | |
2042 | + | then kJ(aw, kp) | |
2043 | + | else if ((3 == h)) | |
2044 | + | then kK(aw, kp) | |
2045 | + | else if ((5 == h)) | |
2046 | + | then kL(aw, kp) | |
2047 | + | else if ((2 == h)) | |
2048 | + | then kM(aw, kp) | |
2047 | 2049 | else throw("Unknown merge") | |
2048 | 2050 | } | |
2049 | 2051 | ||
2050 | 2052 | ||
2051 | - | func | |
2052 | - | then valueOrElse(getBoolean( | |
2053 | + | func kO (gz) = if (if ((gz.originCaller != M)) | |
2054 | + | then valueOrElse(getBoolean(au()), false) | |
2053 | 2055 | else false) | |
2054 | 2056 | then throw("Contracts are under maintenance") | |
2055 | - | else [StringEntry( | |
2056 | - | ||
2057 | - | ||
2058 | - | func | |
2059 | - | let | |
2060 | - | let | |
2061 | - | let | |
2062 | - | let | |
2063 | - | let | |
2064 | - | let | |
2065 | - | let | |
2066 | - | let | |
2067 | - | let | |
2068 | - | let | |
2069 | - | let | |
2070 | - | let | |
2071 | - | if ((0 > | |
2072 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2057 | + | else [StringEntry(av(toString(gz.originCaller)), toBase58String(gz.transactionId))] | |
2058 | + | ||
2059 | + | ||
2060 | + | func kP (aw,bJ) = { | |
2061 | + | let hS = bI(bJ) | |
2062 | + | let kQ = split(value(assetInfo(fromBase58String(bJ))).description, "_") | |
2063 | + | let as = kQ[U] | |
2064 | + | let jd = ar(as) | |
2065 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2066 | + | let hT = (jd / q) | |
2067 | + | let gv = gB(kQ[V]) | |
2068 | + | let hJ = hR(hS, hT, hU) | |
2069 | + | let gO = split(hJ[bl], "_") | |
2070 | + | let jo = bD(bJ) | |
2071 | + | let jp = getIntegerValue(jo) | |
2072 | + | let gF = (aI() - jp) | |
2073 | + | if ((0 > gF)) | |
2074 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jp)) + ", final = ") + toString(aI()))) | |
2073 | 2075 | else { | |
2074 | - | let | |
2075 | - | let | |
2076 | - | let | |
2077 | - | let | |
2078 | - | let | |
2079 | - | func | |
2080 | - | ||
2081 | - | let | |
2082 | - | let | |
2083 | - | let | |
2084 | - | let | |
2085 | - | func | |
2086 | - | then | |
2087 | - | else | |
2088 | - | ||
2089 | - | func | |
2090 | - | then | |
2076 | + | let jt = jc(bJ, jd) | |
2077 | + | let kR = gJ(gO, gv, gF, hT, jt) | |
2078 | + | let je = valueOrElse(getInteger(bE(aM, bJ)), 0) | |
2079 | + | let kS = ((jd * p) + ((((jd * hU) + je) * p) / 5)) | |
2080 | + | let kT = (fraction(kR._2, aS, p) * aV) | |
2081 | + | func kU (eM,hM) = (eM + parseIntValue(hM)) | |
2082 | + | ||
2083 | + | let kV = { | |
2084 | + | let eO = split(hJ[bm], "_") | |
2085 | + | let eP = size(eO) | |
2086 | + | let eQ = 0 | |
2087 | + | func eR (eS,eT) = if ((eT >= eP)) | |
2088 | + | then eS | |
2089 | + | else kU(eS, eO[eT]) | |
2090 | + | ||
2091 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2092 | + | then eS | |
2091 | 2093 | else throw("List size exceeds 6") | |
2092 | 2094 | ||
2093 | - | | |
2095 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
2094 | 2096 | } | |
2095 | - | let | |
2096 | - | let | |
2097 | + | let kW = (fraction(kV, (2 * aS), p) * aV) | |
2098 | + | let kX = if ((hJ[bn] == "")) | |
2097 | 2099 | then nil | |
2098 | - | else split_4C( | |
2099 | - | func | |
2100 | - | let | |
2101 | - | let | |
2102 | - | $Tuple2(( | |
2100 | + | else split_4C(hJ[bn], "_") | |
2101 | + | func hN (eM,hM) = { | |
2102 | + | let fw = eM._2 | |
2103 | + | let kY = parseIntValue(split(be[fw], "_")[bf]) | |
2104 | + | $Tuple2((eM._1 + ((parseIntValue(hM) * kY) * o)), (fw + 1)) | |
2103 | 2105 | } | |
2104 | 2106 | ||
2105 | - | let | |
2106 | - | let | |
2107 | - | let | |
2108 | - | let | |
2109 | - | func | |
2110 | - | then | |
2111 | - | else | |
2112 | - | ||
2113 | - | func | |
2114 | - | then | |
2107 | + | let kZ = { | |
2108 | + | let eO = kX | |
2109 | + | let eP = size(eO) | |
2110 | + | let eQ = $Tuple2(0, 0) | |
2111 | + | func hy (eS,eT) = if ((eT >= eP)) | |
2112 | + | then eS | |
2113 | + | else hN(eS, eO[eT]) | |
2114 | + | ||
2115 | + | func hz (eS,eT) = if ((eT >= eP)) | |
2116 | + | then eS | |
2115 | 2117 | else throw("List size exceeds 24") | |
2116 | 2118 | ||
2117 | - | hy( | |
2119 | + | hz(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
2118 | 2120 | } | |
2119 | - | let | |
2120 | - | $Tuple4( | |
2121 | - | } | |
2122 | - | } | |
2123 | - | ||
2124 | - | ||
2125 | - | func | |
2126 | - | let | |
2127 | - | let | |
2128 | - | let | |
2129 | - | let | |
2130 | - | let | |
2131 | - | let | |
2132 | - | func | |
2133 | - | ||
2134 | - | let | |
2135 | - | let | |
2136 | - | let | |
2137 | - | let | |
2138 | - | func | |
2139 | - | then | |
2140 | - | else | |
2141 | - | ||
2142 | - | func | |
2143 | - | then | |
2121 | + | let la = (fraction(kZ._1, (2 * aS), p) * aV) | |
2122 | + | $Tuple4(kS, kT, kW, la) | |
2123 | + | } | |
2124 | + | } | |
2125 | + | ||
2126 | + | ||
2127 | + | func lb (aw,bP) = { | |
2128 | + | let gl = cV(bP) | |
2129 | + | let lc = split(valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2130 | + | let hE = bU(bP) | |
2131 | + | let ii = hD(hE) | |
2132 | + | let go = gd(lc, fs(ii[bw]), true, nil) | |
2133 | + | let ld = fx(go) | |
2134 | + | func hL (eM,hM) = (eM + parseIntValue(hM)) | |
2135 | + | ||
2136 | + | let jB = { | |
2137 | + | let eO = split(ii[bu], "_") | |
2138 | + | let eP = size(eO) | |
2139 | + | let eQ = 0 | |
2140 | + | func eR (eS,eT) = if ((eT >= eP)) | |
2141 | + | then eS | |
2142 | + | else hL(eS, eO[eT]) | |
2143 | + | ||
2144 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2145 | + | then eS | |
2144 | 2146 | else throw("List size exceeds 6") | |
2145 | 2147 | ||
2146 | - | | |
2147 | - | } | |
2148 | - | let | |
2149 | - | let | |
2150 | - | let | |
2151 | - | let | |
2152 | - | let | |
2153 | - | func | |
2154 | - | then | |
2155 | - | else | |
2156 | - | ||
2157 | - | func | |
2158 | - | then | |
2148 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
2149 | + | } | |
2150 | + | let kT = (fraction(jB, aS, p) * aV) | |
2151 | + | let le = { | |
2152 | + | let eO = split(ii[bv], "_") | |
2153 | + | let eP = size(eO) | |
2154 | + | let eQ = 0 | |
2155 | + | func hy (eS,eT) = if ((eT >= eP)) | |
2156 | + | then eS | |
2157 | + | else hL(eS, eO[eT]) | |
2158 | + | ||
2159 | + | func hz (eS,eT) = if ((eT >= eP)) | |
2160 | + | then eS | |
2159 | 2161 | else throw("List size exceeds 6") | |
2160 | 2162 | ||
2161 | - | hy( | |
2162 | - | } | |
2163 | - | let | |
2164 | - | let | |
2163 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
2164 | + | } | |
2165 | + | let kW = (fraction(le, (2 * aS), p) * aV) | |
2166 | + | let kX = if ((ld == "")) | |
2165 | 2167 | then nil | |
2166 | - | else split_4C( | |
2167 | - | func | |
2168 | - | let | |
2169 | - | let | |
2170 | - | $Tuple2(( | |
2171 | - | } | |
2172 | - | ||
2173 | - | let | |
2174 | - | let | |
2175 | - | let | |
2176 | - | let | |
2177 | - | func | |
2178 | - | then | |
2179 | - | else | |
2180 | - | ||
2181 | - | func | |
2182 | - | then | |
2168 | + | else split_4C(ld, "_") | |
2169 | + | func hN (eM,hM) = { | |
2170 | + | let fw = eM._2 | |
2171 | + | let kY = parseIntValue(split(be[fw], "_")[bf]) | |
2172 | + | $Tuple2((eM._1 + ((parseIntValue(hM) * kY) * o)), (fw + 1)) | |
2173 | + | } | |
2174 | + | ||
2175 | + | let lf = { | |
2176 | + | let eO = kX | |
2177 | + | let eP = size(eO) | |
2178 | + | let eQ = $Tuple2(0, 0) | |
2179 | + | func hB (eS,eT) = if ((eT >= eP)) | |
2180 | + | then eS | |
2181 | + | else hN(eS, eO[eT]) | |
2182 | + | ||
2183 | + | func hC (eS,eT) = if ((eT >= eP)) | |
2184 | + | then eS | |
2183 | 2185 | else throw("List size exceeds 24") | |
2184 | 2186 | ||
2185 | - | hB( | |
2186 | - | } | |
2187 | - | let | |
2188 | - | $Tuple3( | |
2189 | - | } | |
2190 | - | ||
2191 | - | ||
2192 | - | @Callable( | |
2193 | - | func constructorV1 ( | |
2187 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
2188 | + | } | |
2189 | + | let la = (fraction(lf._1, (2 * aS), p) * aV) | |
2190 | + | $Tuple3(kT, kW, la) | |
2191 | + | } | |
2192 | + | ||
2193 | + | ||
2194 | + | @Callable(gz) | |
2195 | + | func constructorV1 (lg) = if ((gz.caller != this)) | |
2194 | 2196 | then throw("Permission denied") | |
2195 | - | else [StringEntry( | |
2196 | - | ||
2197 | - | ||
2198 | - | ||
2199 | - | @Callable( | |
2200 | - | func saveInteger ( | |
2197 | + | else [StringEntry(G(), lg)] | |
2198 | + | ||
2199 | + | ||
2200 | + | ||
2201 | + | @Callable(gz) | |
2202 | + | func saveInteger (y,eD) = if ((gz.caller != this)) | |
2201 | 2203 | then throw("saveInteger is not public method") | |
2202 | - | else [IntegerEntry( | |
2203 | - | ||
2204 | - | ||
2205 | - | ||
2206 | - | @Callable( | |
2207 | - | func setBlocked ( | |
2204 | + | else [IntegerEntry(y, eD)] | |
2205 | + | ||
2206 | + | ||
2207 | + | ||
2208 | + | @Callable(gz) | |
2209 | + | func setBlocked (lh) = if ((gz.caller != this)) | |
2208 | 2210 | then throw("permission denied") | |
2209 | - | else [BooleanEntry( | |
2210 | - | ||
2211 | - | ||
2212 | - | ||
2213 | - | @Callable( | |
2211 | + | else [BooleanEntry(au(), lh)] | |
2212 | + | ||
2213 | + | ||
2214 | + | ||
2215 | + | @Callable(gz) | |
2214 | 2216 | func stakeLand () = { | |
2215 | - | let | |
2216 | - | if ((size( | |
2217 | + | let li = kO(gz) | |
2218 | + | if ((size(gz.payments) != 1)) | |
2217 | 2219 | then throw("Exactly one payment required") | |
2218 | 2220 | else { | |
2219 | - | let | |
2220 | - | let | |
2221 | - | let | |
2222 | - | if (( | |
2223 | - | then throw((("NFT " + | |
2221 | + | let lj = value(gz.payments[0]) | |
2222 | + | let bB = value(lj.assetId) | |
2223 | + | let x = toString(gz.caller) | |
2224 | + | if ((lj.amount != 1)) | |
2225 | + | then throw((("NFT " + aJ) + " token should be attached as payment")) | |
2224 | 2226 | else { | |
2225 | - | let | |
2226 | - | if (( | |
2227 | + | let jn = value(assetInfo(bB)) | |
2228 | + | if ((jn.issuer != this)) | |
2227 | 2229 | then throw("Unknown issuer of token") | |
2228 | - | else if (!(contains( | |
2229 | - | then throw((("Only NFT " + | |
2230 | + | else if (!(contains(jn.name, aJ))) | |
2231 | + | then throw((("Only NFT " + aJ) + " tokens are accepted")) | |
2230 | 2232 | else { | |
2231 | - | let | |
2232 | - | let | |
2233 | - | then dropRight( | |
2234 | - | else if (contains( | |
2235 | - | then dropRight( | |
2236 | - | else dropRight( | |
2237 | - | if (!(isDefined(parseInt( | |
2238 | - | then throw(("Cannot parse land number from " + | |
2233 | + | let lk = drop(jn.name, 4) | |
2234 | + | let ei = if (contains(lk, "XXL")) | |
2235 | + | then dropRight(lk, 3) | |
2236 | + | else if (contains(lk, "XL")) | |
2237 | + | then dropRight(lk, 2) | |
2238 | + | else dropRight(lk, 1) | |
2239 | + | if (!(isDefined(parseInt(ei)))) | |
2240 | + | then throw(("Cannot parse land number from " + jn.name)) | |
2239 | 2241 | else { | |
2240 | - | let | |
2241 | - | let | |
2242 | - | if (isDefined(getInteger( | |
2243 | - | then throw((("NFT " + | |
2242 | + | let bJ = toBase58String(bB) | |
2243 | + | let jo = bD(bJ) | |
2244 | + | if (isDefined(getInteger(jo))) | |
2245 | + | then throw((("NFT " + jn.name) + " is already staked")) | |
2244 | 2246 | else { | |
2245 | - | let | |
2246 | - | let | |
2247 | - | let | |
2248 | - | let | |
2249 | - | let | |
2250 | - | let | |
2251 | - | let | |
2252 | - | let | |
2253 | - | let | |
2254 | - | let | |
2255 | - | let | |
2256 | - | then split_51C(value( | |
2247 | + | let jr = split(jn.description, "_") | |
2248 | + | let gv = gB(jr[V]) | |
2249 | + | let jd = ar(jr[U]) | |
2250 | + | let hT = (jd / q) | |
2251 | + | let eW = gA(gv, hT, 1) | |
2252 | + | let ll = ae(jr[W]) | |
2253 | + | let kE = split(valueOrElse(getString(ll), "0_0_0_0_0_0"), "_") | |
2254 | + | let lm = makeString(gt(kE, gv, hT, 1), "_") | |
2255 | + | let kA = ag(x) | |
2256 | + | let kB = getString(kA) | |
2257 | + | let kx = if (isDefined(kB)) | |
2258 | + | then split_51C(value(kB), "_") | |
2257 | 2259 | else nil | |
2258 | - | if (containsElement( | |
2259 | - | then throw(("Your staked lands already contain " + | |
2260 | - | else if ((size( | |
2261 | - | then throw((("Your already staked max (" + toString( | |
2260 | + | if (containsElement(kx, bJ)) | |
2261 | + | then throw(("Your staked lands already contain " + bJ)) | |
2262 | + | else if ((size(kx) >= aO)) | |
2263 | + | then throw((("Your already staked max (" + toString(aO)) + ") lands")) | |
2262 | 2264 | else { | |
2263 | - | let | |
2264 | - | let | |
2265 | - | let | |
2266 | - | let | |
2267 | - | $Tuple2(([IntegerEntry( | |
2265 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2266 | + | let kH = ai(x) | |
2267 | + | let ln = valueOrElse(getInteger(kH), 0) | |
2268 | + | let lo = invoke(Q, "onStakeUnstakeLand", [x], nil) | |
2269 | + | $Tuple2(([IntegerEntry(jo, lastBlock.timestamp), IntegerEntry(bG(aJ, bJ, x), lastBlock.timestamp), StringEntry(kA, makeString_11C((kx :+ bJ), "_")), IntegerEntry(kH, (ln + jd)), StringEntry(bA(bJ), x), StringEntry(ek(ei), x), IntegerEntry(ej(bJ, x), hU), StringEntry(ad(), eW), StringEntry(ll, lm)] ++ li), lo) | |
2268 | 2270 | } | |
2269 | 2271 | } | |
2270 | 2272 | } | |
2275 | 2277 | ||
2276 | 2278 | ||
2277 | 2279 | ||
2278 | - | @Callable( | |
2279 | - | func unstakeLand ( | |
2280 | - | let | |
2281 | - | if ((size( | |
2280 | + | @Callable(gz) | |
2281 | + | func unstakeLand (jj) = { | |
2282 | + | let li = kO(gz) | |
2283 | + | if ((size(gz.payments) != 0)) | |
2282 | 2284 | then throw("No payments required") | |
2283 | 2285 | else { | |
2284 | - | let | |
2285 | - | let | |
2286 | - | let | |
2287 | - | let | |
2288 | - | let | |
2289 | - | let | |
2290 | - | let | |
2291 | - | let | |
2292 | - | let | |
2293 | - | let | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2298 | - | let | |
2299 | - | if (!(isDefined( | |
2300 | - | then throw(("Your staked lands don't contain " + | |
2286 | + | let aw = toString(gz.caller) | |
2287 | + | let fR = jh(aw, eq, jj) | |
2288 | + | let bJ = fR._2 | |
2289 | + | let jr = fR._3 | |
2290 | + | let kA = ag(aw) | |
2291 | + | let gv = gB(jr[V]) | |
2292 | + | let jd = ar(jr[U]) | |
2293 | + | let hT = (jd / q) | |
2294 | + | let eW = gA(gv, hT, -1) | |
2295 | + | let ll = ae(jr[W]) | |
2296 | + | let kE = split(valueOrElse(getString(ll), "0_0_0_0_0_0"), "_") | |
2297 | + | let lm = makeString(gt(kE, gv, hT, -1), "_") | |
2298 | + | let jO = jE(aw, bJ, jd, eq) | |
2299 | + | let kx = split_51C(valueOrElse(getString(kA), ""), "_") | |
2300 | + | let L = indexOf(kx, bJ) | |
2301 | + | if (!(isDefined(L))) | |
2302 | + | then throw(("Your staked lands don't contain " + bJ)) | |
2301 | 2303 | else { | |
2302 | - | let | |
2303 | - | let | |
2304 | - | if (( | |
2305 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2304 | + | let cr = lastBlock.timestamp | |
2305 | + | let lp = valueOrElse(getInteger(P, bW(aw)), 0) | |
2306 | + | if ((lp >= cr)) | |
2307 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lp))) | |
2306 | 2308 | else { | |
2307 | - | let | |
2308 | - | if (( | |
2309 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2309 | + | let lq = (valueOrElse(getInteger(Q, dL(aw)), 0) + m) | |
2310 | + | if ((lq > cr)) | |
2311 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lq))) | |
2310 | 2312 | else { | |
2311 | - | let | |
2312 | - | let | |
2313 | - | let | |
2313 | + | let kH = ai(aw) | |
2314 | + | let kI = valueOrElse(getInteger(kH), 0) | |
2315 | + | let lr = if ((jd > kI)) | |
2314 | 2316 | then 0 | |
2315 | - | else ( | |
2316 | - | let | |
2317 | - | $Tuple2(([ScriptTransfer( | |
2318 | - | then StringEntry( | |
2319 | - | else DeleteEntry( | |
2317 | + | else (kI - jd) | |
2318 | + | let lo = invoke(Q, "onStakeUnstakeLand", [aw], nil) | |
2319 | + | $Tuple2(([ScriptTransfer(gz.caller, 1, fromBase58String(bJ)), DeleteEntry(bD(bJ)), DeleteEntry(bG(aJ, bJ, aw)), StringEntry(ad(), eW), StringEntry(ll, lm), StringEntry(jO._2, makeString(jO._3, ":")), if ((size(kx) > 1)) | |
2320 | + | then StringEntry(kA, makeString_11C(removeByIndex(kx, value(L)), "_")) | |
2321 | + | else DeleteEntry(kA), IntegerEntry(kH, lr)] ++ li), lo) | |
2320 | 2322 | } | |
2321 | 2323 | } | |
2322 | 2324 | } | |
2325 | 2327 | ||
2326 | 2328 | ||
2327 | 2329 | ||
2328 | - | @Callable( | |
2329 | - | func unstakeLandCallback ( | |
2330 | + | @Callable(gz) | |
2331 | + | func unstakeLandCallback (bJ,aw) = if ((toString(gz.caller) != k)) | |
2330 | 2332 | then throw("Permission denied") | |
2331 | 2333 | else { | |
2332 | - | let | |
2333 | - | let | |
2334 | - | $Tuple2([Burn(fromBase58String( | |
2335 | - | } | |
2336 | - | ||
2337 | - | ||
2338 | - | ||
2339 | - | @Callable( | |
2340 | - | func unstakeLandREADONLY ( | |
2341 | - | let | |
2342 | - | $Tuple2(nil, | |
2343 | - | } | |
2344 | - | ||
2345 | - | ||
2346 | - | ||
2347 | - | @Callable( | |
2348 | - | func unstakeLandsFinalizeCallback ( | |
2334 | + | let ls = kP(aw, bJ) | |
2335 | + | let lo = invoke(Q, "onStakeUnstakeLand", [aw], nil) | |
2336 | + | $Tuple2([Burn(fromBase58String(bJ), 1), DeleteEntry(bD(bJ)), DeleteEntry(bG(aJ, bJ, aw))], $Tuple5(ls._1, ls._2, ls._3, ls._4, lo)) | |
2337 | + | } | |
2338 | + | ||
2339 | + | ||
2340 | + | ||
2341 | + | @Callable(gz) | |
2342 | + | func unstakeLandREADONLY (bJ,aw) = { | |
2343 | + | let ls = kP(aw, bJ) | |
2344 | + | $Tuple2(nil, ls) | |
2345 | + | } | |
2346 | + | ||
2347 | + | ||
2348 | + | ||
2349 | + | @Callable(gz) | |
2350 | + | func unstakeLandsFinalizeCallback (aw) = if ((toString(gz.caller) != k)) | |
2349 | 2351 | then throw("Permission denied") | |
2350 | - | else $Tuple2([DeleteEntry( | |
2351 | - | ||
2352 | - | ||
2353 | - | ||
2354 | - | @Callable( | |
2355 | - | func convertUnstakedLands () = if ((size( | |
2352 | + | else $Tuple2([DeleteEntry(ag(aw)), DeleteEntry(ai(aw))], 0) | |
2353 | + | ||
2354 | + | ||
2355 | + | ||
2356 | + | @Callable(gz) | |
2357 | + | func convertUnstakedLands () = if ((size(gz.payments) != 1)) | |
2356 | 2358 | then throw("Exactly one payment required") | |
2357 | 2359 | else { | |
2358 | - | let | |
2359 | - | let | |
2360 | - | let | |
2361 | - | if (( | |
2362 | - | then throw((("NFT " + | |
2360 | + | let lj = value(gz.payments[0]) | |
2361 | + | let bB = value(lj.assetId) | |
2362 | + | let x = toString(gz.caller) | |
2363 | + | if ((lj.amount != 1)) | |
2364 | + | then throw((("NFT " + aJ) + " token should be attached as payment")) | |
2363 | 2365 | else { | |
2364 | - | let | |
2365 | - | if (( | |
2366 | + | let jn = value(assetInfo(bB)) | |
2367 | + | if ((jn.issuer != this)) | |
2366 | 2368 | then throw("Unknown issuer of token") | |
2367 | - | else if (!(contains( | |
2368 | - | then throw((("Only NFT " + | |
2369 | + | else if (!(contains(jn.name, aJ))) | |
2370 | + | then throw((("Only NFT " + aJ) + " tokens are accepted")) | |
2369 | 2371 | else { | |
2370 | - | let | |
2371 | - | let | |
2372 | - | let | |
2373 | - | let | |
2374 | - | let | |
2375 | - | let | |
2376 | - | let | |
2377 | - | if (( | |
2372 | + | let bJ = toBase58String(bB) | |
2373 | + | let jr = split(jn.description, "_") | |
2374 | + | let jd = ar(jr[U]) | |
2375 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2376 | + | let je = valueOrElse(getInteger(bE(aM, bJ)), 0) | |
2377 | + | let lt = ((jd * p) + ((((jd * hU) + je) * p) / 5)) | |
2378 | + | let lu = invoke(S, "requestAcresCallback", [lt], nil) | |
2379 | + | if ((lu == lu)) | |
2378 | 2380 | then { | |
2379 | - | let | |
2380 | - | if (( | |
2381 | - | then $Tuple2([Burn(fromBase58String( | |
2381 | + | let lv = invoke(addressFromStringValue(k), "stakeAcresCallback", [x], [AttachedPayment(aa, lt)]) | |
2382 | + | if ((lv == lv)) | |
2383 | + | then $Tuple2([Burn(fromBase58String(bJ), 1)], 0) | |
2382 | 2384 | else throw("Strict value is not equal to itself.") | |
2383 | 2385 | } | |
2384 | 2386 | else throw("Strict value is not equal to itself.") | |
2388 | 2390 | ||
2389 | 2391 | ||
2390 | 2392 | ||
2391 | - | @Callable( | |
2393 | + | @Callable(gz) | |
2392 | 2394 | func stakeDuck () = { | |
2393 | - | let | |
2394 | - | if ((size( | |
2395 | + | let li = kO(gz) | |
2396 | + | if ((size(gz.payments) != 1)) | |
2395 | 2397 | then throw("Exactly one payment required") | |
2396 | 2398 | else { | |
2397 | - | let | |
2398 | - | let | |
2399 | - | let | |
2400 | - | if (( | |
2401 | - | then throw((("NFT " + | |
2399 | + | let lj = value(gz.payments[0]) | |
2400 | + | let bB = value(lj.assetId) | |
2401 | + | let x = toString(gz.caller) | |
2402 | + | if ((lj.amount != 1)) | |
2403 | + | then throw((("NFT " + aK) + " token should be attached as payment")) | |
2402 | 2404 | else { | |
2403 | - | let | |
2404 | - | let | |
2405 | - | then ( | |
2405 | + | let jn = value(assetInfo(bB)) | |
2406 | + | let lw = if (if (c) | |
2407 | + | then (jn.issuer == this) | |
2406 | 2408 | else false) | |
2407 | - | then contains( | |
2409 | + | then contains(jn.name, aL) | |
2408 | 2410 | else false | |
2409 | - | if (if (if (( | |
2410 | - | then ( | |
2411 | + | if (if (if ((jn.issuer != dN)) | |
2412 | + | then (jn.issuer != dO) | |
2411 | 2413 | else false) | |
2412 | - | then !( | |
2414 | + | then !(lw) | |
2413 | 2415 | else false) | |
2414 | - | then throw((((("Unknown issuer of " + | |
2415 | - | else if (if (!(contains( | |
2416 | - | then !( | |
2416 | + | then throw((((("Unknown issuer of " + aK) + " or ") + aL) + " token")) | |
2417 | + | else if (if (!(contains(jn.name, aK))) | |
2418 | + | then !(lw) | |
2417 | 2419 | else false) | |
2418 | - | then throw((((("Only NFT " + | |
2420 | + | then throw((((("Only NFT " + aK) + " or ") + aL) + " tokens are accepted")) | |
2419 | 2421 | else { | |
2420 | - | let | |
2421 | - | let | |
2422 | - | if (isDefined(getInteger( | |
2423 | - | then throw((("NFT " + | |
2424 | - | else if (isDefined(getString( | |
2425 | - | then throw(("You already staked one duck: " + | |
2422 | + | let lx = toBase58String(bB) | |
2423 | + | let jo = bD(lx) | |
2424 | + | if (isDefined(getInteger(jo))) | |
2425 | + | then throw((("NFT " + jn.name) + " is already staked")) | |
2426 | + | else if (isDefined(getString(bT(x)))) | |
2427 | + | then throw(("You already staked one duck: " + jn.name)) | |
2426 | 2428 | else { | |
2427 | - | let | |
2428 | - | let | |
2429 | - | let | |
2430 | - | let | |
2431 | - | let | |
2432 | - | let | |
2433 | - | let | |
2434 | - | ([IntegerEntry( | |
2429 | + | let ly = bV(lx) | |
2430 | + | let co = getString(ly) | |
2431 | + | let hE = bU(lx) | |
2432 | + | let lz = getString(hE) | |
2433 | + | let iW = cQ(lx) | |
2434 | + | let iX = dx(valueOrElse(getInteger(cT(lx)), 0)) | |
2435 | + | let lA = valueOrElse(getInteger(iW), iX) | |
2436 | + | ([IntegerEntry(jo, lastBlock.timestamp), IntegerEntry(bG(aK, toBase58String(bB), x), lastBlock.timestamp), StringEntry(bS(lx), x), StringEntry(bT(x), lx)] ++ (if (isDefined(co)) | |
2435 | 2437 | then nil | |
2436 | - | else ([StringEntry( | |
2438 | + | else ([StringEntry(ly, aR)] ++ (if (isDefined(lz)) | |
2437 | 2439 | then nil | |
2438 | - | else (([StringEntry( | |
2440 | + | else (([StringEntry(hE, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iW, lA)) ++ li))))) | |
2439 | 2441 | } | |
2440 | 2442 | } | |
2441 | 2443 | } | |
2444 | 2446 | ||
2445 | 2447 | ||
2446 | 2448 | ||
2447 | - | @Callable( | |
2448 | - | func unstakeDuck ( | |
2449 | - | let | |
2450 | - | if ((size( | |
2449 | + | @Callable(gz) | |
2450 | + | func unstakeDuck (lx) = { | |
2451 | + | let li = kO(gz) | |
2452 | + | if ((size(gz.payments) != 0)) | |
2451 | 2453 | then throw("No payments required") | |
2452 | 2454 | else { | |
2453 | - | let | |
2454 | - | let | |
2455 | - | let | |
2456 | - | let | |
2457 | - | if (!(isDefined(getInteger( | |
2458 | - | then throw((("NFT " + | |
2459 | - | else if (!(isDefined(getString( | |
2460 | - | then throw((("The duck " + | |
2455 | + | let bB = fromBase58String(lx) | |
2456 | + | let x = toString(gz.caller) | |
2457 | + | let jn = value(assetInfo(bB)) | |
2458 | + | let jo = bD(lx) | |
2459 | + | if (!(isDefined(getInteger(jo)))) | |
2460 | + | then throw((("NFT " + jn.name) + " is not staked")) | |
2461 | + | else if (!(isDefined(getString(bT(x))))) | |
2462 | + | then throw((("The duck " + jn.name) + " is not staked")) | |
2461 | 2463 | else { | |
2462 | - | let | |
2463 | - | if (( | |
2464 | + | let jq = valueOrErrorMessage(getString(bS(lx)), (("NFT " + jn.name) + " is orphaned")) | |
2465 | + | if ((jq != x)) | |
2464 | 2466 | then throw("Staked NFT is not yours") | |
2465 | - | else if ( | |
2467 | + | else if (kl(lx)) | |
2466 | 2468 | then throw("unstakeDuck_checkTournament") | |
2467 | 2469 | else { | |
2468 | - | let | |
2469 | - | let | |
2470 | - | let | |
2471 | - | if (( | |
2472 | - | then throw((("Please heal your duck to " + toString( | |
2473 | - | else ([ScriptTransfer( | |
2470 | + | let iW = cQ(lx) | |
2471 | + | let iX = dx(valueOrElse(getInteger(cT(lx)), 0)) | |
2472 | + | let dI = valueOrElse(getInteger(iW), iX) | |
2473 | + | if ((iX > dI)) | |
2474 | + | then throw((("Please heal your duck to " + toString(iX)) + "hp before unstaking")) | |
2475 | + | else ([ScriptTransfer(gz.caller, 1, bB), DeleteEntry(jo), DeleteEntry(iW), DeleteEntry(bV(lx)), DeleteEntry(bS(lx)), DeleteEntry(bG(aK, lx, x)), DeleteEntry(bT(x))] ++ li) | |
2474 | 2476 | } | |
2475 | 2477 | } | |
2476 | 2478 | } | |
2478 | 2480 | ||
2479 | 2481 | ||
2480 | 2482 | ||
2481 | - | @Callable( | |
2482 | - | func unstakeDuckCallback ( | |
2483 | + | @Callable(gz) | |
2484 | + | func unstakeDuckCallback (bP,aw) = if ((toString(gz.caller) != k)) | |
2483 | 2485 | then throw("Permission denied") | |
2484 | 2486 | else { | |
2485 | - | let | |
2486 | - | $Tuple2([ScriptTransfer(addressFromStringValue( | |
2487 | - | } | |
2488 | - | ||
2489 | - | ||
2490 | - | ||
2491 | - | @Callable( | |
2492 | - | func unstakeDuckREADONLY ( | |
2493 | - | let | |
2494 | - | $Tuple2(nil, | |
2495 | - | } | |
2496 | - | ||
2497 | - | ||
2498 | - | ||
2499 | - | @Callable( | |
2500 | - | func claimRes ( | |
2501 | - | let | |
2502 | - | if ((size( | |
2487 | + | let ls = lb(aw, bP) | |
2488 | + | $Tuple2([ScriptTransfer(addressFromStringValue(aw), 1, fromBase58String(bP)), DeleteEntry(bD(bP)), DeleteEntry(bS(bP)), DeleteEntry(bG(aK, bP, aw)), DeleteEntry(bT(aw))], ls) | |
2489 | + | } | |
2490 | + | ||
2491 | + | ||
2492 | + | ||
2493 | + | @Callable(gz) | |
2494 | + | func unstakeDuckREADONLY (bP,aw) = { | |
2495 | + | let ls = lb(aw, bP) | |
2496 | + | $Tuple2(nil, ls) | |
2497 | + | } | |
2498 | + | ||
2499 | + | ||
2500 | + | ||
2501 | + | @Callable(gz) | |
2502 | + | func claimRes (eD,lB) = { | |
2503 | + | let li = kO(gz) | |
2504 | + | if ((size(gz.payments) != 0)) | |
2503 | 2505 | then throw("No payments required") | |
2504 | 2506 | else { | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | $Tuple2((((( | |
2509 | - | } | |
2510 | - | } | |
2511 | - | ||
2512 | - | ||
2513 | - | ||
2514 | - | @Callable( | |
2515 | - | func claimResToWH ( | |
2516 | - | let | |
2517 | - | if ((size( | |
2507 | + | let aw = toString(gz.originCaller) | |
2508 | + | let fe = js(aw, eD, eq, lB) | |
2509 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
2510 | + | $Tuple2(((((fe._1 ++ ka(bP, fraction(dj, eD, p))._1) :+ StringEntry(fe._2, makeString(fe._3, ":"))) :+ StringEntry(fe._4, makeString(fe._5, ":"))) ++ li), fe._3[bu]) | |
2511 | + | } | |
2512 | + | } | |
2513 | + | ||
2514 | + | ||
2515 | + | ||
2516 | + | @Callable(gz) | |
2517 | + | func claimResToWH (eD,lB) = { | |
2518 | + | let li = kO(gz) | |
2519 | + | if ((size(gz.payments) != 0)) | |
2518 | 2520 | then throw("No payments required") | |
2519 | 2521 | else { | |
2520 | - | let | |
2521 | - | let | |
2522 | - | $Tuple2((((( | |
2523 | - | } | |
2524 | - | } | |
2525 | - | ||
2526 | - | ||
2527 | - | ||
2528 | - | @Callable( | |
2529 | - | func flight ( | |
2530 | - | let | |
2531 | - | if ((size( | |
2522 | + | let aw = toString(gz.originCaller) | |
2523 | + | let fe = js(aw, eD, ep, lB) | |
2524 | + | $Tuple2(((((fe._1 ++ kb(aw, fraction(dj, eD, p))._1) :+ StringEntry(fe._2, makeString(fe._3, ":"))) :+ StringEntry(fe._4, makeString(fe._5, ":"))) ++ li), fe._5[bl]) | |
2525 | + | } | |
2526 | + | } | |
2527 | + | ||
2528 | + | ||
2529 | + | ||
2530 | + | @Callable(gz) | |
2531 | + | func flight (iL,iM) = { | |
2532 | + | let li = kO(gz) | |
2533 | + | if ((size(gz.payments) != 0)) | |
2532 | 2534 | then throw("No payments required") | |
2533 | 2535 | else { | |
2534 | - | let | |
2535 | - | let | |
2536 | - | let | |
2537 | - | let | |
2538 | - | let | |
2539 | - | let | |
2540 | - | let | |
2541 | - | if (( | |
2536 | + | let bX = toString(gz.caller) | |
2537 | + | let hh = iK(bX, iL, iM) | |
2538 | + | let iQ = hh._1 | |
2539 | + | let bP = hh._2 | |
2540 | + | let ly = bV(bP) | |
2541 | + | let jl = valueOrElse(getString(ly), aR) | |
2542 | + | let iS = hh._4 | |
2543 | + | if ((iS == jl)) | |
2542 | 2544 | then throw("You can't fly to the same location") | |
2543 | 2545 | else { | |
2544 | - | let | |
2545 | - | let | |
2546 | - | let | |
2547 | - | let | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | let | |
2552 | - | let | |
2553 | - | let | |
2554 | - | then if ( | |
2555 | - | then | |
2556 | - | else if (!( | |
2557 | - | then if (( | |
2558 | - | then $Tuple2( | |
2559 | - | else $Tuple2( | |
2560 | - | else if (( | |
2546 | + | let cz = split(iS, "_") | |
2547 | + | let lC = (cz[by] == "T") | |
2548 | + | let lD = (cz[by] == "D") | |
2549 | + | let gl = cV(bP) | |
2550 | + | let lE = valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2551 | + | let lF = ff(lE, hh._5) | |
2552 | + | let lG = lF._1 | |
2553 | + | let lH = lF._2 | |
2554 | + | let hw = lF._3 | |
2555 | + | let lI = if (!(ct(R, jl))) | |
2556 | + | then if (lC) | |
2557 | + | then cx(jl, iS, 5) | |
2558 | + | else if (!(lD)) | |
2559 | + | then if ((iQ > 0)) | |
2560 | + | then $Tuple2(iS, iQ) | |
2561 | + | else $Tuple2(jl, 0) | |
2562 | + | else if ((iQ > 0)) | |
2561 | 2563 | then { | |
2562 | - | let | |
2563 | - | if (( | |
2564 | - | then $Tuple2( | |
2564 | + | let al = invoke(this, "processDelivery", [bP], nil) | |
2565 | + | if ((al == al)) | |
2566 | + | then $Tuple2(jl, iQ) | |
2565 | 2567 | else throw("Strict value is not equal to itself.") | |
2566 | 2568 | } | |
2567 | - | else $Tuple2( | |
2568 | - | else if ( | |
2569 | - | then if (!( | |
2569 | + | else $Tuple2(jl, 0) | |
2570 | + | else if (cn(R, jl)) | |
2571 | + | then if (!(cn(R, iS))) | |
2570 | 2572 | then throw("Your duck is taking part in the tournament") | |
2571 | 2573 | else { | |
2572 | - | let | |
2573 | - | let | |
2574 | - | let | |
2575 | - | if (( | |
2576 | - | then | |
2577 | - | else if (( | |
2574 | + | let lJ = parseIntValue(cz[bz]) | |
2575 | + | let lK = split(jl, "_") | |
2576 | + | let cp = valueOrElse(getInteger(R, ca), 0) | |
2577 | + | if ((lJ != (parseIntValue(lK[bz]) + 1))) | |
2578 | + | then cx(jl, iS, 7) | |
2579 | + | else if ((iQ > 0)) | |
2578 | 2580 | then { | |
2579 | - | let | |
2580 | - | let | |
2581 | - | then invoke( | |
2581 | + | let lL = valueOrElse(getInteger(R, ce(cp, bP)), 0) | |
2582 | + | let lM = if ((lJ > lL)) | |
2583 | + | then invoke(R, "saveDuckResult", [bP, lJ], nil) | |
2582 | 2584 | else unit | |
2583 | - | if (( | |
2584 | - | then $Tuple2( | |
2585 | + | if ((lM == lM)) | |
2586 | + | then $Tuple2(iS, iQ) | |
2585 | 2587 | else throw("Strict value is not equal to itself.") | |
2586 | 2588 | } | |
2587 | - | else $Tuple2( | |
2589 | + | else $Tuple2(jl, 0) | |
2588 | 2590 | } | |
2589 | - | else throw(("Unknown curLocation:" + | |
2590 | - | let | |
2591 | - | let | |
2592 | - | $Tuple2(((([StringEntry( | |
2593 | - | then [StringEntry( | |
2594 | - | else nil)) ++ | |
2595 | - | then | |
2596 | - | else | |
2591 | + | else throw(("Unknown curLocation:" + jl)) | |
2592 | + | let lN = lI._1 | |
2593 | + | let lO = lI._2 | |
2594 | + | $Tuple2(((([StringEntry(ly, lN), StringEntry(gl, lG), IntegerEntry(cQ(bP), lO)] ++ li) ++ (if (lH) | |
2595 | + | then [StringEntry(db(bP), "0_0_0_0_0")] | |
2596 | + | else nil)) ++ ka(bP, if ((iQ > 0)) | |
2597 | + | then dk | |
2598 | + | else dl)._1), hh._3) | |
2597 | 2599 | } | |
2598 | 2600 | } | |
2599 | 2601 | } | |
2600 | 2602 | ||
2601 | 2603 | ||
2602 | 2604 | ||
2603 | - | @Callable(gy) | |
2604 | - | func heal (lO,lP,lQ) = { | |
2605 | - | let lh = kN(gy) | |
2606 | - | if (if (if ((0 > lO)) | |
2607 | - | then true | |
2608 | - | else (0 > lP)) | |
2605 | + | @Callable(gz) | |
2606 | + | func heal (lP,lQ,lR) = { | |
2607 | + | let li = kO(gz) | |
2608 | + | if (if (if ((0 > lP)) | |
2609 | 2609 | then true | |
2610 | 2610 | else (0 > lQ)) | |
2611 | + | then true | |
2612 | + | else (0 > lR)) | |
2611 | 2613 | then throw("Quantity cannot be negative") | |
2612 | 2614 | else { | |
2613 | - | let | |
2614 | - | if ( | |
2615 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
2616 | + | if (kl(bP)) | |
2615 | 2617 | then throw("heal_checkTournament") | |
2616 | 2618 | else { | |
2617 | - | let | |
2618 | - | let | |
2619 | - | let | |
2620 | - | let | |
2621 | - | if (( | |
2622 | - | then throw((("HP should be < " + toString( | |
2619 | + | let lS = [lP, lQ, lR] | |
2620 | + | let iW = cQ(bP) | |
2621 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
2622 | + | let lT = valueOrElse(getInteger(iW), iX) | |
2623 | + | if ((lT >= iX)) | |
2624 | + | then throw((("HP should be < " + toString(iX)) + " to heal")) | |
2623 | 2625 | else { | |
2624 | - | let | |
2625 | - | let | |
2626 | - | let | |
2626 | + | let hE = bU(bP) | |
2627 | + | let ii = hD(hE) | |
2628 | + | let lU = if ((ii[bw] == "")) | |
2627 | 2629 | then nil | |
2628 | - | else split_4C( | |
2629 | - | func | |
2630 | - | let | |
2631 | - | let | |
2632 | - | then parseIntValue( | |
2630 | + | else split_4C(ii[bw], "_") | |
2631 | + | func lV (eM,cw) = { | |
2632 | + | let an = eM._2 | |
2633 | + | let gY = if ((size(lU) > an)) | |
2634 | + | then parseIntValue(lU[an]) | |
2633 | 2635 | else 0 | |
2634 | - | if ((3 > | |
2636 | + | if ((3 > an)) | |
2635 | 2637 | then { | |
2636 | - | let | |
2637 | - | if (( | |
2638 | - | then throw(((("You have only " + toString( | |
2639 | - | else $Tuple3(( | |
2638 | + | let lW = lS[an] | |
2639 | + | if ((lW > gY)) | |
2640 | + | then throw(((("You have only " + toString(gY)) + " of ") + bb[an])) | |
2641 | + | else $Tuple3((eM._1 :+ toString((gY - lW))), (an + 1), (eM._3 + (parseIntValue(split(cw, "_")[bg]) * lW))) | |
2640 | 2642 | } | |
2641 | - | else $Tuple3(( | |
2643 | + | else $Tuple3((eM._1 :+ toString(gY)), (an + 1), eM._3) | |
2642 | 2644 | } | |
2643 | 2645 | ||
2644 | - | let | |
2645 | - | let | |
2646 | - | let | |
2647 | - | let | |
2648 | - | func | |
2649 | - | then | |
2650 | - | else | |
2651 | - | ||
2652 | - | func | |
2653 | - | then | |
2646 | + | let fe = { | |
2647 | + | let eO = be | |
2648 | + | let eP = size(eO) | |
2649 | + | let eQ = $Tuple3(nil, 0, 0) | |
2650 | + | func eR (eS,eT) = if ((eT >= eP)) | |
2651 | + | then eS | |
2652 | + | else lV(eS, eO[eT]) | |
2653 | + | ||
2654 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2655 | + | then eS | |
2654 | 2656 | else throw("List size exceeds 50") | |
2655 | 2657 | ||
2656 | - | | |
2658 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
2657 | 2659 | } | |
2658 | - | let | |
2659 | - | $Tuple2((([IntegerEntry( | |
2660 | + | let lX = min([iX, (lT + fe._3)]) | |
2661 | + | $Tuple2((([IntegerEntry(iW, lX), StringEntry(hE, makeString_2C([ii[bt], ii[bu], ii[bv], makeString(fe._1, "_")], ":"))] ++ li) ++ ka(bP, (du * ((lP + lQ) + lR)))._1), lX) | |
2660 | 2662 | } | |
2661 | 2663 | } | |
2662 | 2664 | } | |
2664 | 2666 | ||
2665 | 2667 | ||
2666 | 2668 | ||
2667 | - | @Callable( | |
2669 | + | @Callable(gz) | |
2668 | 2670 | func healES () = { | |
2669 | - | let | |
2670 | - | if ((size( | |
2671 | + | let li = kO(gz) | |
2672 | + | if ((size(gz.payments) != 1)) | |
2671 | 2673 | then throw("Exactly one payment required") | |
2672 | 2674 | else { | |
2673 | - | let | |
2674 | - | if (( | |
2675 | + | let lj = value(gz.payments[0]) | |
2676 | + | if ((lj.assetId != i)) | |
2675 | 2677 | then throw("Allowed USDT payment only!") | |
2676 | 2678 | else { | |
2677 | - | let | |
2678 | - | if ( | |
2679 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
2680 | + | if (kl(bP)) | |
2679 | 2681 | then throw("healES_checkTournament") | |
2680 | 2682 | else { | |
2681 | - | let | |
2682 | - | let | |
2683 | - | let | |
2684 | - | if (( | |
2683 | + | let iW = cQ(bP) | |
2684 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
2685 | + | let lT = valueOrElse(getInteger(iW), iX) | |
2686 | + | if ((lT > 0)) | |
2685 | 2687 | then throw("HP should be 0 to call Emergency Service") | |
2686 | 2688 | else { | |
2687 | - | let | |
2688 | - | let | |
2689 | - | let | |
2689 | + | let hE = bU(bP) | |
2690 | + | let ii = hD(hE) | |
2691 | + | let lU = if ((ii[bw] == "")) | |
2690 | 2692 | then nil | |
2691 | - | else split_4C( | |
2692 | - | let | |
2693 | - | then parseIntValue( | |
2693 | + | else split_4C(ii[bw], "_") | |
2694 | + | let lY = if ((size(lU) > 0)) | |
2695 | + | then parseIntValue(lU[0]) | |
2694 | 2696 | else 0 | |
2695 | - | let | |
2696 | - | then parseIntValue( | |
2697 | + | let lZ = if ((size(lU) > 1)) | |
2698 | + | then parseIntValue(lU[1]) | |
2697 | 2699 | else 0 | |
2698 | - | let | |
2699 | - | then parseIntValue( | |
2700 | + | let ma = if ((size(lU) > 2)) | |
2701 | + | then parseIntValue(lU[2]) | |
2700 | 2702 | else 0 | |
2701 | - | if (if (if ((lX > 0)) | |
2702 | - | then true | |
2703 | - | else (lY > 0)) | |
2703 | + | if (if (if ((lY > 0)) | |
2704 | 2704 | then true | |
2705 | 2705 | else (lZ > 0)) | |
2706 | + | then true | |
2707 | + | else (ma > 0)) | |
2706 | 2708 | then throw("You have to use own Medical Kit") | |
2707 | 2709 | else { | |
2708 | - | let | |
2709 | - | let | |
2710 | - | then split_4C(value( | |
2710 | + | let mb = getString(O, bY()) | |
2711 | + | let mc = if (isDefined(mb)) | |
2712 | + | then split_4C(value(mb), "_") | |
2711 | 2713 | else nil | |
2712 | - | let | |
2713 | - | then parseIntValue( | |
2714 | + | let md = if ((size(mc) > 0)) | |
2715 | + | then parseIntValue(mc[0]) | |
2714 | 2716 | else 0 | |
2715 | - | if ((0 >= | |
2717 | + | if ((0 >= md)) | |
2716 | 2718 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2717 | 2719 | else { | |
2718 | - | let | |
2719 | - | let | |
2720 | - | let | |
2721 | - | let | |
2722 | - | let | |
2723 | - | if (( | |
2724 | - | then throw(("Payment attached should be " + toString( | |
2720 | + | let lX = (lT + parseIntValue(split(be[0], "_")[bg])) | |
2721 | + | let me = makeString([toString((md - 1)), removeByIndex(mc, 0)], "_") | |
2722 | + | let cw = split(be[0], "_") | |
2723 | + | let mf = cv(cw) | |
2724 | + | let mg = fraction((mf * aT), aS, (p * bj)) | |
2725 | + | if ((lj.amount != mg)) | |
2726 | + | then throw(("Payment attached should be " + toString(mg))) | |
2725 | 2727 | else { | |
2726 | - | let | |
2727 | - | $Tuple2((( | |
2728 | + | let fe = aj(invoke(O, "updateEsStorage", [me], [AttachedPayment(i, mg)])) | |
2729 | + | $Tuple2(((li :+ IntegerEntry(iW, lX)) ++ ka(bP, do)._1), fe) | |
2728 | 2730 | } | |
2729 | 2731 | } | |
2730 | 2732 | } | |
2736 | 2738 | ||
2737 | 2739 | ||
2738 | 2740 | ||
2739 | - | @Callable( | |
2740 | - | func updateBackpack ( | |
2741 | + | @Callable(gz) | |
2742 | + | func updateBackpack (bP,mh) = if ((gz.caller != O)) | |
2741 | 2743 | then throw("permission denied") | |
2742 | - | else $Tuple2([StringEntry( | |
2743 | - | ||
2744 | - | ||
2745 | - | ||
2746 | - | @Callable( | |
2744 | + | else $Tuple2([StringEntry(bU(bP), mh)], mh) | |
2745 | + | ||
2746 | + | ||
2747 | + | ||
2748 | + | @Callable(gz) | |
2747 | 2749 | func commitForRandom () = { | |
2748 | - | let | |
2749 | - | let | |
2750 | - | let | |
2751 | - | $Tuple2(([IntegerEntry( | |
2752 | - | } | |
2753 | - | ||
2754 | - | ||
2755 | - | ||
2756 | - | @Callable( | |
2757 | - | func revealRandom ( | |
2758 | - | let | |
2759 | - | let | |
2760 | - | let | |
2761 | - | let | |
2762 | - | if (( | |
2763 | - | then throw(("Random number is not ready yet, wait until height = " + toString( | |
2750 | + | let li = kO(gz) | |
2751 | + | let mi = (height + ab) | |
2752 | + | let aw = toString(gz.caller) | |
2753 | + | $Tuple2(([IntegerEntry(ac(aw), mi)] ++ li), mi) | |
2754 | + | } | |
2755 | + | ||
2756 | + | ||
2757 | + | ||
2758 | + | @Callable(gz) | |
2759 | + | func revealRandom (aE) = { | |
2760 | + | let li = kO(gz) | |
2761 | + | let aw = toString(gz.caller) | |
2762 | + | let mj = ac(aw) | |
2763 | + | let mi = valueOrErrorMessage(getInteger(mj), "You have to commitForRandom() first!") | |
2764 | + | if ((mi > height)) | |
2765 | + | then throw(("Random number is not ready yet, wait until height = " + toString(mi))) | |
2764 | 2766 | else { | |
2765 | - | let | |
2766 | - | let | |
2767 | - | let | |
2768 | - | $Tuple2(([DeleteEntry( | |
2769 | - | } | |
2770 | - | } | |
2771 | - | ||
2772 | - | ||
2773 | - | ||
2774 | - | @Callable( | |
2767 | + | let aG = value(value(blockInfoByHeight(mi)).vrf) | |
2768 | + | let aF = toBytes(valueOrElse(getString(av(aw)), "")) | |
2769 | + | let mk = aD(aE, aF, aG) | |
2770 | + | $Tuple2(([DeleteEntry(mj)] ++ li), mk) | |
2771 | + | } | |
2772 | + | } | |
2773 | + | ||
2774 | + | ||
2775 | + | ||
2776 | + | @Callable(gz) | |
2775 | 2777 | func buySLand () = { | |
2776 | - | let | |
2777 | - | if ((size( | |
2778 | + | let li = kO(gz) | |
2779 | + | if ((size(gz.payments) != 1)) | |
2778 | 2780 | then throw("Exactly one payment required") | |
2779 | 2781 | else { | |
2780 | - | let | |
2781 | - | if (( | |
2782 | + | let lj = value(gz.payments[0]) | |
2783 | + | if ((lj.assetId != i)) | |
2782 | 2784 | then throw("Allowed USDT payment only!") | |
2783 | - | else if (( | |
2784 | - | then throw(("Payment attached should be " + toString( | |
2785 | + | else if ((lj.amount != dU)) | |
2786 | + | then throw(("Payment attached should be " + toString(dU))) | |
2785 | 2787 | else { | |
2786 | - | let | |
2787 | - | let | |
2788 | - | $Tuple2(((( | |
2788 | + | let fe = iD(gz.caller, gz.transactionId) | |
2789 | + | let ml = am(invoke(S, "burnAcres", [dW], nil)) | |
2790 | + | $Tuple2((((fe._1 :+ ScriptTransfer(O, lj.amount, i)) ++ kb(toString(gz.caller), dq)._1) ++ li), $Tuple2(fe._2._1, ml)) | |
2789 | 2791 | } | |
2790 | 2792 | } | |
2791 | 2793 | } | |
2792 | 2794 | ||
2793 | 2795 | ||
2794 | 2796 | ||
2795 | - | @Callable( | |
2796 | - | func expedition ( | |
2797 | - | let | |
2798 | - | if ((size( | |
2797 | + | @Callable(gz) | |
2798 | + | func expedition (iL,iM) = { | |
2799 | + | let li = kO(gz) | |
2800 | + | if ((size(gz.payments) != 0)) | |
2799 | 2801 | then throw("No payments required") | |
2800 | 2802 | else { | |
2801 | - | let | |
2802 | - | let | |
2803 | - | let | |
2804 | - | let | |
2805 | - | let | |
2806 | - | let | |
2807 | - | let | |
2808 | - | let | |
2809 | - | let | |
2810 | - | let | |
2811 | - | let | |
2812 | - | let | |
2813 | - | let | |
2814 | - | let | |
2815 | - | let | |
2816 | - | let | |
2817 | - | let | |
2818 | - | then $Tuple3([IntegerEntry( | |
2819 | - | else $Tuple3(( | |
2820 | - | then [StringEntry( | |
2821 | - | else ((((nil :+ StringEntry( | |
2822 | - | if ( | |
2803 | + | let bX = toString(gz.caller) | |
2804 | + | let hh = iK(bX, iL, iM) | |
2805 | + | let bP = hh._2 | |
2806 | + | let iW = cQ(bP) | |
2807 | + | let hE = bU(bP) | |
2808 | + | let ii = hD(hE) | |
2809 | + | let jL = split(ii[bv], "_") | |
2810 | + | let jN = makeString(eY(true, jL, dT), "_") | |
2811 | + | let gl = cV(bP) | |
2812 | + | let lE = valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2813 | + | let mm = ff(lE, hh._5) | |
2814 | + | let lG = mm._1 | |
2815 | + | let lH = mm._2 | |
2816 | + | let hw = mm._3 | |
2817 | + | let mn = iD(gz.caller, gz.transactionId) | |
2818 | + | let iJ = mn._2._1 | |
2819 | + | let fe = if ((0 >= hh._1)) | |
2820 | + | then $Tuple3([IntegerEntry(iW, 0), StringEntry(gl, lG)], "", 0) | |
2821 | + | else $Tuple3((mn._1 ++ (if (lH) | |
2822 | + | then [StringEntry(db(bP), "0_0_0_0_0")] | |
2823 | + | else ((((nil :+ StringEntry(bV(bP), makeString([mn._2._2, "L", iJ], "_"))) :+ IntegerEntry(iW, hh._1)) :+ StringEntry(gl, lG)) :+ StringEntry(hE, makeString([ii[bt], ii[bu], jN, ii[bw]], ":"))))), iJ, hh._3) | |
2824 | + | if (kl(bP)) | |
2823 | 2825 | then throw("expedition_checkTournament") | |
2824 | 2826 | else { | |
2825 | - | let | |
2826 | - | $Tuple2((( | |
2827 | + | let ml = am(invoke(S, "burnAcres", [dW], nil)) | |
2828 | + | $Tuple2(((fe._1 ++ ka(bP, dq)._1) ++ li), $Tuple3(fe._2, fe._3, ml)) | |
2827 | 2829 | } | |
2828 | 2830 | } | |
2829 | 2831 | } | |
2830 | 2832 | ||
2831 | 2833 | ||
2832 | 2834 | ||
2833 | - | @Callable( | |
2835 | + | @Callable(gz) | |
2834 | 2836 | func buySLandForAcres () = { | |
2835 | - | let | |
2836 | - | if ((size( | |
2837 | + | let li = kO(gz) | |
2838 | + | if ((size(gz.payments) != 1)) | |
2837 | 2839 | then throw("exactly 1 payment must be attached") | |
2838 | 2840 | else { | |
2839 | - | let | |
2840 | - | let | |
2841 | - | if (if (!(isDefined( | |
2841 | + | let lj = gz.payments[0] | |
2842 | + | let fl = lj.amount | |
2843 | + | if (if (!(isDefined(lj.assetId))) | |
2842 | 2844 | then true | |
2843 | - | else (value( | |
2845 | + | else (value(lj.assetId) != aa)) | |
2844 | 2846 | then throw("ACRES payments only!") | |
2845 | - | else if (( | |
2846 | - | then throw(("Payment attached should be " + toString( | |
2847 | + | else if ((fl != dW)) | |
2848 | + | then throw(("Payment attached should be " + toString(dW))) | |
2847 | 2849 | else { | |
2848 | - | let | |
2849 | - | let | |
2850 | - | $Tuple2((( | |
2850 | + | let fe = iD(gz.caller, gz.transactionId) | |
2851 | + | let ml = am(invoke(S, "burnAcres", [dW], [AttachedPayment(aa, fl)])) | |
2852 | + | $Tuple2(((fe._1 ++ kb(toString(gz.caller), dq)._1) ++ li), $Tuple2(fe._2._1, ml)) | |
2851 | 2853 | } | |
2852 | 2854 | } | |
2853 | 2855 | } | |
2854 | 2856 | ||
2855 | 2857 | ||
2856 | 2858 | ||
2857 | - | @Callable( | |
2858 | - | func upgradeInfra ( | |
2859 | - | let | |
2860 | - | if ((size( | |
2859 | + | @Callable(gz) | |
2860 | + | func upgradeInfra (bJ) = { | |
2861 | + | let li = kO(gz) | |
2862 | + | if ((size(gz.payments) != 0)) | |
2861 | 2863 | then throw("No payments required") | |
2862 | 2864 | else { | |
2863 | - | let | |
2864 | - | let | |
2865 | - | $Tuple2((( | |
2866 | - | } | |
2867 | - | } | |
2868 | - | ||
2869 | - | ||
2870 | - | ||
2871 | - | @Callable( | |
2872 | - | func activateArtifact ( | |
2873 | - | let | |
2874 | - | if ((size( | |
2865 | + | let fe = jF(true, gz.caller, 0, bJ) | |
2866 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
2867 | + | $Tuple2(((fe._1 ++ li) ++ ka(bP, fraction(dr, fe._3, p))._1), fe._2) | |
2868 | + | } | |
2869 | + | } | |
2870 | + | ||
2871 | + | ||
2872 | + | ||
2873 | + | @Callable(gz) | |
2874 | + | func activateArtifact (mo,mp) = { | |
2875 | + | let li = kO(gz) | |
2876 | + | if ((size(gz.payments) != 0)) | |
2875 | 2877 | then throw("No payments required") | |
2876 | 2878 | else { | |
2877 | - | let | |
2878 | - | let | |
2879 | - | let | |
2880 | - | if (("PRESALE" == | |
2881 | - | then | |
2882 | - | else if (("ONBOARD" == | |
2883 | - | then | |
2879 | + | let aw = toString(gz.caller) | |
2880 | + | let fe = { | |
2881 | + | let h = mo | |
2882 | + | if (("PRESALE" == h)) | |
2883 | + | then kj(aw, mp) | |
2884 | + | else if (("ONBOARD" == h)) | |
2885 | + | then kc(aw) | |
2884 | 2886 | else throw("Unknown artifact") | |
2885 | 2887 | } | |
2886 | - | ( | |
2887 | - | } | |
2888 | - | } | |
2889 | - | ||
2890 | - | ||
2891 | - | ||
2892 | - | @Callable( | |
2893 | - | func mergeLands ( | |
2894 | - | let | |
2895 | - | if ((size( | |
2888 | + | (fe ++ li) | |
2889 | + | } | |
2890 | + | } | |
2891 | + | ||
2892 | + | ||
2893 | + | ||
2894 | + | @Callable(gz) | |
2895 | + | func mergeLands (kp) = { | |
2896 | + | let li = kO(gz) | |
2897 | + | if ((size(gz.payments) != 0)) | |
2896 | 2898 | then throw("No payments required") | |
2897 | 2899 | else { | |
2898 | - | let | |
2899 | - | $Tuple2((( | |
2900 | - | } | |
2901 | - | } | |
2902 | - | ||
2903 | - | ||
2904 | - | ||
2905 | - | @Callable( | |
2906 | - | func cargoExchange ( | |
2907 | - | let | |
2908 | - | if ((size( | |
2900 | + | let fe = kN(toString(gz.caller), kp) | |
2901 | + | $Tuple2(((fe._1 ++ li) ++ kb(toString(gz.caller), ds)._1), fe._2) | |
2902 | + | } | |
2903 | + | } | |
2904 | + | ||
2905 | + | ||
2906 | + | ||
2907 | + | @Callable(gz) | |
2908 | + | func cargoExchange (mq,bJ) = { | |
2909 | + | let li = kO(gz) | |
2910 | + | if ((size(gz.payments) != 0)) | |
2909 | 2911 | then throw("No payments required") | |
2910 | 2912 | else { | |
2911 | - | let | |
2912 | - | let | |
2913 | - | let | |
2914 | - | let | |
2915 | - | if (!(isDefined(getInteger( | |
2916 | - | then throw(( | |
2913 | + | let ih = split_4C(mq, ":") | |
2914 | + | let aw = toString(gz.originCaller) | |
2915 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
2916 | + | let jo = bD(bJ) | |
2917 | + | if (!(isDefined(getInteger(jo)))) | |
2918 | + | then throw((jn.name + " is not staked")) | |
2917 | 2919 | else { | |
2918 | - | let | |
2919 | - | if (( | |
2920 | - | then throw(( | |
2920 | + | let jq = valueOrErrorMessage(getString(bA(bJ)), (("NFT " + jn.name) + " is orphaned")) | |
2921 | + | if ((jq != aw)) | |
2922 | + | then throw((aJ + " is not yours")) | |
2921 | 2923 | else { | |
2922 | - | let | |
2923 | - | let | |
2924 | - | let | |
2925 | - | let | |
2926 | - | let | |
2927 | - | if (( | |
2928 | - | then throw((("Duck location type is " + | |
2929 | - | else if (( | |
2930 | - | then throw(("Duck should be on the land " + | |
2924 | + | let hT = (ar(split(jn.description, "_")[U]) / q) | |
2925 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2926 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
2927 | + | let jl = valueOrElse(getString(bV(bP)), aR) | |
2928 | + | let cq = split(value(jl), "_") | |
2929 | + | if ((cq[by] != "L")) | |
2930 | + | then throw((("Duck location type is " + cq[by]) + ", but should be L")) | |
2931 | + | else if ((cq[bz] != bJ)) | |
2932 | + | then throw(("Duck should be on the land " + bJ)) | |
2931 | 2933 | else { | |
2932 | - | let | |
2933 | - | let | |
2934 | - | let | |
2935 | - | let | |
2936 | - | let | |
2937 | - | let | |
2938 | - | let | |
2939 | - | let | |
2940 | - | ([StringEntry( | |
2934 | + | let hS = bI(bJ) | |
2935 | + | let hJ = hR(hS, hT, hU) | |
2936 | + | let hE = bU(bP) | |
2937 | + | let ii = hD(hE) | |
2938 | + | let fe = ig(ih, hJ, ii) | |
2939 | + | let ia = split(hJ[bo], "_") | |
2940 | + | let jC = (parseIntValue(ia[bq]) + fe._7) | |
2941 | + | let jD = (parseIntValue(ia[br]) - fe._7) | |
2942 | + | ([StringEntry(hE, makeString_2C([ii[bt], fe._4, fe._5, fe._6], ":")), StringEntry(hS, makeString_2C([hJ[bk], fe._1, fe._2, fe._3, makeString([ia[bp], toString(jC), toString(jD), ia[bs]], "_")], ":"))] ++ li) | |
2941 | 2943 | } | |
2942 | 2944 | } | |
2943 | 2945 | } | |
2946 | 2948 | ||
2947 | 2949 | ||
2948 | 2950 | ||
2949 | - | @Callable( | |
2950 | - | func saveWarehouse ( | |
2951 | + | @Callable(gz) | |
2952 | + | func saveWarehouse (hW,bJ) = if ((gz.caller != O)) | |
2951 | 2953 | then throw("Access denied") | |
2952 | 2954 | else { | |
2953 | - | let | |
2954 | - | let | |
2955 | - | if ((size( | |
2955 | + | let hS = bI(bJ) | |
2956 | + | let hX = split_4C(hW, ":") | |
2957 | + | if ((size(hX) != 5)) | |
2956 | 2958 | then throw("warehouse string should contain 4 ':' separators") | |
2957 | 2959 | else { | |
2958 | - | let | |
2959 | - | let | |
2960 | - | let | |
2961 | - | let | |
2962 | - | if ((0 > | |
2960 | + | let mr = split(hX[bo], "_")[bp] | |
2961 | + | let jC = hI(hX) | |
2962 | + | let ms = hG(hX[bk]) | |
2963 | + | let jD = ((ms - parseIntValue(mr)) - jC) | |
2964 | + | if ((0 > jD)) | |
2963 | 2965 | then throw("Operation leads to negative free warehouse space") | |
2964 | 2966 | else { | |
2965 | - | let | |
2966 | - | $Tuple2([StringEntry( | |
2967 | + | let mt = makeString_2C([hX[bk], hX[bl], hX[bm], hX[bn], makeString([mr, toString(jC), toString(jD), toString(ms)], "_")], ":") | |
2968 | + | $Tuple2([StringEntry(hS, mt)], mt) | |
2967 | 2969 | } | |
2968 | 2970 | } | |
2969 | 2971 | } | |
2970 | 2972 | ||
2971 | 2973 | ||
2972 | 2974 | ||
2973 | - | @Callable( | |
2974 | - | func setCustomName ( | |
2975 | - | let | |
2976 | - | if ((size( | |
2975 | + | @Callable(gz) | |
2976 | + | func setCustomName (bB,kz,bF) = { | |
2977 | + | let li = kO(gz) | |
2978 | + | if ((size(gz.payments) != 1)) | |
2977 | 2979 | then throw("Exactly one payment required") | |
2978 | 2980 | else { | |
2979 | - | let | |
2980 | - | if (( | |
2981 | + | let lj = value(gz.payments[0]) | |
2982 | + | if ((lj.assetId != i)) | |
2981 | 2983 | then throw("Allowed USDT payment only!") | |
2982 | - | else if (( | |
2983 | - | then throw(("Payment should be " + toString( | |
2984 | - | else if (contains( | |
2985 | - | then throw(("Name should not contain '__': " + | |
2986 | - | else if ((size( | |
2987 | - | then throw(("Name too long, maxLength=" + toString( | |
2984 | + | else if ((lj.amount != dQ)) | |
2985 | + | then throw(("Payment should be " + toString(dQ))) | |
2986 | + | else if (contains(kz, "__")) | |
2987 | + | then throw(("Name should not contain '__': " + kz)) | |
2988 | + | else if ((size(kz) > dR)) | |
2989 | + | then throw(("Name too long, maxLength=" + toString(dR))) | |
2988 | 2990 | else { | |
2989 | - | let | |
2990 | - | let | |
2991 | - | let | |
2992 | - | if (("ACCOUNT" == | |
2991 | + | let aw = toString(gz.originCaller) | |
2992 | + | let mu = { | |
2993 | + | let h = bF | |
2994 | + | if (("ACCOUNT" == h)) | |
2993 | 2995 | then { | |
2994 | - | let | |
2995 | - | let | |
2996 | - | if (isDefined( | |
2997 | - | then throw(("Name already registered: " + | |
2996 | + | let mv = em(kz) | |
2997 | + | let mw = getString(mv) | |
2998 | + | if (isDefined(mw)) | |
2999 | + | then throw(("Name already registered: " + kz)) | |
2998 | 3000 | else { | |
2999 | - | let | |
3000 | - | let | |
3001 | - | let | |
3002 | - | then [DeleteEntry( | |
3001 | + | let mx = bM(aw) | |
3002 | + | let my = getString(mx) | |
3003 | + | let mz = if (isDefined(my)) | |
3004 | + | then [DeleteEntry(em(value(my)))] | |
3003 | 3005 | else nil | |
3004 | - | ((( | |
3006 | + | (((mz :+ StringEntry(mx, kz)) :+ StringEntry(mv, aw)) ++ kb(aw, dp)._1) | |
3005 | 3007 | } | |
3006 | 3008 | } | |
3007 | - | else if (("LAND" == | |
3009 | + | else if (("LAND" == h)) | |
3008 | 3010 | then { | |
3009 | - | let | |
3010 | - | let | |
3011 | - | if (!(isDefined(getInteger( | |
3012 | - | then throw(( | |
3011 | + | let jn = value(assetInfo(fromBase58String(bB))) | |
3012 | + | let jo = bD(bB) | |
3013 | + | if (!(isDefined(getInteger(jo)))) | |
3014 | + | then throw((jn.name + " is not staked")) | |
3013 | 3015 | else { | |
3014 | - | let | |
3015 | - | if (( | |
3016 | - | then throw(( | |
3016 | + | let jq = valueOrErrorMessage(getString(bA(bB)), (("NFT " + jn.name) + " is orphaned")) | |
3017 | + | if ((jq != aw)) | |
3018 | + | then throw((aJ + " is not yours")) | |
3017 | 3019 | else { | |
3018 | - | let | |
3019 | - | let | |
3020 | - | if (isDefined( | |
3021 | - | then throw(("Name already registered: " + | |
3020 | + | let mv = ef(kz) | |
3021 | + | let mw = getString(mv) | |
3022 | + | if (isDefined(mw)) | |
3023 | + | then throw(("Name already registered: " + kz)) | |
3022 | 3024 | else { | |
3023 | - | let | |
3024 | - | let | |
3025 | - | let | |
3026 | - | then [DeleteEntry( | |
3025 | + | let mA = bC(bB) | |
3026 | + | let my = getString(mA) | |
3027 | + | let mz = if (isDefined(my)) | |
3028 | + | then [DeleteEntry(ef(value(my)))] | |
3027 | 3029 | else nil | |
3028 | - | ((( | |
3030 | + | (((mz :+ StringEntry(mA, kz)) :+ StringEntry(mv, bB)) ++ kb(aw, dp)._1) | |
3029 | 3031 | } | |
3030 | 3032 | } | |
3031 | 3033 | } | |
3032 | 3034 | } | |
3033 | - | else if (("DUCK" == | |
3035 | + | else if (("DUCK" == h)) | |
3034 | 3036 | then { | |
3035 | - | let | |
3036 | - | let | |
3037 | - | if (if (!(isDefined(getInteger( | |
3037 | + | let jn = value(assetInfo(fromBase58String(bB))) | |
3038 | + | let jo = bD(bB) | |
3039 | + | if (if (!(isDefined(getInteger(jo)))) | |
3038 | 3040 | then true | |
3039 | - | else !(isDefined(getString( | |
3040 | - | then throw(( | |
3041 | + | else !(isDefined(getString(bT(aw))))) | |
3042 | + | then throw((jn.name + " is not staked")) | |
3041 | 3043 | else { | |
3042 | - | let | |
3043 | - | if (( | |
3044 | - | then throw(( | |
3044 | + | let jq = valueOrErrorMessage(getString(bS(bB)), (("NFT " + jn.name) + " is orphaned")) | |
3045 | + | if ((jq != aw)) | |
3046 | + | then throw((aK + " is not yours")) | |
3045 | 3047 | else { | |
3046 | - | let | |
3047 | - | let | |
3048 | - | if (isDefined( | |
3049 | - | then throw(("Name already registered: " + | |
3048 | + | let mv = el(kz) | |
3049 | + | let mw = getString(mv) | |
3050 | + | if (isDefined(mw)) | |
3051 | + | then throw(("Name already registered: " + kz)) | |
3050 | 3052 | else { | |
3051 | - | let | |
3052 | - | let | |
3053 | - | let | |
3054 | - | then [DeleteEntry( | |
3053 | + | let mA = bL(bB) | |
3054 | + | let my = getString(mA) | |
3055 | + | let mz = if (isDefined(my)) | |
3056 | + | then [DeleteEntry(el(value(my)))] | |
3055 | 3057 | else nil | |
3056 | - | ((( | |
3058 | + | (((mz :+ StringEntry(mA, kz)) :+ StringEntry(mv, bB)) ++ ka(bB, dp)._1) | |
3057 | 3059 | } | |
3058 | 3060 | } | |
3059 | 3061 | } | |
3060 | 3062 | } | |
3061 | 3063 | else throw("Unknown entity type") | |
3062 | 3064 | } | |
3063 | - | $Tuple2((( | |
3065 | + | $Tuple2(((mu :+ ScriptTransfer(O, lj.amount, i)) ++ li), 0) | |
3064 | 3066 | } | |
3065 | 3067 | } | |
3066 | 3068 | } | |
3067 | 3069 | ||
3068 | 3070 | ||
3069 | 3071 | ||
3070 | - | @Callable( | |
3071 | - | func setReferrals ( | |
3072 | + | @Callable(gz) | |
3073 | + | func setReferrals (mB,mC) = if ((gz.callerPublicKey != g)) | |
3072 | 3074 | then throw("Permission denied") | |
3073 | 3075 | else { | |
3074 | - | let | |
3075 | - | if ((size( | |
3076 | + | let li = kO(gz) | |
3077 | + | if ((size(gz.payments) != 0)) | |
3076 | 3078 | then throw("No payments required") | |
3077 | - | else if (!(isDefined(addressFromString( | |
3078 | - | then throw(("Invalid address: " + | |
3079 | + | else if (!(isDefined(addressFromString(mB)))) | |
3080 | + | then throw(("Invalid address: " + mB)) | |
3079 | 3081 | else { | |
3080 | - | let | |
3081 | - | if (!(isDefined( | |
3082 | - | then throw(("Invalid address: " + | |
3082 | + | let mD = addressFromString(mC) | |
3083 | + | if (!(isDefined(mD))) | |
3084 | + | then throw(("Invalid address: " + mC)) | |
3083 | 3085 | else { | |
3084 | - | let | |
3085 | - | if (!(isDefined( | |
3086 | + | let mE = getString(av(mB)) | |
3087 | + | if (!(isDefined(mE))) | |
3086 | 3088 | then throw("oldPlayer didn't do any tx in game") | |
3087 | - | else if ((0 >= wavesBalance(value( | |
3089 | + | else if ((0 >= wavesBalance(value(mD)).available)) | |
3088 | 3090 | then throw("newPlayer has no WAVES") | |
3089 | 3091 | else { | |
3090 | - | let | |
3091 | - | let | |
3092 | - | let | |
3093 | - | then split_4C(value( | |
3092 | + | let mF = en() | |
3093 | + | let mG = getString(mF) | |
3094 | + | let mH = if (isDefined(mG)) | |
3095 | + | then split_4C(value(mG), "_") | |
3094 | 3096 | else nil | |
3095 | - | if (containsElement( | |
3096 | - | then throw(( | |
3097 | + | if (containsElement(mH, mC)) | |
3098 | + | then throw((mC + " is not newbie (already has referrals)")) | |
3097 | 3099 | else { | |
3098 | - | let | |
3099 | - | let | |
3100 | - | if (if (isDefined( | |
3101 | - | then isDefined(addressFromString(value( | |
3100 | + | let kd = bN(mC) | |
3101 | + | let ke = getString(kd) | |
3102 | + | if (if (isDefined(ke)) | |
3103 | + | then isDefined(addressFromString(value(ke))) | |
3102 | 3104 | else false) | |
3103 | - | then throw((( | |
3105 | + | then throw(((mC + " already has refBy: ") + value(ke))) | |
3104 | 3106 | else { | |
3105 | - | let | |
3106 | - | let | |
3107 | - | let | |
3108 | - | then split_4C(value( | |
3107 | + | let mI = bR(mB) | |
3108 | + | let mJ = getString(mI) | |
3109 | + | let mK = if (isDefined(mJ)) | |
3110 | + | then split_4C(value(mJ), "_") | |
3109 | 3111 | else nil | |
3110 | - | if (containsElement( | |
3111 | - | then throw(((( | |
3112 | + | if (containsElement(mK, mC)) | |
3113 | + | then throw((((mB + " already contains ") + mC) + " within referrals")) | |
3112 | 3114 | else { | |
3113 | - | let | |
3114 | - | let | |
3115 | - | then value( | |
3116 | - | else makeString_2C(( | |
3117 | - | $Tuple2(([StringEntry( | |
3115 | + | let mL = makeString_2C((mK :+ mC), "_") | |
3116 | + | let mM = if (containsElement(mH, mB)) | |
3117 | + | then value(mG) | |
3118 | + | else makeString_2C((mH :+ mB), "_") | |
3119 | + | $Tuple2(([StringEntry(kd, mB), StringEntry(mI, mL), StringEntry(mF, mM)] ++ li), 0) | |
3118 | 3120 | } | |
3119 | 3121 | } | |
3120 | 3122 | } | |
3125 | 3127 | ||
3126 | 3128 | ||
3127 | 3129 | ||
3128 | - | @Callable( | |
3129 | - | func distributePoints ( | |
3130 | - | let | |
3131 | - | if ((size( | |
3130 | + | @Callable(gz) | |
3131 | + | func distributePoints (mN,mO,mP,mQ,mR) = { | |
3132 | + | let li = kO(gz) | |
3133 | + | if ((size(gz.payments) != 0)) | |
3132 | 3134 | then throw("No payments required") | |
3133 | 3135 | else { | |
3134 | - | let | |
3135 | - | let | |
3136 | - | let | |
3137 | - | let | |
3136 | + | let aw = toString(gz.originCaller) | |
3137 | + | let mS = ao(invoke(Q, "checkWlgXpREADONLY", [aw], nil)) | |
3138 | + | let mT = am(mS[1]) | |
3139 | + | let mU = if ((0 >= mT)) | |
3138 | 3140 | then $Tuple2(0, nil) | |
3139 | 3141 | else { | |
3140 | - | let | |
3141 | - | if (( | |
3142 | - | then $Tuple2( | |
3142 | + | let jY = am(invoke(Q, "takeWlgXp", [aw], nil)) | |
3143 | + | if ((jY == jY)) | |
3144 | + | then $Tuple2(mT, [IntegerEntry(cX(aw), am(mS[0])), IntegerEntry(cW(aw), am(mS[2]))]) | |
3143 | 3145 | else throw("Strict value is not equal to itself.") | |
3144 | 3146 | } | |
3145 | - | let | |
3146 | - | let | |
3147 | - | let | |
3148 | - | let | |
3149 | - | let | |
3150 | - | let | |
3151 | - | let | |
3152 | - | let | |
3153 | - | let | |
3154 | - | if (( | |
3155 | - | then throw((("There are only " + toString( | |
3147 | + | let mV = mU._1 | |
3148 | + | let mW = mU._2 | |
3149 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
3150 | + | let mX = cY(aw) | |
3151 | + | let mY = (valueOrElse(getInteger(mX), 0) + mV) | |
3152 | + | let mZ = cU(bP) | |
3153 | + | let na = valueOrElse(getInteger(mZ), 0) | |
3154 | + | let nb = (mY + na) | |
3155 | + | let nc = ((((mN + mO) + mP) + mQ) + mR) | |
3156 | + | if ((nc > nb)) | |
3157 | + | then throw((("There are only " + toString(nb)) + " free points to distribute")) | |
3156 | 3158 | else { | |
3157 | - | let | |
3158 | - | let | |
3159 | - | let | |
3160 | - | $Tuple2((([IntegerEntry( | |
3159 | + | let nd = cR(bP) | |
3160 | + | let dG = split(valueOrElse(getString(nd), "0_0_0_0_0"), "_") | |
3161 | + | let ne = (mY - nc) | |
3162 | + | $Tuple2((([IntegerEntry(mX, if ((0 > ne)) | |
3161 | 3163 | then 0 | |
3162 | - | else | |
3163 | - | then ( | |
3164 | - | else | |
3164 | + | else ne), IntegerEntry(mZ, if ((0 > ne)) | |
3165 | + | then (na + ne) | |
3166 | + | else na), StringEntry(nd, makeString([toString((parseIntValue(dG[cG]) + mN)), toString((parseIntValue(dG[cH]) + mO)), toString((parseIntValue(dG[cI]) + mP)), toString((parseIntValue(dG[cJ]) + mQ)), toString((parseIntValue(dG[cK]) + mR))], "_"))] ++ li) ++ mW), 0) | |
3165 | 3167 | } | |
3166 | 3168 | } | |
3167 | 3169 | } | |
3168 | 3170 | ||
3169 | 3171 | ||
3170 | 3172 | ||
3171 | - | @Callable( | |
3172 | - | func splitByGlobalWeightsREADONLY ( | |
3173 | - | ||
3174 | - | ||
3175 | - | ||
3176 | - | @Callable( | |
3177 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3178 | - | let | |
3179 | - | $Tuple2(nil, $Tuple2( | |
3180 | - | } | |
3181 | - | ||
3182 | - | ||
3183 | - | ||
3184 | - | @Callable( | |
3185 | - | func getBackpackREADONLY ( | |
3186 | - | ||
3187 | - | ||
3188 | - | ||
3189 | - | @Callable( | |
3190 | - | func getWarehouseREADONLY ( | |
3191 | - | let | |
3192 | - | let | |
3193 | - | let | |
3194 | - | $Tuple2(nil, makeString_2C( | |
3195 | - | } | |
3196 | - | ||
3197 | - | ||
3198 | - | ||
3199 | - | @Callable( | |
3200 | - | func saveLastTx () = if (!(containsElement([ | |
3173 | + | @Callable(gz) | |
3174 | + | func splitByGlobalWeightsREADONLY (eD) = $Tuple2(nil, eV(eD)) | |
3175 | + | ||
3176 | + | ||
3177 | + | ||
3178 | + | @Callable(gz) | |
3179 | + | func splitByGlobalAndLocalWeightsREADONLY (nf,ng,gC) = { | |
3180 | + | let gv = gB(gC) | |
3181 | + | $Tuple2(nil, $Tuple2(eV(nf), eG(ng, gv))) | |
3182 | + | } | |
3183 | + | ||
3184 | + | ||
3185 | + | ||
3186 | + | @Callable(gz) | |
3187 | + | func getBackpackREADONLY (bP) = $Tuple2(nil, makeString(hD(bU(bP)), ":")) | |
3188 | + | ||
3189 | + | ||
3190 | + | ||
3191 | + | @Callable(gz) | |
3192 | + | func getWarehouseREADONLY (bJ) = { | |
3193 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
3194 | + | let hT = (ar(split(jn.description, "_")[U]) / q) | |
3195 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
3196 | + | $Tuple2(nil, makeString_2C(hR(bI(bJ), hT, hU), ":")) | |
3197 | + | } | |
3198 | + | ||
3199 | + | ||
3200 | + | ||
3201 | + | @Callable(gz) | |
3202 | + | func saveLastTx () = if (!(containsElement([Q, O, R, S], gz.caller))) | |
3201 | 3203 | then throw("Access denied") | |
3202 | - | else $Tuple2( | |
3203 | - | ||
3204 | - | ||
3205 | - | ||
3206 | - | @Callable( | |
3207 | - | func updateDuckStats ( | |
3204 | + | else $Tuple2(kO(gz), 42) | |
3205 | + | ||
3206 | + | ||
3207 | + | ||
3208 | + | @Callable(gz) | |
3209 | + | func updateDuckStats (bP,jY) = if ((gz.caller != O)) | |
3208 | 3210 | then throw("Access denied") | |
3209 | - | else | |
3210 | - | ||
3211 | - | ||
3212 | - | ||
3213 | - | @Callable( | |
3214 | - | func updateAccStats ( | |
3211 | + | else ka(bP, jY) | |
3212 | + | ||
3213 | + | ||
3214 | + | ||
3215 | + | @Callable(gz) | |
3216 | + | func updateAccStats (aw,jY) = if (!(containsElement([Q, O, S], gz.caller))) | |
3215 | 3217 | then throw("Access denied") | |
3216 | - | else | |
3217 | - | ||
3218 | - | ||
3219 | - | ||
3220 | - | @Callable( | |
3221 | - | func equipDuck ( | |
3222 | - | let | |
3223 | - | if ((size( | |
3218 | + | else kb(aw, jY) | |
3219 | + | ||
3220 | + | ||
3221 | + | ||
3222 | + | @Callable(gz) | |
3223 | + | func equipDuck (nh) = { | |
3224 | + | let li = kO(gz) | |
3225 | + | if ((size(gz.payments) != 0)) | |
3224 | 3226 | then throw("No payments required") | |
3225 | 3227 | else { | |
3226 | - | let | |
3227 | - | let | |
3228 | - | if ( | |
3228 | + | let aw = toString(gz.originCaller) | |
3229 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
3230 | + | if (kl(bP)) | |
3229 | 3231 | then throw("equipDuck_checkTournament") | |
3230 | 3232 | else { | |
3231 | - | let | |
3232 | - | let | |
3233 | - | let | |
3234 | - | let | |
3235 | - | let | |
3236 | - | if ((size( | |
3233 | + | let gl = cV(bP) | |
3234 | + | let lc = split(valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3235 | + | let hE = bU(bP) | |
3236 | + | let ii = hD(hE) | |
3237 | + | let lG = split(nh, "_") | |
3238 | + | if ((size(lG) != cM)) | |
3237 | 3239 | then throw("Wrong equipment string") | |
3238 | 3240 | else { | |
3239 | - | let | |
3240 | - | let | |
3241 | - | let | |
3241 | + | let go = gd(lc, fs(ii[bw]), true, nil) | |
3242 | + | let gp = split(lG[cL], ";")[1] | |
3243 | + | let dE = if ((gp == "")) | |
3242 | 3244 | then 0 | |
3243 | 3245 | else { | |
3244 | - | let | |
3245 | - | if (( | |
3246 | + | let gq = split(gp, ",")[0] | |
3247 | + | if ((gq == "")) | |
3246 | 3248 | then 0 | |
3247 | 3249 | else { | |
3248 | - | let | |
3249 | - | let | |
3250 | - | let | |
3251 | - | if (if (if (if (if (( | |
3250 | + | let fH = split(gq, ":") | |
3251 | + | let L = fH[0] | |
3252 | + | let gr = fH[1] | |
3253 | + | if (if (if (if (if ((L == "06")) | |
3252 | 3254 | then true | |
3253 | - | else ( | |
3255 | + | else (L == "07")) | |
3254 | 3256 | then true | |
3255 | - | else ( | |
3256 | - | then ( | |
3257 | + | else (L == "08")) | |
3258 | + | then (gr != "") | |
3257 | 3259 | else false) | |
3258 | - | then (parseIntValue( | |
3260 | + | then (parseIntValue(gr) > 0) | |
3259 | 3261 | else false) | |
3260 | - | then parseIntValue(split( | |
3262 | + | then parseIntValue(split(be[parseIntValue(L)], "_")[bg]) | |
3261 | 3263 | else 0 | |
3262 | 3264 | } | |
3263 | 3265 | } | |
3264 | - | let | |
3265 | - | let | |
3266 | - | let | |
3267 | - | $Tuple2(([StringEntry( | |
3266 | + | let fY = dD(this, bP, dE, true) | |
3267 | + | let gs = gd(lG, go, false, fY) | |
3268 | + | let ld = fx(gs) | |
3269 | + | $Tuple2(([StringEntry(gl, nh), StringEntry(hE, makeString_2C([ii[bt], ii[bu], ii[bv], ld], ":")), StringEntry(db(bP), makeString([toString(fY[7]), toString(fY[8]), toString(fY[9]), toString(fY[10]), toString(fY[11])], "_"))] ++ li), 0) | |
3268 | 3270 | } | |
3269 | 3271 | } | |
3270 | 3272 | } | |
3272 | 3274 | ||
3273 | 3275 | ||
3274 | 3276 | ||
3275 | - | @Callable( | |
3276 | - | func initDuckTourAttempt ( | |
3277 | + | @Callable(gz) | |
3278 | + | func initDuckTourAttempt (bP) = if ((gz.caller != R)) | |
3277 | 3279 | then throw("Access denied") | |
3278 | 3280 | else { | |
3279 | - | let | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | let | |
3284 | - | let | |
3285 | - | let | |
3286 | - | $Tuple2([IntegerEntry( | |
3287 | - | } | |
3288 | - | ||
3289 | - | ||
3290 | - | ||
3291 | - | @Callable( | |
3281 | + | let iW = cQ(bP) | |
3282 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
3283 | + | let lA = valueOrElse(getInteger(iW), iX) | |
3284 | + | let ni = bV(bP) | |
3285 | + | let jl = valueOrElse(getString(ni), aR) | |
3286 | + | let cp = valueOrElse(getInteger(R, ca), 0) | |
3287 | + | let nj = (toString(cp) + "_T_0") | |
3288 | + | $Tuple2([IntegerEntry(cZ(bP), lA), IntegerEntry(iW, iX), StringEntry(da(bP), jl), StringEntry(ni, nj)], nj) | |
3289 | + | } | |
3290 | + | ||
3291 | + | ||
3292 | + | ||
3293 | + | @Callable(gz) | |
3292 | 3294 | func breakAttempt () = { | |
3293 | - | let | |
3294 | - | let | |
3295 | - | let | |
3296 | - | let | |
3297 | - | if ((split( | |
3295 | + | let li = kO(gz) | |
3296 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
3297 | + | let ni = bV(bP) | |
3298 | + | let jl = valueOrElse(getString(ni), aR) | |
3299 | + | if ((split(jl, "_")[by] != "T")) | |
3298 | 3300 | then throw("Your duck is not in the tournament") | |
3299 | 3301 | else { | |
3300 | - | let | |
3301 | - | let | |
3302 | - | $Tuple2((( | |
3303 | - | } | |
3304 | - | } | |
3305 | - | ||
3306 | - | ||
3307 | - | ||
3308 | - | @Callable( | |
3309 | - | func breakAttemptCallback () = if (( | |
3302 | + | let nk = getIntegerValue(cZ(bP)) | |
3303 | + | let nl = getStringValue(da(bP)) | |
3304 | + | $Tuple2(((li :+ IntegerEntry(cQ(bP), nk)) :+ StringEntry(ni, nl)), jl) | |
3305 | + | } | |
3306 | + | } | |
3307 | + | ||
3308 | + | ||
3309 | + | ||
3310 | + | @Callable(gz) | |
3311 | + | func breakAttemptCallback () = if ((gz.caller != R)) | |
3310 | 3312 | then throw("Access denied") | |
3311 | 3313 | else { | |
3312 | - | let | |
3313 | - | $Tuple2([IntegerEntry( | |
3314 | - | } | |
3315 | - | ||
3316 | - | ||
3317 | - | ||
3318 | - | @Callable( | |
3319 | - | func exitTournamentInternal ( | |
3314 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.originCaller))), "You don't have a duck staked") | |
3315 | + | $Tuple2([IntegerEntry(cQ(bP), getIntegerValue(cZ(bP))), StringEntry(bV(bP), getStringValue(da(bP)))], "breakAttemptCallback") | |
3316 | + | } | |
3317 | + | ||
3318 | + | ||
3319 | + | ||
3320 | + | @Callable(gz) | |
3321 | + | func exitTournamentInternal (bP) = if ((gz.caller != this)) | |
3320 | 3322 | then throw("Access denied") | |
3321 | 3323 | else { | |
3322 | - | let | |
3323 | - | let | |
3324 | - | $Tuple2([IntegerEntry( | |
3325 | - | } | |
3326 | - | ||
3327 | - | ||
3328 | - | ||
3329 | - | @Callable( | |
3330 | - | func processDelivery ( | |
3324 | + | let nk = getIntegerValue(cZ(bP)) | |
3325 | + | let nl = getStringValue(da(bP)) | |
3326 | + | $Tuple2([IntegerEntry(cQ(bP), nk), StringEntry(bV(bP), nl)], false) | |
3327 | + | } | |
3328 | + | ||
3329 | + | ||
3330 | + | ||
3331 | + | @Callable(gz) | |
3332 | + | func processDelivery (bP) = if ((gz.caller != this)) | |
3331 | 3333 | then throw("Access denied") | |
3332 | 3334 | else { | |
3333 | - | let | |
3334 | - | let | |
3335 | - | if (( | |
3336 | - | then throw(("Delivery is not available, fund=" + | |
3335 | + | let aw = toString(gz.originCaller) | |
3336 | + | let nm = valueOrElse(getInteger(O, bZ), 0) | |
3337 | + | if ((aU > nm)) | |
3338 | + | then throw(("Delivery is not available, fund=" + ax(nm, 6))) | |
3337 | 3339 | else { | |
3338 | - | let | |
3339 | - | let | |
3340 | - | let | |
3341 | - | let | |
3342 | - | let | |
3343 | - | then valueOrElse(getInteger( | |
3340 | + | let cr = lastBlock.timestamp | |
3341 | + | let nn = dh(aw) | |
3342 | + | let no = valueOrElse(getInteger(di(aw)), 0) | |
3343 | + | let np = (cr / dK) | |
3344 | + | let fN = if ((no == np)) | |
3345 | + | then valueOrElse(getInteger(nn), 0) | |
3344 | 3346 | else 0 | |
3345 | - | let | |
3346 | - | let | |
3347 | - | if (( | |
3348 | - | then throw((("You already used " + toString( | |
3347 | + | let nq = valueOrElse(getInteger(S, dM(aw)), 0) | |
3348 | + | let nr = (aZ + (nq / ba)) | |
3349 | + | if ((fN >= nr)) | |
3350 | + | then throw((("You already used " + toString(nr)) + " delivery attempts for today")) | |
3349 | 3351 | else { | |
3350 | - | let | |
3351 | - | let | |
3352 | - | $Tuple2([IntegerEntry( | |
3352 | + | let ns = dg(bP) | |
3353 | + | let nt = invoke(O, "sendDeliveryReward", [aw], nil) | |
3354 | + | $Tuple2([IntegerEntry(nn, (fN + 1)), IntegerEntry(di(aw), np), IntegerEntry(ns, (valueOrElse(getInteger(ns), 0) + 1))], nt) | |
3353 | 3355 | } | |
3354 | 3356 | } | |
3355 | 3357 | } | |
3356 | 3358 | ||
3357 | 3359 | ||
3358 | 3360 | ||
3359 | - | @Callable( | |
3360 | - | func robLand ( | |
3361 | - | let | |
3362 | - | if ((size( | |
3361 | + | @Callable(gz) | |
3362 | + | func robLand (iL,iM) = { | |
3363 | + | let li = kO(gz) | |
3364 | + | if ((size(gz.payments) != 1)) | |
3363 | 3365 | then throw("exactly 1 payment must be attached") | |
3364 | 3366 | else { | |
3365 | - | let | |
3366 | - | let | |
3367 | - | if (if (!(isDefined( | |
3367 | + | let lj = gz.payments[0] | |
3368 | + | let nu = lj.amount | |
3369 | + | if (if (!(isDefined(lj.assetId))) | |
3368 | 3370 | then true | |
3369 | - | else (value( | |
3371 | + | else (value(lj.assetId) != Y)) | |
3370 | 3372 | then throw("WLGOLD payments only!") | |
3371 | - | else if (( | |
3372 | - | then throw((("Payment should be " + | |
3373 | + | else if ((nu != aW)) | |
3374 | + | then throw((("Payment should be " + ax(aW, 8)) + " WLGOLD")) | |
3373 | 3375 | else { | |
3374 | - | let | |
3375 | - | if (!(sigVerify_8Kb( | |
3376 | + | let aw = toString(gz.caller) | |
3377 | + | if (!(sigVerify_8Kb(iL, iM, g))) | |
3376 | 3378 | then throw("signature does not match") | |
3377 | 3379 | else { | |
3378 | - | let | |
3379 | - | let | |
3380 | - | let | |
3381 | - | let | |
3382 | - | let | |
3383 | - | let | |
3384 | - | let | |
3385 | - | let | |
3386 | - | if (( | |
3380 | + | let fk = split_4C(toUtf8String(iL), ";") | |
3381 | + | let nv = split_4C(fk[0], "|") | |
3382 | + | let iO = split(nv[ew], "_") | |
3383 | + | let iP = parseIntValue(iO[0]) | |
3384 | + | let iQ = parseIntValue(iO[1]) | |
3385 | + | let ja = nv[ex] | |
3386 | + | let nw = split(fk[1], "|") | |
3387 | + | let nx = nw[ey] | |
3388 | + | if ((nx != "B")) | |
3387 | 3389 | then throw("Only bank robbery is supported") | |
3388 | 3390 | else { | |
3389 | - | let | |
3390 | - | if (if (( | |
3391 | + | let iT = parseIntValue(nw[eA]) | |
3392 | + | if (if ((iT > (lastBlock.timestamp + dP))) | |
3391 | 3393 | then true | |
3392 | - | else ((lastBlock.timestamp - | |
3393 | - | then throw(((("signature outdated: logTime=" + toString( | |
3394 | + | else ((lastBlock.timestamp - dP) > iT)) | |
3395 | + | then throw(((("signature outdated: logTime=" + toString(iT)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
3394 | 3396 | else { | |
3395 | - | let | |
3396 | - | let | |
3397 | - | if (( | |
3398 | - | then throw(((("Tx ids don't match! In state: " + | |
3397 | + | let iU = nw[ez] | |
3398 | + | let iV = valueOrElse(getString(av(aw)), "") | |
3399 | + | if ((iV != iU)) | |
3400 | + | then throw(((("Tx ids don't match! In state: " + iV) + ", in msg: ") + iU)) | |
3399 | 3401 | else { | |
3400 | - | let | |
3401 | - | let | |
3402 | - | let | |
3403 | - | let | |
3404 | - | let | |
3405 | - | let | |
3406 | - | let | |
3407 | - | let | |
3408 | - | if ( | |
3402 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
3403 | + | let gl = cV(bP) | |
3404 | + | let lE = valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,") | |
3405 | + | let ny = ff(lE, ja) | |
3406 | + | let lG = ny._1 | |
3407 | + | let lH = ny._2 | |
3408 | + | let nz = ny._3 | |
3409 | + | let jl = valueOrElse(getString(bV(bP)), aR) | |
3410 | + | if (cn(R, jl)) | |
3409 | 3411 | then throw("Your duck is taking part in the tournament") | |
3410 | 3412 | else { | |
3411 | - | let | |
3412 | - | let | |
3413 | - | let | |
3414 | - | let | |
3415 | - | let | |
3416 | - | then valueOrElse(getInteger( | |
3413 | + | let cr = lastBlock.timestamp | |
3414 | + | let nn = de(aw) | |
3415 | + | let no = valueOrElse(getInteger(df(aw)), 0) | |
3416 | + | let np = (cr / dK) | |
3417 | + | let fN = if ((no == np)) | |
3418 | + | then valueOrElse(getInteger(nn), 0) | |
3417 | 3419 | else 0 | |
3418 | - | let | |
3419 | - | let | |
3420 | - | if (( | |
3421 | - | then throw((("You already used " + toString( | |
3420 | + | let nq = valueOrElse(getInteger(S, dM(aw)), 0) | |
3421 | + | let nA = (aX + (nq / aY)) | |
3422 | + | if ((fN >= nA)) | |
3423 | + | then throw((("You already used " + toString(nA)) + " robbery attempts for today")) | |
3422 | 3424 | else { | |
3423 | - | let | |
3424 | - | let | |
3425 | + | let ns = dd(bP) | |
3426 | + | let nB = if ((iQ > 0)) | |
3425 | 3427 | then { | |
3426 | - | let | |
3427 | - | let | |
3428 | - | then (2 * | |
3429 | - | else (5 * | |
3430 | - | if (( | |
3431 | - | then throw(((("Robbery is not available, funds = " + | |
3432 | - | else [ScriptTransfer( | |
3428 | + | let nm = assetBalance(this, Y) | |
3429 | + | let nC = if (nz) | |
3430 | + | then (2 * aW) | |
3431 | + | else (5 * aW) | |
3432 | + | if ((nC > nm)) | |
3433 | + | then throw(((("Robbery is not available, funds = " + ax(nm, 8)) + " WLGOLD, required = ") + ax(nC, 8))) | |
3434 | + | else [ScriptTransfer(gz.caller, nC, Y)] | |
3433 | 3435 | } | |
3434 | 3436 | else nil | |
3435 | - | $Tuple2(((((((((( | |
3436 | - | then [StringEntry( | |
3437 | - | else nil)) ++ | |
3438 | - | then | |
3439 | - | else | |
3437 | + | $Tuple2((((((((((li ++ nB) ++ (if (lH) | |
3438 | + | then [StringEntry(db(bP), "0_0_0_0_0")] | |
3439 | + | else nil)) ++ ka(bP, if ((iQ > 0)) | |
3440 | + | then dm | |
3441 | + | else dn)._1) :+ IntegerEntry(dc(bP), cr)) :+ IntegerEntry(nn, (fN + 1))) :+ IntegerEntry(df(aw), np)) :+ IntegerEntry(ns, (valueOrElse(getInteger(ns), 0) + 1))) :+ StringEntry(gl, lG)) :+ IntegerEntry(cQ(bP), max([iQ, 0]))), 0) | |
3440 | 3442 | } | |
3441 | 3443 | } | |
3442 | 3444 | } | |
3449 | 3451 | ||
3450 | 3452 | ||
3451 | 3453 | ||
3452 | - | @Callable( | |
3454 | + | @Callable(gz) | |
3453 | 3455 | func buyRoboDuck () = if (!(c)) | |
3454 | 3456 | then throw("Feature is turned off") | |
3455 | 3457 | else { | |
3456 | - | let | |
3457 | - | if ((size( | |
3458 | + | let li = kO(gz) | |
3459 | + | if ((size(gz.payments) != 1)) | |
3458 | 3460 | then throw("Exactly one payment required") | |
3459 | 3461 | else { | |
3460 | - | let | |
3461 | - | if (( | |
3462 | + | let lj = value(gz.payments[0]) | |
3463 | + | if ((lj.assetId != i)) | |
3462 | 3464 | then throw("Allowed USDT payment only!") | |
3463 | - | else if (( | |
3464 | - | then throw((("Payment attached should be " + | |
3465 | + | else if ((lj.amount != dV)) | |
3466 | + | then throw((("Payment attached should be " + ax(dV, 6)) + " USDT")) | |
3465 | 3467 | else { | |
3466 | - | let | |
3467 | - | let | |
3468 | - | let | |
3469 | - | let | |
3470 | - | let | |
3471 | - | let | |
3472 | - | $Tuple2((((( | |
3468 | + | let nD = valueOrElse(getInteger(eo()), 0) | |
3469 | + | let nE = toBytes(nD) | |
3470 | + | let eg = ((aL + "-") + takeRight(toBase16String(nE), 8)) | |
3471 | + | let nF = takeRight(toBase16String(sha256_16Kb(nE)), 6) | |
3472 | + | let iI = Issue(eg, ("Robo Duck NFT for WavesLands game, background color = #" + nF), 1, 0, false) | |
3473 | + | let bB = calculateAssetId(iI) | |
3474 | + | $Tuple2(((((li :+ IntegerEntry(eo(), (nD + 1))) :+ iI) :+ ScriptTransfer(gz.originCaller, 1, bB)) :+ ScriptTransfer(O, lj.amount, i)), $Tuple2(toBase58String(bB), nF)) | |
3473 | 3475 | } | |
3474 | 3476 | } | |
3475 | 3477 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = false | |
5 | 5 | ||
6 | 6 | let b = false | |
7 | 7 | ||
8 | 8 | let c = false | |
9 | 9 | ||
10 | 10 | let d = 86400000 | |
11 | 11 | ||
12 | - | let e = take(drop(this.bytes, 1), 1) | |
13 | - | ||
14 | - | let f = { | |
15 | - | let g = e | |
16 | - | if ((base58'2W' == g)) | |
12 | + | let e = 1727740799000 | |
13 | + | ||
14 | + | let f = take(drop(this.bytes, 1), 1) | |
15 | + | ||
16 | + | let g = { | |
17 | + | let h = f | |
18 | + | if ((base58'2W' == h)) | |
17 | 19 | then if (a) | |
18 | 20 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
19 | 21 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
20 | - | else if ((base58'2T' == | |
22 | + | else if ((base58'2T' == h)) | |
21 | 23 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
22 | 24 | else throw("Unknown chain") | |
23 | 25 | } | |
24 | 26 | ||
25 | - | let | |
26 | - | let | |
27 | - | if ((base58'2W' == | |
27 | + | let i = { | |
28 | + | let h = f | |
29 | + | if ((base58'2W' == h)) | |
28 | 30 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
29 | - | else if ((base58'2T' == | |
31 | + | else if ((base58'2T' == h)) | |
30 | 32 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
31 | 33 | else throw("Unknown chain") | |
32 | 34 | } | |
33 | 35 | ||
34 | - | let | |
35 | - | let | |
36 | - | if ((base58'2W' == | |
36 | + | let j = { | |
37 | + | let h = f | |
38 | + | if ((base58'2W' == h)) | |
37 | 39 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
38 | - | else if ((base58'2T' == | |
40 | + | else if ((base58'2T' == h)) | |
39 | 41 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
40 | 42 | else throw("Unknown chain") | |
41 | 43 | } | |
42 | 44 | ||
43 | - | let | |
44 | - | let | |
45 | - | if ((base58'2W' == | |
45 | + | let k = { | |
46 | + | let h = f | |
47 | + | if ((base58'2W' == h)) | |
46 | 48 | then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA" | |
47 | - | else if ((base58'2T' == | |
49 | + | else if ((base58'2T' == h)) | |
48 | 50 | then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh" | |
49 | 51 | else throw("Unknown chain") | |
50 | 52 | } | |
51 | 53 | ||
52 | - | let | |
53 | - | let | |
54 | - | if ((base58'2W' == | |
54 | + | let l = { | |
55 | + | let h = f | |
56 | + | if ((base58'2W' == h)) | |
55 | 57 | then 10000000000 | |
56 | - | else if ((base58'2T' == | |
58 | + | else if ((base58'2T' == h)) | |
57 | 59 | then 100000000 | |
58 | 60 | else throw("Unknown chain") | |
59 | 61 | } | |
60 | 62 | ||
61 | - | let | |
62 | - | let | |
63 | - | if ((base58'2W' == | |
63 | + | let m = { | |
64 | + | let h = f | |
65 | + | if ((base58'2W' == h)) | |
64 | 66 | then d | |
65 | - | else if ((base58'2T' == | |
67 | + | else if ((base58'2T' == h)) | |
66 | 68 | then 60000 | |
67 | 69 | else throw("Unknown chain") | |
68 | 70 | } | |
69 | 71 | ||
70 | - | let | |
71 | - | ||
72 | - | let | |
73 | - | ||
74 | - | let | |
75 | - | ||
76 | - | let | |
77 | - | ||
78 | - | let | |
79 | - | ||
80 | - | let | |
81 | - | ||
82 | - | let | |
83 | - | ||
84 | - | let | |
85 | - | ||
86 | - | let | |
87 | - | ||
88 | - | func | |
89 | - | ||
90 | - | ||
91 | - | let | |
92 | - | ||
93 | - | let | |
94 | - | ||
95 | - | let | |
96 | - | ||
97 | - | let | |
98 | - | ||
99 | - | let | |
100 | - | ||
101 | - | let | |
102 | - | ||
103 | - | func | |
104 | - | ||
105 | - | ||
106 | - | func | |
107 | - | ||
108 | - | ||
109 | - | func | |
110 | - | ||
111 | - | ||
112 | - | func | |
113 | - | ||
114 | - | ||
115 | - | let | |
116 | - | ||
117 | - | let | |
118 | - | ||
119 | - | let | |
120 | - | ||
121 | - | let | |
122 | - | ||
123 | - | let | |
124 | - | ||
125 | - | let | |
126 | - | ||
127 | - | let | |
128 | - | ||
129 | - | let | |
130 | - | ||
131 | - | let | |
132 | - | ||
133 | - | let | |
134 | - | ||
135 | - | let | |
136 | - | ||
137 | - | let | |
138 | - | ||
139 | - | let | |
140 | - | ||
141 | - | let | |
142 | - | ||
143 | - | let | |
144 | - | ||
145 | - | let | |
146 | - | ||
147 | - | let | |
148 | - | ||
149 | - | func | |
150 | - | ||
151 | - | ||
152 | - | func | |
153 | - | ||
154 | - | ||
155 | - | func | |
156 | - | ||
157 | - | ||
158 | - | func | |
159 | - | ||
160 | - | ||
161 | - | func | |
162 | - | ||
163 | - | ||
164 | - | func | |
165 | - | let | |
166 | - | if ($isInstanceOf( | |
72 | + | let n = "__" | |
73 | + | ||
74 | + | let o = 1000000 | |
75 | + | ||
76 | + | let p = 100000000 | |
77 | + | ||
78 | + | let q = 25 | |
79 | + | ||
80 | + | let r = 100 | |
81 | + | ||
82 | + | let s = 225 | |
83 | + | ||
84 | + | let t = 400 | |
85 | + | ||
86 | + | let u = 625 | |
87 | + | ||
88 | + | let v = [0, 1, 2, 3, 4, 5] | |
89 | + | ||
90 | + | func w (x,y) = valueOrErrorMessage(getString(x, y), makeString(["mandatory ", toString(x), ".", y, " is not defined"], "")) | |
91 | + | ||
92 | + | ||
93 | + | let z = 1 | |
94 | + | ||
95 | + | let A = 2 | |
96 | + | ||
97 | + | let B = 3 | |
98 | + | ||
99 | + | let C = 4 | |
100 | + | ||
101 | + | let D = 7 | |
102 | + | ||
103 | + | let E = 8 | |
104 | + | ||
105 | + | func F () = "%s__restConfig" | |
106 | + | ||
107 | + | ||
108 | + | func G () = "%s__restAddr" | |
109 | + | ||
110 | + | ||
111 | + | func H (I) = split_4C(w(I, F()), n) | |
112 | + | ||
113 | + | ||
114 | + | func J (K,L) = valueOrErrorMessage(addressFromString(K[L]), ("Rest cfg doesn't contain address at index " + toString(L))) | |
115 | + | ||
116 | + | ||
117 | + | let M = addressFromStringValue(valueOrElse(getString(this, G()), j)) | |
118 | + | ||
119 | + | let K = H(M) | |
120 | + | ||
121 | + | let N = J(K, z) | |
122 | + | ||
123 | + | let O = J(K, A) | |
124 | + | ||
125 | + | let P = J(K, B) | |
126 | + | ||
127 | + | let Q = J(K, C) | |
128 | + | ||
129 | + | let R = J(K, D) | |
130 | + | ||
131 | + | let S = J(K, E) | |
132 | + | ||
133 | + | let T = 0 | |
134 | + | ||
135 | + | let U = 1 | |
136 | + | ||
137 | + | let V = 2 | |
138 | + | ||
139 | + | let W = 3 | |
140 | + | ||
141 | + | let X = "wlg_assetId" | |
142 | + | ||
143 | + | let Y = valueOrErrorMessage(getBinary(Q, X), "WLGOLD is not issued yet") | |
144 | + | ||
145 | + | let Z = "acresAssetId" | |
146 | + | ||
147 | + | let aa = valueOrErrorMessage(getBinary(S, Z), "ACRES is not issued yet") | |
148 | + | ||
149 | + | let ab = 2 | |
150 | + | ||
151 | + | func ac (x) = ("finishBlockFor_" + x) | |
152 | + | ||
153 | + | ||
154 | + | func ad () = "resTypesProportions" | |
155 | + | ||
156 | + | ||
157 | + | func ae (af) = ("resTypesByContinent_" + af) | |
158 | + | ||
159 | + | ||
160 | + | func ag (ah) = ("stakedLandsByOwner_" + ah) | |
161 | + | ||
162 | + | ||
163 | + | func ai (ah) = ("stakedPiecesByOwner_" + ah) | |
164 | + | ||
165 | + | ||
166 | + | func aj (ak) = { | |
167 | + | let h = ak | |
168 | + | if ($isInstanceOf(h, "String")) | |
167 | 169 | then { | |
168 | - | let | |
169 | - | | |
170 | + | let al = h | |
171 | + | al | |
170 | 172 | } | |
171 | 173 | else throw("fail to cast into String") | |
172 | 174 | } | |
173 | 175 | ||
174 | 176 | ||
175 | - | func | |
176 | - | let | |
177 | - | if ($isInstanceOf( | |
177 | + | func am (ak) = { | |
178 | + | let h = ak | |
179 | + | if ($isInstanceOf(h, "Int")) | |
178 | 180 | then { | |
179 | - | let | |
180 | - | | |
181 | + | let an = h | |
182 | + | an | |
181 | 183 | } | |
182 | 184 | else throw("fail to cast into Int") | |
183 | 185 | } | |
184 | 186 | ||
185 | 187 | ||
186 | - | func | |
187 | - | let | |
188 | - | if ($isInstanceOf( | |
188 | + | func ao (ak) = { | |
189 | + | let h = ak | |
190 | + | if ($isInstanceOf(h, "List[Any]")) | |
189 | 191 | then { | |
190 | - | let | |
191 | - | | |
192 | + | let ap = h | |
193 | + | ap | |
192 | 194 | } | |
193 | 195 | else throw("fail to cast into List[Any]") | |
194 | 196 | } | |
195 | 197 | ||
196 | 198 | ||
197 | - | func | |
198 | - | let | |
199 | - | if ($isInstanceOf( | |
199 | + | func aq (ak) = { | |
200 | + | let h = ak | |
201 | + | if ($isInstanceOf(h, "Boolean")) | |
200 | 202 | then { | |
201 | - | let | |
202 | - | | |
203 | + | let al = h | |
204 | + | al | |
203 | 205 | } | |
204 | 206 | else throw("fail to cast into Boolean") | |
205 | 207 | } | |
206 | 208 | ||
207 | 209 | ||
208 | - | func | |
209 | - | let | |
210 | - | if (("S" == | |
211 | - | then | |
212 | - | else if (("M" == | |
213 | - | then | |
214 | - | else if (("L" == | |
215 | - | then | |
216 | - | else if (("XL" == | |
217 | - | then | |
218 | - | else if (("XXL" == | |
219 | - | then | |
210 | + | func ar (as) = { | |
211 | + | let h = as | |
212 | + | if (("S" == h)) | |
213 | + | then q | |
214 | + | else if (("M" == h)) | |
215 | + | then r | |
216 | + | else if (("L" == h)) | |
217 | + | then s | |
218 | + | else if (("XL" == h)) | |
219 | + | then t | |
220 | + | else if (("XXL" == h)) | |
221 | + | then u | |
220 | 222 | else throw("Unknown land size") | |
221 | 223 | } | |
222 | 224 | ||
223 | 225 | ||
224 | - | func | |
225 | - | ||
226 | - | ||
227 | - | func | |
228 | - | ||
229 | - | ||
230 | - | func | |
231 | - | ||
232 | - | ||
233 | - | func | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | (((toString(( | |
238 | - | } | |
239 | - | ||
240 | - | ||
241 | - | func | |
226 | + | func at (al) = isDefined(parseInt(al)) | |
227 | + | ||
228 | + | ||
229 | + | func au () = "contractsBlocked" | |
230 | + | ||
231 | + | ||
232 | + | func av (aw) = ("lastTxIdByUser_" + aw) | |
233 | + | ||
234 | + | ||
235 | + | func ax (ay,az) = { | |
236 | + | let aA = pow(10, 0, az, 0, 0, DOWN) | |
237 | + | let aB = toString((ay % aA)) | |
238 | + | let aC = drop(toString(aA), (1 + size(aB))) | |
239 | + | (((toString((ay / aA)) + ".") + aC) + aB) | |
240 | + | } | |
241 | + | ||
242 | + | ||
243 | + | func aD (aE,aF,aG) = if ((0 >= aE)) | |
242 | 244 | then throw("maxValue should be > 0") | |
243 | 245 | else { | |
244 | - | let aG = sha256((aE + aF)) | |
245 | - | (toInt(aG) % aD) | |
246 | - | } | |
247 | - | ||
248 | - | ||
249 | - | func aH () = min([lastBlock.timestamp, 1727740799000]) | |
250 | - | ||
251 | - | ||
252 | - | let aI = "LAND" | |
253 | - | ||
254 | - | let aJ = "DUCK" | |
255 | - | ||
256 | - | let aK = "ROBO" | |
257 | - | ||
258 | - | let aL = "PRESALE" | |
259 | - | ||
260 | - | let aM = 6 | |
261 | - | ||
262 | - | let aN = 25 | |
263 | - | ||
264 | - | let aO = 3456000 | |
265 | - | ||
266 | - | let aP = 10000000000 | |
267 | - | ||
268 | - | let aQ = "Africa_F_Africa" | |
269 | - | ||
270 | - | let aR = 39637 | |
271 | - | ||
272 | - | let aS = 10 | |
273 | - | ||
274 | - | let aT = 50000 | |
275 | - | ||
276 | - | let aU = 10 | |
277 | - | ||
278 | - | let aV = 100000000 | |
279 | - | ||
280 | - | let aW = 0 | |
281 | - | ||
282 | - | let aX = 200000000 | |
283 | - | ||
284 | - | let aY = 0 | |
285 | - | ||
286 | - | let aZ = 200000000 | |
287 | - | ||
288 | - | let ba = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
289 | - | ||
290 | - | let bb = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
291 | - | ||
292 | - | let bc = 10000000 | |
293 | - | ||
294 | - | let bd = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
295 | - | ||
296 | - | let be = 6 | |
297 | - | ||
298 | - | let bf = 8 | |
299 | - | ||
300 | - | let bg = 9 | |
301 | - | ||
302 | - | let bh = 10 | |
246 | + | let aH = sha256((aF + aG)) | |
247 | + | (toInt(aH) % aE) | |
248 | + | } | |
249 | + | ||
250 | + | ||
251 | + | func aI () = min([lastBlock.timestamp, e]) | |
252 | + | ||
253 | + | ||
254 | + | let aJ = "LAND" | |
255 | + | ||
256 | + | let aK = "DUCK" | |
257 | + | ||
258 | + | let aL = "ROBO" | |
259 | + | ||
260 | + | let aM = "PRESALE" | |
261 | + | ||
262 | + | let aN = 6 | |
263 | + | ||
264 | + | let aO = 25 | |
265 | + | ||
266 | + | let aP = 3456000 | |
267 | + | ||
268 | + | let aQ = 10000000000 | |
269 | + | ||
270 | + | let aR = "Africa_F_Africa" | |
271 | + | ||
272 | + | let aS = 39637 | |
273 | + | ||
274 | + | let aT = 10 | |
275 | + | ||
276 | + | let aU = 50000 | |
277 | + | ||
278 | + | let aV = 10 | |
279 | + | ||
280 | + | let aW = 100000000 | |
281 | + | ||
282 | + | let aX = 0 | |
283 | + | ||
284 | + | let aY = 200000000 | |
285 | + | ||
286 | + | let aZ = 0 | |
287 | + | ||
288 | + | let ba = 200000000 | |
289 | + | ||
290 | + | let bb = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
291 | + | ||
292 | + | let bc = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
293 | + | ||
294 | + | let bd = 10000000 | |
295 | + | ||
296 | + | let be = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
297 | + | ||
298 | + | let bf = 6 | |
299 | + | ||
300 | + | let bg = 8 | |
301 | + | ||
302 | + | let bh = 9 | |
303 | 303 | ||
304 | 304 | let bi = 10 | |
305 | 305 | ||
306 | - | let bj = 0 | |
307 | - | ||
308 | - | let bk = 1 | |
309 | - | ||
310 | - | let bl = 2 | |
311 | - | ||
312 | - | let bm = 3 | |
313 | - | ||
314 | - | let bn = 4 | |
315 | - | ||
316 | - | let bo = 0 | |
317 | - | ||
318 | - | let bp = 1 | |
319 | - | ||
320 | - | let bq = 2 | |
321 | - | ||
322 | - | let br = 3 | |
323 | - | ||
324 | - | let bs = 0 | |
325 | - | ||
326 | - | let bt = 1 | |
327 | - | ||
328 | - | let bu = 2 | |
329 | - | ||
330 | - | let bv = 3 | |
331 | - | ||
332 | - | let bw = 0 | |
333 | - | ||
334 | - | let bx = 1 | |
335 | - | ||
336 | - | let by = 2 | |
337 | - | ||
338 | - | func bz (bA) = ("no_" + bA) | |
339 | - | ||
340 | - | ||
341 | - | func bB (bA) = ("lcna_" + bA) | |
342 | - | ||
343 | - | ||
344 | - | func bC (bA) = ("st_" + bA) | |
345 | - | ||
346 | - | ||
347 | - | func bD (bE,bA) = makeString(["las", bE, bA], "_") | |
348 | - | ||
349 | - | ||
350 | - | func bF (bG,bA,ag) = ((((("sttao_" + bG) + "_") + bA) + "_") + ag) | |
351 | - | ||
352 | - | ||
353 | - | func bH (bI) = ("wh_" + bI) | |
354 | - | ||
355 | - | ||
356 | - | func bJ (bA) = ("infraLevel_" + bA) | |
357 | - | ||
358 | - | ||
359 | - | func bK (bA) = ("duckCustomNameByAssetId_" + bA) | |
360 | - | ||
361 | - | ||
362 | - | func bL (av) = ("accountCustomNameByAddr_" + av) | |
363 | - | ||
364 | - | ||
365 | - | func bM (av) = ("accRefBy_" + av) | |
366 | - | ||
367 | - | ||
368 | - | func bN (bO) = ("onboardArtActivatedOnDuck_" + bO) | |
369 | - | ||
370 | - | ||
371 | - | func bP (av) = ("onboardArtActivatedDuckBy_" + av) | |
372 | - | ||
373 | - | ||
374 | - | func bQ (av) = ("accReferrals_" + av) | |
375 | - | ||
376 | - | ||
377 | - | func bR (bA) = ("duckOwner_" + bA) | |
378 | - | ||
379 | - | ||
380 | - | func bS (ag) = ("stakedDuckByOwner_" + ag) | |
381 | - | ||
382 | - | ||
383 | - | func bT (bO) = ("backPack_" + bO) | |
384 | - | ||
385 | - | ||
386 | - | func bU (bO) = ("duckLocation_" + bO) | |
387 | - | ||
388 | - | ||
389 | - | func bV (bW) = ("%s%s__userGwlReleaseTime__" + bW) | |
390 | - | ||
391 | - | ||
392 | - | func bX () = "emergencyWarehouseProducts" | |
393 | - | ||
394 | - | ||
395 | - | let bY = "deliveryFund" | |
396 | - | ||
397 | - | let bZ = "%s__lastTourId" | |
398 | - | ||
399 | - | func ca (cb) = ("%s%d__tourStaticData__" + toString(cb)) | |
400 | - | ||
401 | - | ||
402 | - | func cc (cb) = ("%s%d__tourDynamicData__" + toString(cb)) | |
403 | - | ||
404 | - | ||
405 | - | func cd (cb,bO) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(cb), bO], "__") | |
406 | - | ||
407 | - | ||
408 | - | let ce = 0 | |
409 | - | ||
410 | - | let cf = 1 | |
411 | - | ||
412 | - | let cg = 6 | |
413 | - | ||
414 | - | let ch = 1 | |
415 | - | ||
416 | - | func ci (cj,cb) = { | |
417 | - | let ck = split(valueOrErrorMessage(getString(cj, ca(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__") | |
418 | - | let cl = split_4C(valueOrErrorMessage(getString(cj, cc(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__") | |
419 | - | [ck, cl] | |
420 | - | } | |
421 | - | ||
422 | - | ||
423 | - | func cm (cj,cn) = { | |
424 | - | let co = valueOrElse(getInteger(cj, bZ), 0) | |
425 | - | let cp = split(cn, "_") | |
426 | - | let cq = lastBlock.timestamp | |
427 | - | let cr = ci(cj, co) | |
428 | - | let ck = cr[ce] | |
429 | - | let cl = cr[cf] | |
430 | - | if (if (if ((cp[bx] == "T")) | |
431 | - | then (parseIntValue(cp[bw]) == co) | |
306 | + | let bj = 10 | |
307 | + | ||
308 | + | let bk = 0 | |
309 | + | ||
310 | + | let bl = 1 | |
311 | + | ||
312 | + | let bm = 2 | |
313 | + | ||
314 | + | let bn = 3 | |
315 | + | ||
316 | + | let bo = 4 | |
317 | + | ||
318 | + | let bp = 0 | |
319 | + | ||
320 | + | let bq = 1 | |
321 | + | ||
322 | + | let br = 2 | |
323 | + | ||
324 | + | let bs = 3 | |
325 | + | ||
326 | + | let bt = 0 | |
327 | + | ||
328 | + | let bu = 1 | |
329 | + | ||
330 | + | let bv = 2 | |
331 | + | ||
332 | + | let bw = 3 | |
333 | + | ||
334 | + | let bx = 0 | |
335 | + | ||
336 | + | let by = 1 | |
337 | + | ||
338 | + | let bz = 2 | |
339 | + | ||
340 | + | func bA (bB) = ("no_" + bB) | |
341 | + | ||
342 | + | ||
343 | + | func bC (bB) = ("lcna_" + bB) | |
344 | + | ||
345 | + | ||
346 | + | func bD (bB) = ("st_" + bB) | |
347 | + | ||
348 | + | ||
349 | + | func bE (bF,bB) = makeString(["las", bF, bB], "_") | |
350 | + | ||
351 | + | ||
352 | + | func bG (bH,bB,ah) = ((((("sttao_" + bH) + "_") + bB) + "_") + ah) | |
353 | + | ||
354 | + | ||
355 | + | func bI (bJ) = ("wh_" + bJ) | |
356 | + | ||
357 | + | ||
358 | + | func bK (bB) = ("infraLevel_" + bB) | |
359 | + | ||
360 | + | ||
361 | + | func bL (bB) = ("duckCustomNameByAssetId_" + bB) | |
362 | + | ||
363 | + | ||
364 | + | func bM (aw) = ("accountCustomNameByAddr_" + aw) | |
365 | + | ||
366 | + | ||
367 | + | func bN (aw) = ("accRefBy_" + aw) | |
368 | + | ||
369 | + | ||
370 | + | func bO (bP) = ("onboardArtActivatedOnDuck_" + bP) | |
371 | + | ||
372 | + | ||
373 | + | func bQ (aw) = ("onboardArtActivatedDuckBy_" + aw) | |
374 | + | ||
375 | + | ||
376 | + | func bR (aw) = ("accReferrals_" + aw) | |
377 | + | ||
378 | + | ||
379 | + | func bS (bB) = ("duckOwner_" + bB) | |
380 | + | ||
381 | + | ||
382 | + | func bT (ah) = ("stakedDuckByOwner_" + ah) | |
383 | + | ||
384 | + | ||
385 | + | func bU (bP) = ("backPack_" + bP) | |
386 | + | ||
387 | + | ||
388 | + | func bV (bP) = ("duckLocation_" + bP) | |
389 | + | ||
390 | + | ||
391 | + | func bW (bX) = ("%s%s__userGwlReleaseTime__" + bX) | |
392 | + | ||
393 | + | ||
394 | + | func bY () = "emergencyWarehouseProducts" | |
395 | + | ||
396 | + | ||
397 | + | let bZ = "deliveryFund" | |
398 | + | ||
399 | + | let ca = "%s__lastTourId" | |
400 | + | ||
401 | + | func cb (cc) = ("%s%d__tourStaticData__" + toString(cc)) | |
402 | + | ||
403 | + | ||
404 | + | func cd (cc) = ("%s%d__tourDynamicData__" + toString(cc)) | |
405 | + | ||
406 | + | ||
407 | + | func ce (cc,bP) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(cc), bP], "__") | |
408 | + | ||
409 | + | ||
410 | + | let cf = 0 | |
411 | + | ||
412 | + | let cg = 1 | |
413 | + | ||
414 | + | let ch = 6 | |
415 | + | ||
416 | + | let ci = 1 | |
417 | + | ||
418 | + | func cj (ck,cc) = { | |
419 | + | let cl = split(valueOrErrorMessage(getString(ck, cb(cc)), (("Error reading tournament " + toString(cc)) + " data")), "__") | |
420 | + | let cm = split_4C(valueOrErrorMessage(getString(ck, cd(cc)), (("Error reading tournament " + toString(cc)) + " data")), "__") | |
421 | + | [cl, cm] | |
422 | + | } | |
423 | + | ||
424 | + | ||
425 | + | func cn (ck,co) = { | |
426 | + | let cp = valueOrElse(getInteger(ck, ca), 0) | |
427 | + | let cq = split(co, "_") | |
428 | + | let cr = lastBlock.timestamp | |
429 | + | let cs = cj(ck, cp) | |
430 | + | let cl = cs[cf] | |
431 | + | let cm = cs[cg] | |
432 | + | if (if (if ((cq[by] == "T")) | |
433 | + | then (parseIntValue(cq[bx]) == cp) | |
432 | 434 | else false) | |
433 | - | then ( | |
435 | + | then (cm[ci] == "INPROGRESS") | |
434 | 436 | else false) | |
435 | - | then (parseIntValue( | |
437 | + | then (parseIntValue(cl[ch]) > cr) | |
436 | 438 | else false | |
437 | 439 | } | |
438 | 440 | ||
439 | 441 | ||
440 | - | func | |
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | if (if (if (( | |
449 | - | then (parseIntValue( | |
442 | + | func ct (ck,co) = { | |
443 | + | let cp = valueOrElse(getInteger(ck, ca), 0) | |
444 | + | let cq = split(co, "_") | |
445 | + | let cr = lastBlock.timestamp | |
446 | + | let cs = cj(ck, cp) | |
447 | + | let cl = cs[cf] | |
448 | + | let cm = cs[cg] | |
449 | + | let cu = cq[by] | |
450 | + | if (if (if ((cq[by] == "T")) | |
451 | + | then (parseIntValue(cq[bx]) == cp) | |
450 | 452 | else false) | |
451 | - | then ( | |
453 | + | then (cm[ci] == "INPROGRESS") | |
452 | 454 | else false) | |
453 | - | then (parseIntValue( | |
455 | + | then (parseIntValue(cl[ch]) > cr) | |
454 | 456 | else false | |
455 | 457 | } | |
456 | 458 | ||
457 | 459 | ||
458 | - | func cu (cv) = (parseIntValue(cv[be]) * bc) | |
459 | - | ||
460 | - | ||
461 | - | func cw (cx,cy,cz) = throw(((((("Cheat attempt: oldLoc=" + cx) + ", newLoc=") + cy) + ", case=") + toString(cz))) | |
462 | - | ||
463 | - | ||
464 | - | let cA = 100000000 | |
465 | - | ||
466 | - | let cB = 3200 | |
467 | - | ||
468 | - | let cC = 4000 | |
469 | - | ||
470 | - | let cD = 3 | |
471 | - | ||
472 | - | let cE = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
473 | - | ||
474 | - | let cF = 0 | |
475 | - | ||
476 | - | let cG = 1 | |
477 | - | ||
478 | - | let cH = 2 | |
479 | - | ||
480 | - | let cI = 3 | |
481 | - | ||
482 | - | let cJ = 4 | |
483 | - | ||
484 | - | let cK = 0 | |
485 | - | ||
486 | - | let cL = 6 | |
487 | - | ||
488 | - | let cM = 2 | |
460 | + | func cv (cw) = (parseIntValue(cw[bf]) * bd) | |
461 | + | ||
462 | + | ||
463 | + | func cx (cy,cz,cA) = throw(((((("Cheat attempt: oldLoc=" + cy) + ", newLoc=") + cz) + ", case=") + toString(cA))) | |
464 | + | ||
465 | + | ||
466 | + | let cB = 100000000 | |
467 | + | ||
468 | + | let cC = 3200 | |
469 | + | ||
470 | + | let cD = 4000 | |
471 | + | ||
472 | + | let cE = 3 | |
473 | + | ||
474 | + | let cF = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
475 | + | ||
476 | + | let cG = 0 | |
477 | + | ||
478 | + | let cH = 1 | |
479 | + | ||
480 | + | let cI = 2 | |
481 | + | ||
482 | + | let cJ = 3 | |
483 | + | ||
484 | + | let cK = 4 | |
485 | + | ||
486 | + | let cL = 0 | |
487 | + | ||
488 | + | let cM = 6 | |
489 | 489 | ||
490 | 490 | let cN = 2 | |
491 | 491 | ||
492 | - | let cO = | |
493 | - | ||
494 | - | ||
495 | - | ||
496 | - | ||
497 | - | ||
498 | - | ||
499 | - | ||
500 | - | ||
501 | - | ||
502 | - | ||
503 | - | ||
504 | - | ||
505 | - | ||
506 | - | ||
507 | - | ||
508 | - | ||
509 | - | ||
510 | - | ||
511 | - | ||
512 | - | ||
513 | - | ||
514 | - | ||
515 | - | ||
516 | - | ||
517 | - | ||
518 | - | ||
519 | - | ||
520 | - | ||
521 | - | ||
522 | - | ||
523 | - | ||
524 | - | ||
525 | - | ||
526 | - | ||
527 | - | ||
528 | - | ||
529 | - | ||
530 | - | ||
531 | - | ||
532 | - | ||
533 | - | ||
534 | - | ||
535 | - | ||
536 | - | ||
537 | - | ||
538 | - | ||
539 | - | ||
540 | - | ||
541 | - | ||
542 | - | ||
543 | - | ||
544 | - | ||
545 | - | ||
546 | - | ||
547 | - | ||
548 | - | ||
549 | - | ||
550 | - | ||
551 | - | ||
492 | + | let cO = 2 | |
493 | + | ||
494 | + | let cP = 30 | |
495 | + | ||
496 | + | func cQ (bP) = ("duckHealth_" + bP) | |
497 | + | ||
498 | + | ||
499 | + | func cR (bP) = ("duckChars_" + bP) | |
500 | + | ||
501 | + | ||
502 | + | func cS (bP) = ("duckXP_" + bP) | |
503 | + | ||
504 | + | ||
505 | + | func cT (bP) = ("duckLevel_" + bP) | |
506 | + | ||
507 | + | ||
508 | + | func cU (bP) = ("duckFreePoints_" + bP) | |
509 | + | ||
510 | + | ||
511 | + | func cV (bP) = ("duckEquipment_" + bP) | |
512 | + | ||
513 | + | ||
514 | + | func cW (aw) = ("userXP_" + aw) | |
515 | + | ||
516 | + | ||
517 | + | func cX (aw) = ("userLevel_" + aw) | |
518 | + | ||
519 | + | ||
520 | + | func cY (aw) = ("userFreePoints_" + aw) | |
521 | + | ||
522 | + | ||
523 | + | func cZ (bP) = ("savedHealth_" + bP) | |
524 | + | ||
525 | + | ||
526 | + | func da (bP) = ("savedLocation_" + bP) | |
527 | + | ||
528 | + | ||
529 | + | func db (bP) = ("duckBuffs_" + bP) | |
530 | + | ||
531 | + | ||
532 | + | func dc (bP) = ("lastRobberyTime_" + bP) | |
533 | + | ||
534 | + | ||
535 | + | func dd (bP) = ("totalRobberyCountByDuck_" + bP) | |
536 | + | ||
537 | + | ||
538 | + | func de (aw) = ("userRobberyCount_" + aw) | |
539 | + | ||
540 | + | ||
541 | + | func df (aw) = ("userLastRobberyDay_" + aw) | |
542 | + | ||
543 | + | ||
544 | + | func dg (bP) = ("totalDeliveryCountByDuck_" + bP) | |
545 | + | ||
546 | + | ||
547 | + | func dh (aw) = ("userDeliveryCount_" + aw) | |
548 | + | ||
549 | + | ||
550 | + | func di (aw) = ("userLastDeliveryDay_" + aw) | |
551 | + | ||
552 | 552 | ||
553 | 553 | let dj = 10000 | |
554 | 554 | ||
555 | - | let dk = | |
556 | - | ||
557 | - | let dl = | |
558 | - | ||
559 | - | let dm = | |
560 | - | ||
561 | - | let dn = | |
562 | - | ||
563 | - | let do = | |
564 | - | ||
565 | - | let dp = | |
566 | - | ||
567 | - | let dq = | |
568 | - | ||
569 | - | let dr = | |
555 | + | let dk = 10000 | |
556 | + | ||
557 | + | let dl = 2000 | |
558 | + | ||
559 | + | let dm = 10000 | |
560 | + | ||
561 | + | let dn = 2000 | |
562 | + | ||
563 | + | let do = 100000 | |
564 | + | ||
565 | + | let dp = 1000000 | |
566 | + | ||
567 | + | let dq = 5000000 | |
568 | + | ||
569 | + | let dr = 10000 | |
570 | 570 | ||
571 | 571 | let ds = 1000000 | |
572 | 572 | ||
573 | - | let dt = 10000 | |
574 | - | ||
575 | - | func du (dv) = fraction(cB, pow(dv, 4, cC, 4, 4, DOWN), cA) | |
576 | - | ||
577 | - | ||
578 | - | func dw (dx) = (100 + dx) | |
579 | - | ||
580 | - | ||
581 | - | func dy (dz,dA) = { | |
582 | - | let dB = du(dA) | |
583 | - | [dB, (cD * (dB - dz))] | |
584 | - | } | |
585 | - | ||
586 | - | ||
587 | - | func dC (M,bO,dD,dE) = { | |
588 | - | let dF = split(valueOrElse(getString(M, cQ(bO)), "0_0_0_0_0"), "_") | |
589 | - | let dG = valueOrElse(getInteger(M, cS(bO)), 0) | |
590 | - | let dH = valueOrElse(getInteger(M, cP(bO)), dw(dG)) | |
591 | - | let dI = split(valueOrElse(getString(M, da(bO)), "0_0_0_0_0"), "_") | |
592 | - | ([parseIntValue(dF[cF]), parseIntValue(dF[cG]), parseIntValue(dF[cH]), parseIntValue(dF[cI]), parseIntValue(dF[cJ]), dG, dH] ++ (if (dE) | |
593 | - | then [dD, dD, dD, dD, dD] | |
594 | - | else [parseIntValue(dI[cF]), parseIntValue(dI[cG]), parseIntValue(dI[cH]), parseIntValue(dI[cI]), parseIntValue(dI[cJ])])) | |
595 | - | } | |
596 | - | ||
597 | - | ||
598 | - | let dJ = 86400000 | |
599 | - | ||
600 | - | func dK (av) = ("lastArbTimeUser_" + av) | |
601 | - | ||
602 | - | ||
603 | - | func dL (av) = ("acresStakedAmountByUser_" + av) | |
604 | - | ||
605 | - | ||
606 | - | let dM = { | |
607 | - | let g = e | |
608 | - | if ((base58'2W' == g)) | |
573 | + | let dt = 1000000 | |
574 | + | ||
575 | + | let du = 10000 | |
576 | + | ||
577 | + | func dv (dw) = fraction(cC, pow(dw, 4, cD, 4, 4, DOWN), cB) | |
578 | + | ||
579 | + | ||
580 | + | func dx (dy) = (100 + dy) | |
581 | + | ||
582 | + | ||
583 | + | func dz (dA,dB) = { | |
584 | + | let dC = dv(dB) | |
585 | + | [dC, (cE * (dC - dA))] | |
586 | + | } | |
587 | + | ||
588 | + | ||
589 | + | func dD (N,bP,dE,dF) = { | |
590 | + | let dG = split(valueOrElse(getString(N, cR(bP)), "0_0_0_0_0"), "_") | |
591 | + | let dH = valueOrElse(getInteger(N, cT(bP)), 0) | |
592 | + | let dI = valueOrElse(getInteger(N, cQ(bP)), dx(dH)) | |
593 | + | let dJ = split(valueOrElse(getString(N, db(bP)), "0_0_0_0_0"), "_") | |
594 | + | ([parseIntValue(dG[cG]), parseIntValue(dG[cH]), parseIntValue(dG[cI]), parseIntValue(dG[cJ]), parseIntValue(dG[cK]), dH, dI] ++ (if (dF) | |
595 | + | then [dE, dE, dE, dE, dE] | |
596 | + | else [parseIntValue(dJ[cG]), parseIntValue(dJ[cH]), parseIntValue(dJ[cI]), parseIntValue(dJ[cJ]), parseIntValue(dJ[cK])])) | |
597 | + | } | |
598 | + | ||
599 | + | ||
600 | + | let dK = 86400000 | |
601 | + | ||
602 | + | func dL (aw) = ("lastArbTimeUser_" + aw) | |
603 | + | ||
604 | + | ||
605 | + | func dM (aw) = ("acresStakedAmountByUser_" + aw) | |
606 | + | ||
607 | + | ||
608 | + | let dN = { | |
609 | + | let h = f | |
610 | + | if ((base58'2W' == h)) | |
609 | 611 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
610 | - | else if ((base58'2T' == | |
612 | + | else if ((base58'2T' == h)) | |
611 | 613 | then this | |
612 | 614 | else throw("Unknown chain") | |
613 | 615 | } | |
614 | 616 | ||
615 | - | let | |
616 | - | let | |
617 | - | if ((base58'2W' == | |
617 | + | let dO = { | |
618 | + | let h = f | |
619 | + | if ((base58'2W' == h)) | |
618 | 620 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
619 | - | else if ((base58'2T' == | |
621 | + | else if ((base58'2T' == h)) | |
620 | 622 | then this | |
621 | 623 | else throw("Unknown chain") | |
622 | 624 | } | |
623 | 625 | ||
624 | - | let | |
625 | - | ||
626 | - | let | |
627 | - | ||
628 | - | let | |
629 | - | ||
630 | - | let | |
631 | - | ||
632 | - | let | |
633 | - | let | |
634 | - | if ((base58'2W' == | |
626 | + | let dP = 300000 | |
627 | + | ||
628 | + | let dQ = 5000000 | |
629 | + | ||
630 | + | let dR = 50 | |
631 | + | ||
632 | + | let dS = 10000000 | |
633 | + | ||
634 | + | let dT = { | |
635 | + | let h = f | |
636 | + | if ((base58'2W' == h)) | |
635 | 637 | then 252289527462 | |
636 | - | else if ((base58'2T' == | |
638 | + | else if ((base58'2T' == h)) | |
637 | 639 | then 2522895274 | |
638 | 640 | else throw("Unknown chain") | |
639 | 641 | } | |
640 | 642 | ||
641 | - | let | |
642 | - | let | |
643 | - | if ((base58'2W' == | |
643 | + | let dU = { | |
644 | + | let h = f | |
645 | + | if ((base58'2W' == h)) | |
644 | 646 | then 250000000 | |
645 | - | else if ((base58'2T' == | |
647 | + | else if ((base58'2T' == h)) | |
646 | 648 | then 250000000 | |
647 | 649 | else throw("Unknown chain") | |
648 | 650 | } | |
649 | 651 | ||
650 | - | let | |
651 | - | ||
652 | - | let | |
653 | - | ||
654 | - | let | |
655 | - | ||
656 | - | let | |
657 | - | ||
658 | - | let | |
659 | - | ||
660 | - | let | |
661 | - | ||
662 | - | let | |
663 | - | ||
664 | - | let | |
665 | - | ||
666 | - | let | |
667 | - | ||
668 | - | func | |
669 | - | ||
670 | - | ||
671 | - | func | |
672 | - | ||
673 | - | ||
674 | - | func | |
675 | - | ||
676 | - | ||
677 | - | func | |
678 | - | ||
679 | - | ||
680 | - | func | |
681 | - | ||
682 | - | ||
683 | - | func | |
684 | - | ||
685 | - | ||
686 | - | func | |
687 | - | ||
688 | - | ||
689 | - | func | |
690 | - | ||
691 | - | ||
692 | - | func | |
693 | - | ||
694 | - | ||
695 | - | let | |
696 | - | ||
697 | - | let | |
698 | - | ||
699 | - | let | |
700 | - | ||
701 | - | let | |
702 | - | ||
703 | - | let | |
704 | - | ||
705 | - | let | |
706 | - | ||
707 | - | let | |
708 | - | ||
709 | - | let | |
710 | - | ||
711 | - | let | |
712 | - | ||
713 | - | let | |
714 | - | ||
715 | - | let | |
716 | - | ||
717 | - | let | |
718 | - | ||
719 | - | func | |
720 | - | ||
721 | - | ||
722 | - | func | |
723 | - | let | |
724 | - | then ((( | |
725 | - | else -((((-( | |
726 | - | ( | |
727 | - | } | |
728 | - | ||
729 | - | ||
730 | - | func | |
731 | - | let | |
732 | - | if ((0 >= | |
652 | + | let dV = 100000 | |
653 | + | ||
654 | + | let dW = 2500000000 | |
655 | + | ||
656 | + | let dX = toBigInt(5) | |
657 | + | ||
658 | + | let dY = toBigInt(20) | |
659 | + | ||
660 | + | let dZ = toBigInt((20 * 20)) | |
661 | + | ||
662 | + | let ea = toBigInt(((20 * 20) * 20)) | |
663 | + | ||
664 | + | let eb = toBigInt((((20 * 20) * 20) * 20)) | |
665 | + | ||
666 | + | let ec = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
667 | + | ||
668 | + | let ed = 500 | |
669 | + | ||
670 | + | func ee () = "nextLandNum" | |
671 | + | ||
672 | + | ||
673 | + | func ef (eg) = ("lcn_" + eg) | |
674 | + | ||
675 | + | ||
676 | + | func eh (ei) = ("la_" + ei) | |
677 | + | ||
678 | + | ||
679 | + | func ej (bB,ah) = ((("ilao_" + bB) + "_") + ah) | |
680 | + | ||
681 | + | ||
682 | + | func ek (ei) = ("lo_" + ei) | |
683 | + | ||
684 | + | ||
685 | + | func el (eg) = ("duckByCustomName_" + eg) | |
686 | + | ||
687 | + | ||
688 | + | func em (eg) = ("accountByCustomName_" + eg) | |
689 | + | ||
690 | + | ||
691 | + | func en () = "oldiesList" | |
692 | + | ||
693 | + | ||
694 | + | func eo () = "nextRoboDuck" | |
695 | + | ||
696 | + | ||
697 | + | let ep = 0 | |
698 | + | ||
699 | + | let eq = 1 | |
700 | + | ||
701 | + | let er = 2 | |
702 | + | ||
703 | + | let es = 0 | |
704 | + | ||
705 | + | let et = 5 | |
706 | + | ||
707 | + | let eu = 6 | |
708 | + | ||
709 | + | let ev = 7 | |
710 | + | ||
711 | + | let ew = 0 | |
712 | + | ||
713 | + | let ex = 1 | |
714 | + | ||
715 | + | let ey = 0 | |
716 | + | ||
717 | + | let ez = 2 | |
718 | + | ||
719 | + | let eA = 3 | |
720 | + | ||
721 | + | func eB (ei,as) = ((aJ + ei) + as) | |
722 | + | ||
723 | + | ||
724 | + | func eC (eD,eE) = { | |
725 | + | let eF = if ((eD >= 0)) | |
726 | + | then (((eD + eE) - 1) / eE) | |
727 | + | else -((((-(eD) + eE) - 1) / eE)) | |
728 | + | (eF * p) | |
729 | + | } | |
730 | + | ||
731 | + | ||
732 | + | func eG (eH,eI) = { | |
733 | + | let eJ = (((((eI[0] + eI[1]) + eI[2]) + eI[3]) + eI[4]) + eI[5]) | |
734 | + | if ((0 >= eJ)) | |
733 | 735 | then throw("Zero weights sum") | |
734 | 736 | else { | |
735 | - | let | |
736 | - | func | |
737 | - | ||
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | func | |
742 | - | then | |
743 | - | else | |
744 | - | ||
745 | - | func | |
746 | - | then | |
737 | + | let eK = fraction(eH, o, eJ) | |
738 | + | func eL (eM,eN) = (eM :+ fraction(eN, eK, o)) | |
739 | + | ||
740 | + | let eO = eI | |
741 | + | let eP = size(eO) | |
742 | + | let eQ = nil | |
743 | + | func eR (eS,eT) = if ((eT >= eP)) | |
744 | + | then eS | |
745 | + | else eL(eS, eO[eT]) | |
746 | + | ||
747 | + | func eU (eS,eT) = if ((eT >= eP)) | |
748 | + | then eS | |
747 | 749 | else throw("List size exceeds 6") | |
748 | 750 | ||
749 | - | | |
750 | - | } | |
751 | - | } | |
752 | - | ||
753 | - | ||
754 | - | func | |
755 | - | let | |
756 | - | if ((size( | |
751 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
752 | + | } | |
753 | + | } | |
754 | + | ||
755 | + | ||
756 | + | func eV (eH) = { | |
757 | + | let eW = split(value(getString(ad())), "_") | |
758 | + | if ((size(eW) != aN)) | |
757 | 759 | then throw("Wrong proportions data") | |
758 | 760 | else { | |
759 | - | let | |
760 | - | | |
761 | - | } | |
762 | - | } | |
763 | - | ||
764 | - | ||
765 | - | func | |
766 | - | let | |
767 | - | func | |
768 | - | let | |
769 | - | if ((0 > | |
770 | - | then throw(((((("Not enough material idx=" + toString( | |
771 | - | else ( | |
772 | - | } | |
773 | - | ||
774 | - | if ( | |
761 | + | let eX = [parseIntValue(eW[0]), parseIntValue(eW[1]), parseIntValue(eW[2]), parseIntValue(eW[3]), parseIntValue(eW[4]), parseIntValue(eW[5])] | |
762 | + | eG(eH, eX) | |
763 | + | } | |
764 | + | } | |
765 | + | ||
766 | + | ||
767 | + | func eY (eZ,fa,fb) = { | |
768 | + | let fc = eV(fb) | |
769 | + | func fd (eM,L) = { | |
770 | + | let fe = (parseIntValue(fa[L]) - fc[L]) | |
771 | + | if ((0 > fe)) | |
772 | + | then throw(((((("Not enough material idx=" + toString(L)) + ", you have ") + fa[L]) + ", but need ") + toString(fc[L]))) | |
773 | + | else (eM :+ toString(fe)) | |
774 | + | } | |
775 | + | ||
776 | + | if (eZ) | |
775 | 777 | then { | |
776 | - | let | |
777 | - | let | |
778 | - | let | |
779 | - | func | |
780 | - | then | |
781 | - | else | |
782 | - | ||
783 | - | func | |
784 | - | then | |
778 | + | let eO = v | |
779 | + | let eP = size(eO) | |
780 | + | let eQ = nil | |
781 | + | func eR (eS,eT) = if ((eT >= eP)) | |
782 | + | then eS | |
783 | + | else fd(eS, eO[eT]) | |
784 | + | ||
785 | + | func eU (eS,eT) = if ((eT >= eP)) | |
786 | + | then eS | |
785 | 787 | else throw("List size exceeds 6") | |
786 | 788 | ||
787 | - | | |
788 | - | } | |
789 | - | else | |
790 | - | } | |
791 | - | ||
792 | - | ||
793 | - | func | |
794 | - | then $Tuple3( | |
789 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
790 | + | } | |
791 | + | else fa | |
792 | + | } | |
793 | + | ||
794 | + | ||
795 | + | func ff (fg,fh) = if ((fh == "")) | |
796 | + | then $Tuple3(fg, false, false) | |
795 | 797 | else { | |
796 | - | func | |
797 | - | let | |
798 | - | if ((size( | |
798 | + | func fi (eM,fj) = { | |
799 | + | let fk = split(fj, ",") | |
800 | + | if ((size(fk) != 2)) | |
799 | 801 | then throw("Incorrect format, should be index,amount") | |
800 | 802 | else { | |
801 | - | let | |
802 | - | if (if ((0 > | |
803 | + | let L = parseIntValue(fk[0]) | |
804 | + | if (if ((0 > L)) | |
803 | 805 | then true | |
804 | - | else ( | |
806 | + | else (L >= size(be))) | |
805 | 807 | then throw("Unknown product idx") | |
806 | 808 | else { | |
807 | - | let | |
808 | - | let | |
809 | - | if ((size( | |
810 | - | then throw((("You don't have " + | |
809 | + | let fl = parseIntValue(fk[1]) | |
810 | + | let fm = split(eM._1, (fk[0] + ":")) | |
811 | + | if ((size(fm) != 2)) | |
812 | + | then throw((("You don't have " + bb[L]) + " equipped")) | |
811 | 813 | else { | |
812 | - | let | |
813 | - | let | |
814 | + | let fn = fm[1] | |
815 | + | let fo = if (at(take(drop(fn, 1), 1))) | |
814 | 816 | then 2 | |
815 | 817 | else 1 | |
816 | - | let | |
817 | - | let | |
818 | - | let | |
819 | - | then ( | |
820 | - | else throw(((((("You equipped " + toString( | |
821 | - | $Tuple3((((( | |
818 | + | let fp = parseIntValue(take(fn, fo)) | |
819 | + | let fq = drop(fn, fo) | |
820 | + | let fr = if ((fp >= fl)) | |
821 | + | then (fp - fl) | |
822 | + | else throw(((((("You equipped " + toString(fp)) + " of ") + bb[L]) + ", but tried to use ") + toString(fl))) | |
823 | + | $Tuple3(((((fm[0] + fk[0]) + ":") + toString(fr)) + fq), if (eM._2) | |
822 | 824 | then true | |
823 | - | else if (if (( | |
824 | - | then (8 >= | |
825 | + | else if (if ((L >= 6)) | |
826 | + | then (8 >= L) | |
825 | 827 | else false) | |
826 | - | then ( | |
827 | - | else false, if ( | |
828 | + | then (fr == 0) | |
829 | + | else false, if (eM._3) | |
828 | 830 | then true | |
829 | - | else if (if (( | |
830 | - | then (5 >= | |
831 | + | else if (if ((L >= 3)) | |
832 | + | then (5 >= L) | |
831 | 833 | else false) | |
832 | - | then ( | |
834 | + | then (fl > 0) | |
833 | 835 | else false) | |
834 | 836 | } | |
835 | 837 | } | |
836 | 838 | } | |
837 | 839 | } | |
838 | 840 | ||
839 | - | let | |
840 | - | let | |
841 | - | let | |
842 | - | func | |
843 | - | then | |
844 | - | else | |
845 | - | ||
846 | - | func | |
847 | - | then | |
841 | + | let eO = split(fh, "_") | |
842 | + | let eP = size(eO) | |
843 | + | let eQ = $Tuple3(fg, false, false) | |
844 | + | func eR (eS,eT) = if ((eT >= eP)) | |
845 | + | then eS | |
846 | + | else fi(eS, eO[eT]) | |
847 | + | ||
848 | + | func eU (eS,eT) = if ((eT >= eP)) | |
849 | + | then eS | |
848 | 850 | else throw("List size exceeds 10") | |
849 | 851 | ||
850 | - | | |
851 | - | } | |
852 | - | ||
853 | - | ||
854 | - | func | |
855 | - | let | |
852 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
853 | + | } | |
854 | + | ||
855 | + | ||
856 | + | func fs (ft) = { | |
857 | + | let fu = if ((ft == "")) | |
856 | 858 | then nil | |
857 | - | else split_4C( | |
858 | - | func | |
859 | - | let | |
860 | - | let | |
861 | - | then parseIntValue( | |
859 | + | else split_4C(ft, "_") | |
860 | + | func fv (eM,cw) = { | |
861 | + | let fw = (size(eM) / 8) | |
862 | + | let fp = if ((size(fu) > fw)) | |
863 | + | then parseIntValue(fu[fw]) | |
862 | 864 | else 0 | |
863 | - | ( | |
864 | - | } | |
865 | - | ||
866 | - | let | |
867 | - | let | |
868 | - | let | |
869 | - | func | |
870 | - | then | |
871 | - | else | |
872 | - | ||
873 | - | func | |
874 | - | then | |
865 | + | (eM + toBytes(fp)) | |
866 | + | } | |
867 | + | ||
868 | + | let eO = be | |
869 | + | let eP = size(eO) | |
870 | + | let eQ = base58'' | |
871 | + | func eR (eS,eT) = if ((eT >= eP)) | |
872 | + | then eS | |
873 | + | else fv(eS, eO[eT]) | |
874 | + | ||
875 | + | func eU (eS,eT) = if ((eT >= eP)) | |
876 | + | then eS | |
875 | 877 | else throw("List size exceeds 50") | |
876 | 878 | ||
877 | - | | |
878 | - | } | |
879 | - | ||
880 | - | ||
881 | - | func | |
882 | - | func | |
883 | - | let | |
884 | - | let | |
885 | - | ( | |
879 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
880 | + | } | |
881 | + | ||
882 | + | ||
883 | + | func fx (fy) = { | |
884 | + | func fz (eM,cw) = { | |
885 | + | let fw = size(eM) | |
886 | + | let fA = take(drop(fy, (8 * fw)), 8) | |
887 | + | (eM :+ toString(toInt(fA))) | |
886 | 888 | } | |
887 | 889 | ||
888 | 890 | makeString_2C({ | |
889 | - | let | |
890 | - | let | |
891 | - | let | |
892 | - | func | |
893 | - | then | |
894 | - | else | |
895 | - | ||
896 | - | func | |
897 | - | then | |
891 | + | let eO = be | |
892 | + | let eP = size(eO) | |
893 | + | let eQ = nil | |
894 | + | func eR (eS,eT) = if ((eT >= eP)) | |
895 | + | then eS | |
896 | + | else fz(eS, eO[eT]) | |
897 | + | ||
898 | + | func eU (eS,eT) = if ((eT >= eP)) | |
899 | + | then eS | |
898 | 900 | else throw("List size exceeds 50") | |
899 | 901 | ||
900 | - | | |
902 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
901 | 903 | }, "_") | |
902 | 904 | } | |
903 | 905 | ||
904 | 906 | ||
905 | - | func | |
906 | - | func | |
907 | - | let | |
908 | - | then | |
907 | + | func fB (fC,fD) = { | |
908 | + | func fE (eM,fw) = { | |
909 | + | let fF = if ((size(fC) > (7 + fw))) | |
910 | + | then fC[(7 + fw)] | |
909 | 911 | else 0 | |
910 | - | if ((parseIntValue( | |
911 | - | then throw(("Requirement not satisfied: " + | |
912 | + | if ((parseIntValue(fD[fw]) > (fC[fw] + fF))) | |
913 | + | then throw(("Requirement not satisfied: " + cF[fw])) | |
912 | 914 | else true | |
913 | 915 | } | |
914 | 916 | ||
915 | - | let | |
916 | - | let | |
917 | - | let | |
918 | - | func | |
919 | - | then | |
920 | - | else | |
921 | - | ||
922 | - | func | |
923 | - | then | |
917 | + | let eO = [0, 1, 2, 3, 4, 5, 6] | |
918 | + | let eP = size(eO) | |
919 | + | let eQ = false | |
920 | + | func eR (eS,eT) = if ((eT >= eP)) | |
921 | + | then eS | |
922 | + | else fE(eS, eO[eT]) | |
923 | + | ||
924 | + | func eU (eS,eT) = if ((eT >= eP)) | |
925 | + | then eS | |
924 | 926 | else throw("List size exceeds 7") | |
925 | 927 | ||
926 | - | | |
927 | - | } | |
928 | - | ||
929 | - | ||
930 | - | func | |
931 | - | let | |
932 | - | if ((size( | |
928 | + | eU(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7) | |
929 | + | } | |
930 | + | ||
931 | + | ||
932 | + | func fG (fH,fu,fI,fJ,fK,fL,fC) = { | |
933 | + | let fk = split(fH, ":") | |
934 | + | if ((size(fk) != 2)) | |
933 | 935 | then throw("Incorrect format, should be index:amount") | |
934 | - | else if (if (!( | |
935 | - | then (size( | |
936 | + | else if (if (!(fI)) | |
937 | + | then (size(fk[0]) != 2) | |
936 | 938 | else false) | |
937 | 939 | then throw("Product idx should be 2 digits, zero padded") | |
938 | 940 | else { | |
939 | - | let | |
940 | - | let | |
941 | - | if (if ((0 > | |
941 | + | let fM = parseIntValue(fk[0]) | |
942 | + | let fN = parseIntValue(fk[1]) | |
943 | + | if (if ((0 > fM)) | |
942 | 944 | then true | |
943 | - | else ( | |
945 | + | else (fM >= size(be))) | |
944 | 946 | then throw("Unknown product idx") | |
945 | - | else if ((0 > | |
947 | + | else if ((0 > fN)) | |
946 | 948 | then throw("Count can't be negative") | |
947 | - | else if (( | |
948 | - | then throw(((("Can't put more than " + toString( | |
949 | - | else if (( | |
950 | - | then $Tuple2( | |
949 | + | else if ((fN > cP)) | |
950 | + | then throw(((("Can't put more than " + toString(cP)) + " of ") + bb[fM])) | |
951 | + | else if ((fN == 0)) | |
952 | + | then $Tuple2(fu, false) | |
951 | 953 | else { | |
952 | - | let | |
953 | - | let | |
954 | - | let | |
955 | - | let | |
956 | - | if (if (!( | |
957 | - | then ( | |
954 | + | let fO = take(fu, (8 * fM)) | |
955 | + | let fp = toInt(take(drop(fu, (8 * fM)), 8)) | |
956 | + | let fq = drop(fu, (8 * (fM + 1))) | |
957 | + | let cw = split(be[fM], "_") | |
958 | + | if (if (!(fI)) | |
959 | + | then (fN > fp) | |
958 | 960 | else false) | |
959 | - | then throw(((((("You have " + toString( | |
961 | + | then throw(((((("You have " + toString(fp)) + " of ") + bb[fM]) + ", but tried to use ") + toString(fN))) | |
960 | 962 | else { | |
961 | - | let | |
962 | - | then | |
963 | + | let fP = if (if (!(fI)) | |
964 | + | then fB(fC, split(cw[bh], ",")) | |
963 | 965 | else false) | |
964 | 966 | then { | |
965 | - | let | |
966 | - | if (( | |
967 | + | let fQ = cw[bi] | |
968 | + | if ((fQ == "")) | |
967 | 969 | then throw("Item cannot be equipped") | |
968 | 970 | else { | |
969 | - | let | |
970 | - | let | |
971 | - | if (( | |
971 | + | let fR = parseIntValue(fQ) | |
972 | + | let fS = (fR / 100) | |
973 | + | if ((fJ != fS)) | |
972 | 974 | then throw("Segment incompatible") | |
973 | 975 | else { | |
974 | - | let | |
975 | - | if (( | |
976 | + | let fT = ((fR % 100) / 10) | |
977 | + | if ((fK != fT)) | |
976 | 978 | then throw("Slot incompatible") | |
977 | 979 | else { | |
978 | - | let | |
979 | - | if (if (( | |
980 | - | then ( | |
980 | + | let fU = (fR % 10) | |
981 | + | if (if ((fL != 0)) | |
982 | + | then (fU > 1) | |
981 | 983 | else false) | |
982 | 984 | then throw("Big items should occupy slot 0") | |
983 | - | else ( | |
985 | + | else (fU > 1) | |
984 | 986 | } | |
985 | 987 | } | |
986 | 988 | } | |
987 | 989 | } | |
988 | 990 | else false | |
989 | - | $Tuple2((( | |
990 | - | then | |
991 | - | else -( | |
991 | + | $Tuple2(((fO + toBytes((fp + (if (fI) | |
992 | + | then fN | |
993 | + | else -(fN))))) + fq), fP) | |
992 | 994 | } | |
993 | 995 | } | |
994 | 996 | } | |
995 | 997 | } | |
996 | 998 | ||
997 | 999 | ||
998 | - | func | |
1000 | + | func fV (fW,fX,fI,fJ,fK,fY) = if ((fW != "")) | |
999 | 1001 | then { | |
1000 | - | let | |
1001 | - | if ((size( | |
1002 | + | let fZ = split(fW, ",") | |
1003 | + | if ((size(fZ) > cO)) | |
1002 | 1004 | then throw("Wrong slots format") | |
1003 | 1005 | else { | |
1004 | - | let | |
1005 | - | let | |
1006 | - | then | |
1006 | + | let ga = fZ[0] | |
1007 | + | let gb = if ((size(fZ) > 1)) | |
1008 | + | then fZ[1] | |
1007 | 1009 | else "" | |
1008 | - | if (if (( | |
1009 | - | then ( | |
1010 | + | if (if ((ga == "")) | |
1011 | + | then (gb == "") | |
1010 | 1012 | else false) | |
1011 | - | then | |
1013 | + | then fX | |
1012 | 1014 | else { | |
1013 | - | let | |
1014 | - | then | |
1015 | - | else $Tuple2( | |
1016 | - | if (( | |
1017 | - | then if ( | |
1015 | + | let gc = if ((ga != "")) | |
1016 | + | then fG(ga, fX, fI, fJ, fK, 0, fY) | |
1017 | + | else $Tuple2(fX, false) | |
1018 | + | if ((gb != "")) | |
1019 | + | then if (gc._2) | |
1018 | 1020 | then throw("Big item already occupies slot") | |
1019 | - | else | |
1020 | - | else | |
1021 | + | else fG(gb, gc._1, fI, fJ, fK, 1, fY)._1 | |
1022 | + | else gc._1 | |
1021 | 1023 | } | |
1022 | 1024 | } | |
1023 | 1025 | } | |
1024 | - | else | |
1025 | - | ||
1026 | - | ||
1027 | - | func | |
1028 | - | func | |
1029 | - | let | |
1030 | - | let | |
1031 | - | if ((size( | |
1026 | + | else fX | |
1027 | + | ||
1028 | + | ||
1029 | + | func gd (ge,gf,fI,fY) = { | |
1030 | + | func fJ (eM,gg) = { | |
1031 | + | let fw = eM._1 | |
1032 | + | let fK = split(gg, ";") | |
1033 | + | if ((size(fK) != cN)) | |
1032 | 1034 | then throw("Wrong segment format") | |
1033 | 1035 | else { | |
1034 | - | let | |
1035 | - | let | |
1036 | - | if (if (( | |
1037 | - | then ( | |
1036 | + | let gh = fK[0] | |
1037 | + | let gi = fK[1] | |
1038 | + | if (if ((gh == "")) | |
1039 | + | then (gi == "") | |
1038 | 1040 | else false) | |
1039 | - | then $Tuple2(( | |
1041 | + | then $Tuple2((fw + 1), eM._2) | |
1040 | 1042 | else { | |
1041 | - | let | |
1042 | - | $Tuple2(( | |
1043 | + | let gj = fV(gh, eM._2, fI, fw, 0, fY) | |
1044 | + | $Tuple2((fw + 1), fV(gi, gj, fI, fw, 1, fY)) | |
1043 | 1045 | } | |
1044 | 1046 | } | |
1045 | 1047 | } | |
1046 | 1048 | ||
1047 | - | ( let | |
1048 | - | let | |
1049 | - | let | |
1050 | - | func | |
1051 | - | then | |
1052 | - | else | |
1053 | - | ||
1054 | - | func | |
1055 | - | then | |
1049 | + | ( let eO = ge | |
1050 | + | let eP = size(eO) | |
1051 | + | let eQ = $Tuple2(0, gf) | |
1052 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1053 | + | then eS | |
1054 | + | else fJ(eS, eO[eT]) | |
1055 | + | ||
1056 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1057 | + | then eS | |
1056 | 1058 | else throw("List size exceeds 6") | |
1057 | 1059 | ||
1058 | - | | |
1059 | - | } | |
1060 | - | ||
1061 | - | ||
1062 | - | func | |
1063 | - | let | |
1064 | - | let | |
1065 | - | let | |
1066 | - | let | |
1067 | - | let | |
1068 | - | let | |
1060 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6))._2 | |
1061 | + | } | |
1062 | + | ||
1063 | + | ||
1064 | + | func gk (bP) = { | |
1065 | + | let gl = cV(bP) | |
1066 | + | let gm = split(valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1067 | + | let gn = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
1068 | + | let go = gd(gm, gn, true, nil) | |
1069 | + | let gp = split(gm[cL], ";")[1] | |
1070 | + | let dE = if ((gp == "")) | |
1069 | 1071 | then 0 | |
1070 | 1072 | else { | |
1071 | - | let | |
1072 | - | if (( | |
1073 | + | let gq = split(gp, ",")[0] | |
1074 | + | if ((gq == "")) | |
1073 | 1075 | then 0 | |
1074 | 1076 | else { | |
1075 | - | let | |
1076 | - | let | |
1077 | - | let | |
1078 | - | if (if (if (if (if (( | |
1077 | + | let fH = split(gq, ":") | |
1078 | + | let L = fH[0] | |
1079 | + | let gr = fH[1] | |
1080 | + | if (if (if (if (if ((L == "06")) | |
1079 | 1081 | then true | |
1080 | - | else ( | |
1082 | + | else (L == "07")) | |
1081 | 1083 | then true | |
1082 | - | else ( | |
1083 | - | then ( | |
1084 | + | else (L == "08")) | |
1085 | + | then (gr != "") | |
1084 | 1086 | else false) | |
1085 | - | then (parseIntValue( | |
1087 | + | then (parseIntValue(gr) > 0) | |
1086 | 1088 | else false) | |
1087 | - | then parseIntValue(split( | |
1089 | + | then parseIntValue(split(be[parseIntValue(L)], "_")[bg]) | |
1088 | 1090 | else 0 | |
1089 | 1091 | } | |
1090 | 1092 | } | |
1091 | - | let | |
1092 | - | let | |
1093 | - | ( | |
1094 | - | } | |
1095 | - | ||
1096 | - | ||
1097 | - | func | |
1093 | + | let fY = dD(this, bP, dE, true) | |
1094 | + | let gs = gd(gm, go, false, fY) | |
1095 | + | (gs == gs) | |
1096 | + | } | |
1097 | + | ||
1098 | + | ||
1099 | + | func gt (gu,gv,gw,gx) = if ((size(gu) != aN)) | |
1098 | 1100 | then throw("Wrong proportions data") | |
1099 | 1101 | else { | |
1100 | - | func | |
1101 | - | let | |
1102 | - | if ((0 > | |
1103 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1104 | - | else ( | |
1105 | - | } | |
1106 | - | ||
1107 | - | let | |
1108 | - | let | |
1109 | - | let | |
1110 | - | func | |
1111 | - | then | |
1112 | - | else | |
1113 | - | ||
1114 | - | func | |
1115 | - | then | |
1102 | + | func gy (eM,gz) = { | |
1103 | + | let fe = (parseIntValue(gu[gz]) + ((gx * gv[gz]) * gw)) | |
1104 | + | if ((0 > fe)) | |
1105 | + | then throw(((((((("Panic! Pieces of type=" + toString(gz)) + ", sign=") + toString(gx)) + ", terrainCounts[i]=") + toString(gv[gz])) + ", landSizeIndex=") + toString(gw))) | |
1106 | + | else (eM :+ toString(fe)) | |
1107 | + | } | |
1108 | + | ||
1109 | + | let eO = v | |
1110 | + | let eP = size(eO) | |
1111 | + | let eQ = nil | |
1112 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1113 | + | then eS | |
1114 | + | else gy(eS, eO[eT]) | |
1115 | + | ||
1116 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1117 | + | then eS | |
1116 | 1118 | else throw("List size exceeds 6") | |
1117 | 1119 | ||
1118 | - | | |
1119 | - | } | |
1120 | - | ||
1121 | - | ||
1122 | - | func | |
1123 | - | let | |
1124 | - | makeString( | |
1125 | - | } | |
1126 | - | ||
1127 | - | ||
1128 | - | func | |
1129 | - | ||
1130 | - | ||
1131 | - | func | |
1132 | - | func | |
1133 | - | let | |
1134 | - | ( | |
1135 | - | } | |
1136 | - | ||
1137 | - | let | |
1138 | - | let | |
1139 | - | let | |
1140 | - | let | |
1141 | - | func | |
1142 | - | then | |
1143 | - | else | |
1144 | - | ||
1145 | - | func | |
1146 | - | then | |
1120 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1121 | + | } | |
1122 | + | ||
1123 | + | ||
1124 | + | func gA (gv,gw,gx) = { | |
1125 | + | let gu = split(valueOrElse(getString(ad()), "0_0_0_0_0_0"), "_") | |
1126 | + | makeString(gt(gu, gv, gw, gx), "_") | |
1127 | + | } | |
1128 | + | ||
1129 | + | ||
1130 | + | func gB (gC) = [(size(split(gC, "A")) - 1), (size(split(gC, "B")) - 1), (size(split(gC, "C")) - 1), (size(split(gC, "D")) - 1), (size(split(gC, "E")) - 1), (size(split(gC, "F")) - 1)] | |
1131 | + | ||
1132 | + | ||
1133 | + | func gD (gE,gv,gF,gw,gG) = { | |
1134 | + | func gH (eM,gz) = { | |
1135 | + | let gI = ((fraction(gF, gG, dK) * gv[gz]) * gw) | |
1136 | + | (eM :+ toString((parseIntValue(gE[gz]) + gI))) | |
1137 | + | } | |
1138 | + | ||
1139 | + | let eX = { | |
1140 | + | let eO = v | |
1141 | + | let eP = size(eO) | |
1142 | + | let eQ = nil | |
1143 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1144 | + | then eS | |
1145 | + | else gH(eS, eO[eT]) | |
1146 | + | ||
1147 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1148 | + | then eS | |
1147 | 1149 | else throw("List size exceeds 6") | |
1148 | 1150 | ||
1149 | - | | |
1150 | - | } | |
1151 | - | makeString( | |
1152 | - | } | |
1153 | - | ||
1154 | - | ||
1155 | - | func | |
1156 | - | func | |
1157 | - | let | |
1158 | - | let | |
1159 | - | $Tuple2(( | |
1160 | - | } | |
1161 | - | ||
1162 | - | let | |
1163 | - | let | |
1164 | - | let | |
1165 | - | func | |
1166 | - | then | |
1167 | - | else | |
1168 | - | ||
1169 | - | func | |
1170 | - | then | |
1151 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1152 | + | } | |
1153 | + | makeString(eX, "_") | |
1154 | + | } | |
1155 | + | ||
1156 | + | ||
1157 | + | func gJ (gE,gv,gF,gw,gG) = { | |
1158 | + | func gH (eM,gz) = { | |
1159 | + | let gI = ((fraction(gF, gG, dK) * gv[gz]) * gw) | |
1160 | + | let gK = (parseIntValue(gE[gz]) + gI) | |
1161 | + | $Tuple2((eM._1 :+ gK), (eM._2 + gK)) | |
1162 | + | } | |
1163 | + | ||
1164 | + | let eO = v | |
1165 | + | let eP = size(eO) | |
1166 | + | let eQ = $Tuple2(nil, 0) | |
1167 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1168 | + | then eS | |
1169 | + | else gH(eS, eO[eT]) | |
1170 | + | ||
1171 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1172 | + | then eS | |
1171 | 1173 | else throw("List size exceeds 6") | |
1172 | 1174 | ||
1173 | - | | |
1174 | - | } | |
1175 | - | ||
1176 | - | ||
1177 | - | func | |
1178 | - | func | |
1179 | - | let | |
1180 | - | $Tuple2(( | |
1181 | - | } | |
1182 | - | ||
1183 | - | let | |
1184 | - | let | |
1185 | - | let | |
1186 | - | func | |
1187 | - | then | |
1188 | - | else | |
1189 | - | ||
1190 | - | func | |
1191 | - | then | |
1175 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1176 | + | } | |
1177 | + | ||
1178 | + | ||
1179 | + | func gL (gv,gF,gw,gG) = { | |
1180 | + | func gH (eM,gM) = { | |
1181 | + | let gI = ((fraction(gF, gG, dK) * gM) * gw) | |
1182 | + | $Tuple2((eM._1 :+ gI), (eM._2 + gI)) | |
1183 | + | } | |
1184 | + | ||
1185 | + | let eO = gv | |
1186 | + | let eP = size(eO) | |
1187 | + | let eQ = $Tuple2(nil, 0) | |
1188 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1189 | + | then eS | |
1190 | + | else gH(eS, eO[eT]) | |
1191 | + | ||
1192 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1193 | + | then eS | |
1192 | 1194 | else throw("List size exceeds 6") | |
1193 | 1195 | ||
1194 | - | | |
1195 | - | } | |
1196 | - | ||
1197 | - | ||
1198 | - | func | |
1199 | - | let | |
1200 | - | let | |
1201 | - | if (( | |
1202 | - | then $Tuple2(makeString( | |
1203 | - | else if (( | |
1196 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1197 | + | } | |
1198 | + | ||
1199 | + | ||
1200 | + | func gN (gO,gP,gQ,gR) = { | |
1201 | + | let gS = gQ._1 | |
1202 | + | let gT = gQ._2 | |
1203 | + | if ((gT == 0)) | |
1204 | + | then $Tuple2(makeString(gO, "_"), makeString(gP, "_")) | |
1205 | + | else if ((gR >= gT)) | |
1204 | 1206 | then { | |
1205 | - | func | |
1206 | - | ||
1207 | - | let | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let | |
1211 | - | func | |
1212 | - | then | |
1213 | - | else | |
1214 | - | ||
1215 | - | func | |
1216 | - | then | |
1207 | + | func gU (eM,gz) = (eM :+ toString((parseIntValue(gO[gz]) + gS[gz]))) | |
1208 | + | ||
1209 | + | let eX = { | |
1210 | + | let eO = v | |
1211 | + | let eP = size(eO) | |
1212 | + | let eQ = nil | |
1213 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1214 | + | then eS | |
1215 | + | else gU(eS, eO[eT]) | |
1216 | + | ||
1217 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1218 | + | then eS | |
1217 | 1219 | else throw("List size exceeds 6") | |
1218 | 1220 | ||
1219 | - | | |
1221 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1220 | 1222 | } | |
1221 | - | $Tuple2(makeString( | |
1223 | + | $Tuple2(makeString(eX, "_"), makeString(gP, "_")) | |
1222 | 1224 | } | |
1223 | 1225 | else { | |
1224 | - | func | |
1225 | - | let | |
1226 | - | $Tuple2(( | |
1226 | + | func gV (eM,gz) = { | |
1227 | + | let gW = fraction(gS[gz], gR, gT) | |
1228 | + | $Tuple2((eM._1 :+ toString((parseIntValue(gO[gz]) + gW))), (eM._2 :+ toString(((parseIntValue(gP[gz]) + gS[gz]) - gW)))) | |
1227 | 1229 | } | |
1228 | 1230 | ||
1229 | - | let | |
1230 | - | let | |
1231 | - | let | |
1232 | - | let | |
1233 | - | func | |
1234 | - | then | |
1235 | - | else | |
1236 | - | ||
1237 | - | func | |
1238 | - | then | |
1231 | + | let eX = { | |
1232 | + | let eO = v | |
1233 | + | let eP = size(eO) | |
1234 | + | let eQ = $Tuple2(nil, nil) | |
1235 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1236 | + | then eS | |
1237 | + | else gV(eS, eO[eT]) | |
1238 | + | ||
1239 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1240 | + | then eS | |
1239 | 1241 | else throw("List size exceeds 6") | |
1240 | 1242 | ||
1241 | - | | |
1243 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1242 | 1244 | } | |
1243 | - | $Tuple2(makeString( | |
1245 | + | $Tuple2(makeString(eX._1, "_"), makeString(eX._2, "_")) | |
1244 | 1246 | } | |
1245 | 1247 | } | |
1246 | 1248 | ||
1247 | 1249 | ||
1248 | - | func | |
1249 | - | then | |
1250 | - | else -( | |
1251 | - | ||
1252 | - | ||
1253 | - | let | |
1254 | - | ||
1255 | - | func | |
1256 | - | let | |
1257 | - | let | |
1250 | + | func gX (gY) = if ((gY >= toBigInt(0))) | |
1251 | + | then gY | |
1252 | + | else -(gY) | |
1253 | + | ||
1254 | + | ||
1255 | + | let gZ = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
1256 | + | ||
1257 | + | func ha (an,hb) = { | |
1258 | + | let hc = toInt((an % dY)) | |
1259 | + | let hd = if ((hb[0] > hc)) | |
1258 | 1260 | then "A" | |
1259 | - | else if (( | |
1261 | + | else if ((hb[1] > hc)) | |
1260 | 1262 | then "B" | |
1261 | - | else if (( | |
1263 | + | else if ((hb[2] > hc)) | |
1262 | 1264 | then "C" | |
1263 | - | else if (( | |
1265 | + | else if ((hb[3] > hc)) | |
1264 | 1266 | then "D" | |
1265 | - | else if (( | |
1267 | + | else if ((hb[4] > hc)) | |
1266 | 1268 | then "E" | |
1267 | 1269 | else "F" | |
1268 | - | | |
1269 | - | } | |
1270 | - | ||
1271 | - | ||
1272 | - | func | |
1273 | - | let | |
1274 | - | func | |
1275 | - | ||
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | func | |
1281 | - | then | |
1282 | - | else | |
1283 | - | ||
1284 | - | func | |
1285 | - | then | |
1270 | + | hd | |
1271 | + | } | |
1272 | + | ||
1273 | + | ||
1274 | + | func he (hf,hg) = { | |
1275 | + | let hh = gZ[hg] | |
1276 | + | func hi (eM,eN) = $Tuple2((((((eM._1 + ha(eM._2, hh)) + ha((eM._2 / dY), hh)) + ha((eM._2 / dZ), hh)) + ha((eM._2 / ea), hh)) + ha((eM._2 / eb), hh)), (eM._2 / ec)) | |
1277 | + | ||
1278 | + | let hj = { | |
1279 | + | let eO = [1, 2, 3, 4, 5] | |
1280 | + | let eP = size(eO) | |
1281 | + | let eQ = $Tuple2("", (hf / dX)) | |
1282 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1283 | + | then eS | |
1284 | + | else hi(eS, eO[eT]) | |
1285 | + | ||
1286 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1287 | + | then eS | |
1286 | 1288 | else throw("List size exceeds 5") | |
1287 | 1289 | ||
1288 | - | | |
1289 | - | } | |
1290 | - | | |
1291 | - | } | |
1292 | - | ||
1293 | - | ||
1294 | - | let | |
1295 | - | ||
1296 | - | let | |
1297 | - | ||
1298 | - | func | |
1299 | - | func | |
1300 | - | let | |
1301 | - | let | |
1302 | - | let | |
1290 | + | eU(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5) | |
1291 | + | } | |
1292 | + | hj._1 | |
1293 | + | } | |
1294 | + | ||
1295 | + | ||
1296 | + | let hk = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1297 | + | ||
1298 | + | let hl = ["A", "B", "C", "D", "E", "F"] | |
1299 | + | ||
1300 | + | func hm (hn,gw) = { | |
1301 | + | func ho (eM,al) = { | |
1302 | + | let fw = eM._2 | |
1303 | + | let hp = parseIntValue(al) | |
1304 | + | let gY = if ((hp == 0)) | |
1303 | 1305 | then 0 | |
1304 | - | else if (( | |
1305 | - | then ( | |
1306 | - | else if (( | |
1306 | + | else if ((hp >= (4 * gw))) | |
1307 | + | then (hp / gw) | |
1308 | + | else if ((hp > (3 * gw))) | |
1307 | 1309 | then 3 | |
1308 | - | else ((( | |
1309 | - | $Tuple3(( | |
1310 | - | } | |
1311 | - | ||
1312 | - | let | |
1313 | - | let | |
1314 | - | let | |
1315 | - | let | |
1316 | - | func | |
1317 | - | then | |
1318 | - | else | |
1319 | - | ||
1320 | - | func | |
1321 | - | then | |
1310 | + | else (((hp - 1) / gw) + 1) | |
1311 | + | $Tuple3((eM._1 :+ gY), (eM._2 + 1), (eM._3 + gY)) | |
1312 | + | } | |
1313 | + | ||
1314 | + | let hj = { | |
1315 | + | let eO = hn | |
1316 | + | let eP = size(eO) | |
1317 | + | let eQ = $Tuple3(nil, 0, 0) | |
1318 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1319 | + | then eS | |
1320 | + | else ho(eS, eO[eT]) | |
1321 | + | ||
1322 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1323 | + | then eS | |
1322 | 1324 | else throw("List size exceeds 6") | |
1323 | 1325 | ||
1324 | - | | |
1325 | - | } | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | func | |
1330 | - | let | |
1331 | - | then ( | |
1332 | - | else | |
1333 | - | let | |
1326 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1327 | + | } | |
1328 | + | let hq = hj._1 | |
1329 | + | let hr = value(indexOf(hq, max(hq))) | |
1330 | + | let hs = (hj._3 - 25) | |
1331 | + | func ht (eM,L) = { | |
1332 | + | let ay = if ((L == hr)) | |
1333 | + | then (hq[L] - hs) | |
1334 | + | else hq[L] | |
1335 | + | let aC = if ((ay == 0)) | |
1334 | 1336 | then nil | |
1335 | - | else split(drop(toString(pow(10, 0, | |
1336 | - | let | |
1337 | - | func | |
1338 | - | ||
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | func | |
1344 | - | then | |
1345 | - | else | |
1346 | - | ||
1347 | - | func | |
1348 | - | then | |
1337 | + | else split(drop(toString(pow(10, 0, ay, 0, 0, DOWN)), 1), "") | |
1338 | + | let fR = hl[L] | |
1339 | + | func hu (hv,hw) = (hv :+ fR) | |
1340 | + | ||
1341 | + | let hx = { | |
1342 | + | let eO = aC | |
1343 | + | let eP = size(eO) | |
1344 | + | let eQ = nil | |
1345 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1346 | + | then eS | |
1347 | + | else hu(eS, eO[eT]) | |
1348 | + | ||
1349 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1350 | + | then eS | |
1349 | 1351 | else throw("List size exceeds 25") | |
1350 | 1352 | ||
1351 | - | hy( | |
1352 | - | } | |
1353 | - | ( | |
1354 | - | } | |
1355 | - | ||
1356 | - | let | |
1357 | - | let | |
1358 | - | let | |
1359 | - | let | |
1360 | - | func | |
1361 | - | then | |
1362 | - | else | |
1363 | - | ||
1364 | - | func | |
1365 | - | then | |
1353 | + | hz(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25) | |
1354 | + | } | |
1355 | + | (eM ++ hx) | |
1356 | + | } | |
1357 | + | ||
1358 | + | let eX = { | |
1359 | + | let eO = v | |
1360 | + | let eP = size(eO) | |
1361 | + | let eQ = nil | |
1362 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1363 | + | then eS | |
1364 | + | else ht(eS, eO[eT]) | |
1365 | + | ||
1366 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1367 | + | then eS | |
1366 | 1368 | else throw("List size exceeds 6") | |
1367 | 1369 | ||
1368 | - | hy( | |
1369 | - | } | |
1370 | - | func | |
1371 | - | ||
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | func | |
1376 | - | then | |
1377 | - | else | |
1378 | - | ||
1379 | - | func | |
1380 | - | then | |
1370 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1371 | + | } | |
1372 | + | func hA (eM,fw) = (eM + eX[fw]) | |
1373 | + | ||
1374 | + | let eO = hk | |
1375 | + | let eP = size(eO) | |
1376 | + | let eQ = "" | |
1377 | + | func hB (eS,eT) = if ((eT >= eP)) | |
1378 | + | then eS | |
1379 | + | else hA(eS, eO[eT]) | |
1380 | + | ||
1381 | + | func hC (eS,eT) = if ((eT >= eP)) | |
1382 | + | then eS | |
1381 | 1383 | else throw("List size exceeds 25") | |
1382 | 1384 | ||
1383 | - | hB( | |
1384 | - | } | |
1385 | - | ||
1386 | - | ||
1387 | - | func | |
1388 | - | let | |
1389 | - | [toString(valueOrElse(parseInt( | |
1390 | - | then | |
1391 | - | else "0_0_0_0_0_0", if ((size(split( | |
1392 | - | then | |
1393 | - | else "0_0_0_0_0_0", | |
1394 | - | } | |
1395 | - | ||
1396 | - | ||
1397 | - | func | |
1398 | - | let | |
1399 | - | (( | |
1400 | - | } | |
1401 | - | ||
1402 | - | ||
1403 | - | func | |
1404 | - | let | |
1405 | - | func | |
1406 | - | ||
1407 | - | func | |
1408 | - | let | |
1409 | - | let | |
1410 | - | $Tuple2(( | |
1411 | - | } | |
1412 | - | ||
1413 | - | let | |
1414 | - | let | |
1415 | - | let | |
1416 | - | let | |
1417 | - | func | |
1418 | - | then | |
1419 | - | else | |
1420 | - | ||
1421 | - | func | |
1422 | - | then | |
1385 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25) | |
1386 | + | } | |
1387 | + | ||
1388 | + | ||
1389 | + | func hD (hE) = { | |
1390 | + | let hF = split(valueOrElse(getString(hE), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1391 | + | [toString(valueOrElse(parseInt(hF[bt]), 0)), if ((size(split(hF[bu], "_")) == aN)) | |
1392 | + | then hF[bu] | |
1393 | + | else "0_0_0_0_0_0", if ((size(split(hF[bv], "_")) == aN)) | |
1394 | + | then hF[bv] | |
1395 | + | else "0_0_0_0_0_0", hF[bw]] | |
1396 | + | } | |
1397 | + | ||
1398 | + | ||
1399 | + | func hG (hH) = { | |
1400 | + | let fk = split(hH, "_") | |
1401 | + | ((aQ * (parseIntValue(fk[1]) + 1)) * parseIntValue(fk[0])) | |
1402 | + | } | |
1403 | + | ||
1404 | + | ||
1405 | + | func hI (hJ) = { | |
1406 | + | let hK = hJ[bn] | |
1407 | + | func hL (eM,hM) = (eM + parseIntValue(hM)) | |
1408 | + | ||
1409 | + | func hN (eM,hM) = { | |
1410 | + | let L = eM._1 | |
1411 | + | let eF = (((parseIntValue(hM) + bj) - 1) / bj) | |
1412 | + | $Tuple2((L + 1), (eM._2 + (eF * p))) | |
1413 | + | } | |
1414 | + | ||
1415 | + | let hO = { | |
1416 | + | let eO = split(hJ[bl], "_") | |
1417 | + | let eP = size(eO) | |
1418 | + | let eQ = 0 | |
1419 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1420 | + | then eS | |
1421 | + | else hL(eS, eO[eT]) | |
1422 | + | ||
1423 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1424 | + | then eS | |
1423 | 1425 | else throw("List size exceeds 6") | |
1424 | 1426 | ||
1425 | - | | |
1426 | - | } | |
1427 | - | let | |
1428 | - | let | |
1429 | - | let | |
1430 | - | let | |
1431 | - | func | |
1432 | - | then | |
1433 | - | else | |
1434 | - | ||
1435 | - | func | |
1436 | - | then | |
1427 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1428 | + | } | |
1429 | + | let hP = { | |
1430 | + | let eO = split(hJ[bm], "_") | |
1431 | + | let eP = size(eO) | |
1432 | + | let eQ = 0 | |
1433 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1434 | + | then eS | |
1435 | + | else hL(eS, eO[eT]) | |
1436 | + | ||
1437 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1438 | + | then eS | |
1437 | 1439 | else throw("List size exceeds 6") | |
1438 | 1440 | ||
1439 | - | hy( | |
1440 | - | } | |
1441 | - | let | |
1441 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1442 | + | } | |
1443 | + | let hQ = if ((hK == "")) | |
1442 | 1444 | then 0 | |
1443 | - | else ( let | |
1444 | - | let | |
1445 | - | let | |
1446 | - | func | |
1447 | - | then | |
1448 | - | else | |
1449 | - | ||
1450 | - | func | |
1451 | - | then | |
1445 | + | else ( let eO = split_4C(hK, "_") | |
1446 | + | let eP = size(eO) | |
1447 | + | let eQ = $Tuple2(0, 0) | |
1448 | + | func hB (eS,eT) = if ((eT >= eP)) | |
1449 | + | then eS | |
1450 | + | else hN(eS, eO[eT]) | |
1451 | + | ||
1452 | + | func hC (eS,eT) = if ((eT >= eP)) | |
1453 | + | then eS | |
1452 | 1454 | else throw("List size exceeds 50") | |
1453 | 1455 | ||
1454 | - | hB( | |
1455 | - | (( | |
1456 | - | } | |
1457 | - | ||
1458 | - | ||
1459 | - | func | |
1460 | - | let | |
1461 | - | let | |
1462 | - | let | |
1463 | - | let | |
1464 | - | let | |
1465 | - | let | |
1466 | - | then makeString(["0", toString( | |
1456 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
1457 | + | ((hO + hP) + hQ) | |
1458 | + | } | |
1459 | + | ||
1460 | + | ||
1461 | + | func hR (hS,hT,hU) = { | |
1462 | + | let hH = ((toString(hT) + "_") + toString(hU)) | |
1463 | + | let hV = hG(hH) | |
1464 | + | let hW = valueOrElse(getString(hS), (hH + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1465 | + | let hX = split_4C(hW, ":") | |
1466 | + | let hY = hI(hX) | |
1467 | + | let hZ = if ((5 > size(hX))) | |
1468 | + | then makeString(["0", toString(hY), toString((hV - hY)), toString(hV)], "_") | |
1467 | 1469 | else { | |
1468 | - | let | |
1469 | - | let | |
1470 | - | let | |
1471 | - | then parseIntValue( | |
1472 | - | else | |
1473 | - | makeString([toString( | |
1474 | - | } | |
1475 | - | [ | |
1476 | - | then | |
1477 | - | else "0_0_0_0_0_0", if ((size(split( | |
1478 | - | then | |
1479 | - | else "0_0_0_0_0_0", | |
1480 | - | } | |
1481 | - | ||
1482 | - | ||
1483 | - | func | |
1484 | - | let | |
1485 | - | let | |
1486 | - | (( | |
1487 | - | } | |
1488 | - | ||
1489 | - | ||
1490 | - | func | |
1470 | + | let ia = split(hX[bo], "_") | |
1471 | + | let ib = parseIntValue(ia[bp]) | |
1472 | + | let ic = if ((size(ia) > 1)) | |
1473 | + | then parseIntValue(ia[bq]) | |
1474 | + | else hY | |
1475 | + | makeString([toString(ib), toString(ic), toString(((hV - ib) - ic)), toString(hV)], "_") | |
1476 | + | } | |
1477 | + | [hX[bk], if ((size(split(hX[bl], "_")) == aN)) | |
1478 | + | then hX[bl] | |
1479 | + | else "0_0_0_0_0_0", if ((size(split(hX[bm], "_")) == aN)) | |
1480 | + | then hX[bm] | |
1481 | + | else "0_0_0_0_0_0", hX[bn], hZ] | |
1482 | + | } | |
1483 | + | ||
1484 | + | ||
1485 | + | func id (hJ) = { | |
1486 | + | let ie = hI(hJ) | |
1487 | + | let if = parseIntValue(split(hJ[bo], "_")[bp]) | |
1488 | + | ((hG(hJ[bk]) - ie) - if) | |
1489 | + | } | |
1490 | + | ||
1491 | + | ||
1492 | + | func ig (ih,hJ,ii) = if ((size(ih) != 3)) | |
1491 | 1493 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1492 | 1494 | else { | |
1493 | - | let | |
1494 | - | let | |
1495 | - | let | |
1495 | + | let ij = split(ih[0], "_") | |
1496 | + | let ik = split(ih[1], "_") | |
1497 | + | let il = if ((ih[2] == "")) | |
1496 | 1498 | then nil | |
1497 | - | else split_4C( | |
1498 | - | if ((size( | |
1499 | + | else split_4C(ih[2], "_") | |
1500 | + | if ((size(ij) != aN)) | |
1499 | 1501 | then throw("All 6 resources should be passed") | |
1500 | - | else if ((size( | |
1502 | + | else if ((size(ik) != aN)) | |
1501 | 1503 | then throw("All 6 materials should be passed") | |
1502 | 1504 | else { | |
1503 | - | let | |
1504 | - | let | |
1505 | - | let | |
1506 | - | let | |
1505 | + | let gR = id(hJ) | |
1506 | + | let im = split(hJ[bl], "_") | |
1507 | + | let in = split(hJ[bm], "_") | |
1508 | + | let io = if ((hJ[bn] == "")) | |
1507 | 1509 | then nil | |
1508 | - | else split_4C( | |
1509 | - | let | |
1510 | - | let | |
1511 | - | let | |
1510 | + | else split_4C(hJ[bn], "_") | |
1511 | + | let gP = split(ii[bu], "_") | |
1512 | + | let ip = split(ii[bv], "_") | |
1513 | + | let iq = if ((ii[bw] == "")) | |
1512 | 1514 | then nil | |
1513 | - | else split_4C( | |
1514 | - | func | |
1515 | - | let | |
1516 | - | let | |
1517 | - | let | |
1518 | - | let | |
1519 | - | if (( | |
1520 | - | then $Tuple4(( | |
1521 | - | else if (( | |
1522 | - | then if (( | |
1523 | - | then throw((((("Attempt to take " + | |
1524 | - | else $Tuple4(( | |
1525 | - | else if ((-( | |
1526 | - | then throw((((("Attempt to take " + toString(-( | |
1527 | - | else $Tuple4(( | |
1515 | + | else split_4C(ii[bw], "_") | |
1516 | + | func ir (eM,hM) = { | |
1517 | + | let gz = eM._1 | |
1518 | + | let is = parseIntValue(hM) | |
1519 | + | let it = parseIntValue(im[gz]) | |
1520 | + | let iu = parseIntValue(gP[gz]) | |
1521 | + | if ((is == 0)) | |
1522 | + | then $Tuple4((gz + 1), (eM._2 :+ im[gz]), (eM._3 :+ gP[gz]), eM._4) | |
1523 | + | else if ((is > 0)) | |
1524 | + | then if ((is > iu)) | |
1525 | + | then throw((((("Attempt to take " + hM) + " from backpack, but only ") + toString(iu)) + " available")) | |
1526 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((it + is))), (eM._3 :+ toString((iu - is))), (eM._4 + is)) | |
1527 | + | else if ((-(is) > it)) | |
1528 | + | then throw((((("Attempt to take " + toString(-(is))) + " from warehouse, but only ") + toString(it)) + " available")) | |
1529 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((it + is))), (eM._3 :+ toString((iu - is))), (eM._4 + is)) | |
1528 | 1530 | } | |
1529 | 1531 | ||
1530 | - | let | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let | |
1534 | - | func | |
1535 | - | then | |
1536 | - | else | |
1537 | - | ||
1538 | - | func | |
1539 | - | then | |
1532 | + | let eX = { | |
1533 | + | let eO = ij | |
1534 | + | let eP = size(eO) | |
1535 | + | let eQ = $Tuple4(0, nil, nil, 0) | |
1536 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1537 | + | then eS | |
1538 | + | else ir(eS, eO[eT]) | |
1539 | + | ||
1540 | + | func eU (eS,eT) = if ((eT >= eP)) | |
1541 | + | then eS | |
1540 | 1542 | else throw("List size exceeds 6") | |
1541 | 1543 | ||
1542 | - | | |
1544 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1543 | 1545 | } | |
1544 | - | func | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | let | |
1549 | - | if (( | |
1550 | - | then $Tuple4(( | |
1551 | - | else if (( | |
1552 | - | then if (( | |
1553 | - | then throw((((("Attempt to take " + | |
1554 | - | else $Tuple4(( | |
1555 | - | else if ((-( | |
1556 | - | then throw((((("Attempt to take " + toString(-( | |
1557 | - | else $Tuple4(( | |
1546 | + | func iv (eM,hM) = { | |
1547 | + | let gz = eM._1 | |
1548 | + | let is = parseIntValue(hM) | |
1549 | + | let iw = parseIntValue(in[gz]) | |
1550 | + | let ix = parseIntValue(ip[gz]) | |
1551 | + | if ((is == 0)) | |
1552 | + | then $Tuple4((gz + 1), (eM._2 :+ in[gz]), (eM._3 :+ ip[gz]), eM._4) | |
1553 | + | else if ((is > 0)) | |
1554 | + | then if ((is > ix)) | |
1555 | + | then throw((((("Attempt to take " + hM) + " from backpack, but only ") + toString(ix)) + " available")) | |
1556 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((iw + is))), (eM._3 :+ toString((ix - is))), (eM._4 + is)) | |
1557 | + | else if ((-(is) > iw)) | |
1558 | + | then throw((((("Attempt to take " + toString(-(is))) + " from warehouse, but only ") + toString(iw)) + " available")) | |
1559 | + | else $Tuple4((gz + 1), (eM._2 :+ toString((iw + is))), (eM._3 :+ toString((ix - is))), (eM._4 + is)) | |
1558 | 1560 | } | |
1559 | 1561 | ||
1560 | - | let | |
1561 | - | let | |
1562 | - | let | |
1563 | - | let | |
1564 | - | func | |
1565 | - | then | |
1566 | - | else | |
1567 | - | ||
1568 | - | func | |
1569 | - | then | |
1562 | + | let gh = { | |
1563 | + | let eO = ik | |
1564 | + | let eP = size(eO) | |
1565 | + | let eQ = $Tuple4(0, nil, nil, eX._4) | |
1566 | + | func hy (eS,eT) = if ((eT >= eP)) | |
1567 | + | then eS | |
1568 | + | else iv(eS, eO[eT]) | |
1569 | + | ||
1570 | + | func hz (eS,eT) = if ((eT >= eP)) | |
1571 | + | then eS | |
1570 | 1572 | else throw("List size exceeds 6") | |
1571 | 1573 | ||
1572 | - | hy( | |
1574 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
1573 | 1575 | } | |
1574 | - | func | |
1575 | - | let | |
1576 | - | let | |
1577 | - | let | |
1578 | - | then parseIntValue( | |
1576 | + | func iy (eM,hM) = { | |
1577 | + | let gz = eM._1 | |
1578 | + | let is = parseIntValue(hM) | |
1579 | + | let iz = if ((size(io) > gz)) | |
1580 | + | then parseIntValue(io[gz]) | |
1579 | 1581 | else 0 | |
1580 | - | let | |
1581 | - | then parseIntValue( | |
1582 | + | let iA = if ((size(iq) > gz)) | |
1583 | + | then parseIntValue(iq[gz]) | |
1582 | 1584 | else 0 | |
1583 | - | if (( | |
1584 | - | then $Tuple4(( | |
1585 | - | else if (( | |
1586 | - | then if (( | |
1587 | - | then throw((((("Attempt to take " + | |
1585 | + | if ((is == 0)) | |
1586 | + | then $Tuple4((gz + 1), (eM._2 :+ toString(iz)), (eM._3 :+ toString(iA)), eM._4) | |
1587 | + | else if ((is > 0)) | |
1588 | + | then if ((is > iA)) | |
1589 | + | then throw((((("Attempt to take " + hM) + " from backpack, but only ") + toString(iA)) + " available")) | |
1588 | 1590 | else { | |
1589 | - | let | |
1590 | - | $Tuple4(( | |
1591 | + | let iB = (eC((iz + is), bj) - eC(iz, bj)) | |
1592 | + | $Tuple4((gz + 1), (eM._2 :+ toString((iz + is))), (eM._3 :+ toString((iA - is))), (eM._4 + iB)) | |
1591 | 1593 | } | |
1592 | - | else if ((-( | |
1593 | - | then throw((((("Attempt to take " + toString(-( | |
1594 | + | else if ((-(is) > iz)) | |
1595 | + | then throw((((("Attempt to take " + toString(-(is))) + " from warehouse, but only ") + toString(iz)) + " available")) | |
1594 | 1596 | else { | |
1595 | - | let | |
1596 | - | $Tuple4(( | |
1597 | + | let iB = (eC((iz + is), bj) - eC(iz, bj)) | |
1598 | + | $Tuple4((gz + 1), (eM._2 :+ toString((iz + is))), (eM._3 :+ toString((iA - is))), (eM._4 + iB)) | |
1597 | 1599 | } | |
1598 | 1600 | } | |
1599 | 1601 | ||
1600 | - | let | |
1602 | + | let hF = if ((size(il) != 0)) | |
1601 | 1603 | then { | |
1602 | - | let | |
1603 | - | let | |
1604 | - | let | |
1605 | - | func | |
1606 | - | then | |
1607 | - | else | |
1608 | - | ||
1609 | - | func | |
1610 | - | then | |
1604 | + | let eO = il | |
1605 | + | let eP = size(eO) | |
1606 | + | let eQ = $Tuple4(0, nil, nil, gh._4) | |
1607 | + | func hB (eS,eT) = if ((eT >= eP)) | |
1608 | + | then eS | |
1609 | + | else iy(eS, eO[eT]) | |
1610 | + | ||
1611 | + | func hC (eS,eT) = if ((eT >= eP)) | |
1612 | + | then eS | |
1611 | 1613 | else throw("List size exceeds 50") | |
1612 | 1614 | ||
1613 | - | hB( | |
1615 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1614 | 1616 | } | |
1615 | - | else $Tuple4(0, | |
1616 | - | let | |
1617 | - | if (( | |
1618 | - | then throw((((("Attempt to put total " + toString( | |
1619 | - | else $Tuple7(makeString( | |
1617 | + | else $Tuple4(0, io, iq, gh._4) | |
1618 | + | let iC = hF._4 | |
1619 | + | if ((iC > gR)) | |
1620 | + | then throw((((("Attempt to put total " + toString(iC)) + " stuff, but only ") + toString(gR)) + " warehouse space left")) | |
1621 | + | else $Tuple7(makeString(eX._2, "_"), makeString(gh._2, "_"), makeString_2C(hF._2, "_"), makeString(eX._3, "_"), makeString(gh._3, "_"), makeString_2C(hF._3, "_"), iC) | |
1620 | 1622 | } | |
1621 | 1623 | } | |
1622 | 1624 | ||
1623 | 1625 | ||
1624 | - | func | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | let | |
1629 | - | let | |
1630 | - | let | |
1631 | - | let | |
1632 | - | let | |
1633 | - | let | |
1634 | - | let | |
1635 | - | $Tuple2([IntegerEntry( | |
1636 | - | } | |
1637 | - | ||
1638 | - | ||
1639 | - | func | |
1626 | + | func iD (iE,iF) = { | |
1627 | + | let bX = toString(iE) | |
1628 | + | let iG = gX(toBigInt(iF)) | |
1629 | + | let iH = valueOrElse(getInteger(ee()), (ed + 1)) | |
1630 | + | let ei = toString(iH) | |
1631 | + | let hg = toInt((iG % dX)) | |
1632 | + | let gC = he(iG, hg) | |
1633 | + | let af = bc[hg] | |
1634 | + | let iI = Issue(eB(ei, "S"), makeString([ei, "S", gC, af], "_"), 1, 0, false) | |
1635 | + | let bB = calculateAssetId(iI) | |
1636 | + | let iJ = toBase58String(bB) | |
1637 | + | $Tuple2([IntegerEntry(ee(), (iH + 1)), iI, StringEntry(eh(ei), iJ), StringEntry(bA(iJ), bX), StringEntry(ek(ei), bX), IntegerEntry(bK(iJ), 0), IntegerEntry(ej(iJ, bX), 0), ScriptTransfer(iE, 1, bB)], $Tuple2(iJ, af)) | |
1638 | + | } | |
1639 | + | ||
1640 | + | ||
1641 | + | func iK (bX,iL,iM) = if (!(sigVerify_8Kb(iL, iM, g))) | |
1640 | 1642 | then throw("signature does not match") | |
1641 | 1643 | else { | |
1642 | - | let | |
1643 | - | let | |
1644 | - | let | |
1645 | - | let | |
1646 | - | let | |
1647 | - | let | |
1648 | - | let | |
1649 | - | let | |
1650 | - | if (if (( | |
1644 | + | let fk = split_4C(toUtf8String(iL), ";") | |
1645 | + | let iN = split_4C(fk[0], "|") | |
1646 | + | let iO = split(iN[es], "_") | |
1647 | + | let iP = parseIntValue(iO[0]) | |
1648 | + | let iQ = parseIntValue(iO[1]) | |
1649 | + | let iR = split(fk[1], ":") | |
1650 | + | let iS = iR[0] | |
1651 | + | let iT = parseIntValue(iN[et]) | |
1652 | + | if (if ((iT > (lastBlock.timestamp + dP))) | |
1651 | 1653 | then true | |
1652 | - | else ((lastBlock.timestamp - | |
1653 | - | then throw(((("signature outdated: logTime=" + toString( | |
1654 | + | else ((lastBlock.timestamp - dP) > iT)) | |
1655 | + | then throw(((("signature outdated: logTime=" + toString(iT)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1654 | 1656 | else { | |
1655 | - | let | |
1656 | - | let | |
1657 | - | if (( | |
1658 | - | then throw(((("Tx ids don't match! In state: " + | |
1657 | + | let iU = iR[1] | |
1658 | + | let iV = valueOrElse(getString(av(bX)), "") | |
1659 | + | if ((iV != iU)) | |
1660 | + | then throw(((("Tx ids don't match! In state: " + iV) + ", in msg: ") + iU)) | |
1659 | 1661 | else { | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | if (( | |
1665 | - | then throw(((("oldHealth=" + toString( | |
1666 | - | else if ((0 >= | |
1662 | + | let bP = valueOrErrorMessage(getString(bT(bX)), "You don't have a duck staked") | |
1663 | + | let iW = cQ(bP) | |
1664 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
1665 | + | let iY = valueOrElse(getInteger(iW), iX) | |
1666 | + | if ((iY != iP)) | |
1667 | + | then throw(((("oldHealth=" + toString(iY)) + " from state does not match one from flight log=") + toString(iP))) | |
1668 | + | else if ((0 >= iP)) | |
1667 | 1669 | then throw("You can't fly with zero health") | |
1668 | - | else if (!( | |
1670 | + | else if (!(gk(bP))) | |
1669 | 1671 | then throw("Equipment incompatible") | |
1670 | 1672 | else { | |
1671 | - | let | |
1672 | - | then | |
1673 | + | let iZ = if ((size(iN) > eu)) | |
1674 | + | then iN[eu] | |
1673 | 1675 | else "" | |
1674 | - | let | |
1675 | - | then | |
1676 | + | let ja = if ((size(iN) > ev)) | |
1677 | + | then iN[ev] | |
1676 | 1678 | else "" | |
1677 | - | let | |
1678 | - | then ( | |
1679 | + | let jb = if (if ((iQ > 0)) | |
1680 | + | then (iZ == "$") | |
1679 | 1681 | else false) | |
1680 | - | then | |
1682 | + | then am(invoke(M, "sendUsdtPrize", [bX], nil)) | |
1681 | 1683 | else 0 | |
1682 | - | $Tuple5( | |
1684 | + | $Tuple5(iQ, bP, jb, iS, ja) | |
1683 | 1685 | } | |
1684 | 1686 | } | |
1685 | 1687 | } | |
1686 | 1688 | } | |
1687 | 1689 | ||
1688 | 1690 | ||
1689 | - | func | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | (( | |
1695 | - | } | |
1696 | - | ||
1697 | - | ||
1698 | - | func | |
1699 | - | let | |
1700 | - | then $Tuple2( | |
1691 | + | func jc (bJ,jd) = { | |
1692 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
1693 | + | let je = valueOrElse(getInteger(bE(aM, bJ)), 0) | |
1694 | + | let jf = (hU / 6) | |
1695 | + | let jg = (hU / 7) | |
1696 | + | ((aP + fraction(aP, ((hU + jf) + (2 * jg)), 5)) + fraction(aP, je, (jd * 5))) | |
1697 | + | } | |
1698 | + | ||
1699 | + | ||
1700 | + | func jh (aw,ji,jj) = { | |
1701 | + | let jk = if ((ji == ep)) | |
1702 | + | then $Tuple2(jj, valueOrElse(getString(bT(aw)), "")) | |
1701 | 1703 | else { | |
1702 | - | let | |
1703 | - | let | |
1704 | - | let | |
1705 | - | if (( | |
1706 | - | then throw((("Duck location type is " + | |
1707 | - | else $Tuple2( | |
1708 | - | } | |
1709 | - | let | |
1710 | - | let | |
1711 | - | let | |
1712 | - | let | |
1713 | - | let | |
1714 | - | let | |
1715 | - | if (( | |
1716 | - | then throw(( | |
1704 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
1705 | + | let jl = valueOrElse(getString(bV(bP)), aR) | |
1706 | + | let cq = split(value(jl), "_") | |
1707 | + | if ((cq[by] != "L")) | |
1708 | + | then throw((("Duck location type is " + cq[by]) + ", but should be L")) | |
1709 | + | else $Tuple2(cq[bz], bP) | |
1710 | + | } | |
1711 | + | let bJ = jk._1 | |
1712 | + | let jm = jk._2 | |
1713 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
1714 | + | let jo = bD(bJ) | |
1715 | + | let jp = valueOrErrorMessage(getInteger(jo), (("Land " + jn.name) + " is not staked")) | |
1716 | + | let jq = valueOrErrorMessage(getString(bA(bJ)), (("NFT " + jn.name) + " is orphaned")) | |
1717 | + | if ((jq != aw)) | |
1718 | + | then throw((aJ + " is not yours")) | |
1717 | 1719 | else { | |
1718 | - | let | |
1719 | - | $Tuple4( | |
1720 | - | } | |
1721 | - | } | |
1722 | - | ||
1723 | - | ||
1724 | - | func | |
1720 | + | let jr = split(jn.description, "_") | |
1721 | + | $Tuple4(jm, bJ, jr, jp) | |
1722 | + | } | |
1723 | + | } | |
1724 | + | ||
1725 | + | ||
1726 | + | func js (aw,eD,ji,jj) = if ((0 > eD)) | |
1725 | 1727 | then throw("Negative amount") | |
1726 | 1728 | else { | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | let | |
1731 | - | if ((0 > | |
1732 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1729 | + | let fR = jh(aw, ji, jj) | |
1730 | + | let as = fR._3[U] | |
1731 | + | let gv = gB(fR._3[V]) | |
1732 | + | let gF = (aI() - fR._4) | |
1733 | + | if ((0 > gF)) | |
1734 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fR._4)) + ", final = ") + toString(aI()))) | |
1733 | 1735 | else { | |
1734 | - | let | |
1735 | - | let | |
1736 | - | let | |
1737 | - | if (( | |
1738 | - | then throw(((("Not enough resources, available = " + toString( | |
1736 | + | let jd = ar(as) | |
1737 | + | let jt = jc(fR._2, jd) | |
1738 | + | let ju = fraction(gF, (jt * jd), dK) | |
1739 | + | if ((eD > ju)) | |
1740 | + | then throw(((("Not enough resources, available = " + toString(ju)) + ", requested = ") + toString(eD))) | |
1739 | 1741 | else { | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1743 | - | let | |
1744 | - | let | |
1745 | - | let | |
1746 | - | let | |
1747 | - | let | |
1748 | - | let | |
1749 | - | if (if (( | |
1750 | - | then ( | |
1742 | + | let jv = fraction((ju - eD), dK, (jt * jd)) | |
1743 | + | let jw = (aI() - jv) | |
1744 | + | let hT = (jd / q) | |
1745 | + | let gQ = gL(gv, (gF - jv), hT, jt) | |
1746 | + | let hS = bI(fR._2) | |
1747 | + | let hU = valueOrElse(getInteger(bK(fR._2)), 0) | |
1748 | + | let hJ = hR(hS, hT, hU) | |
1749 | + | let ia = split(hJ[bo], "_") | |
1750 | + | let gR = parseIntValue(ia[br]) | |
1751 | + | if (if ((ji == ep)) | |
1752 | + | then (eD > gR) | |
1751 | 1753 | else false) | |
1752 | - | then throw((("Only " + toString( | |
1754 | + | then throw((("Only " + toString(gR)) + " space left in warehouse")) | |
1753 | 1755 | else { | |
1754 | - | let | |
1755 | - | let | |
1756 | - | let | |
1757 | - | let | |
1758 | - | let | |
1759 | - | then $Tuple4( | |
1760 | - | else if (( | |
1761 | - | then $Tuple4( | |
1756 | + | let hE = bU(fR._1) | |
1757 | + | let ii = hD(hE) | |
1758 | + | let gP = split(ii[bu], "_") | |
1759 | + | let gO = split(hJ[bl], "_") | |
1760 | + | let jx = if ((ji == ep)) | |
1761 | + | then $Tuple4(gD(gO, gv, (gF - jv), hT, jt), ii[bu], (parseIntValue(ia[bq]) + gQ._2), (parseIntValue(ia[br]) - gQ._2)) | |
1762 | + | else if ((ji == eq)) | |
1763 | + | then $Tuple4(hJ[bl], gD(gP, gv, (gF - jv), hT, jt), parseIntValue(ia[bq]), parseIntValue(ia[br])) | |
1762 | 1764 | else { | |
1763 | - | let | |
1764 | - | let | |
1765 | - | $Tuple4( | |
1765 | + | let jy = gN(gO, gP, gQ, gR) | |
1766 | + | let jz = min([parseIntValue(ia[br]), gQ._2]) | |
1767 | + | $Tuple4(jy._1, jy._2, (parseIntValue(ia[bq]) + jz), (parseIntValue(ia[br]) - jz)) | |
1766 | 1768 | } | |
1767 | - | let | |
1768 | - | let | |
1769 | - | let | |
1770 | - | let | |
1771 | - | $Tuple5([IntegerEntry( | |
1769 | + | let jA = jx._1 | |
1770 | + | let jB = jx._2 | |
1771 | + | let jC = jx._3 | |
1772 | + | let jD = jx._4 | |
1773 | + | $Tuple5([IntegerEntry(bD(fR._2), jw), IntegerEntry(bG(aJ, fR._2, aw), jw)], hE, [ii[bt], jB, ii[bv], ii[bw]], hS, [hJ[bk], jA, hJ[bm], hJ[bn], makeString([ia[bp], toString(jC), toString(jD), ia[bs]], "_")]) | |
1772 | 1774 | } | |
1773 | 1775 | } | |
1774 | 1776 | } | |
1775 | 1777 | } | |
1776 | 1778 | ||
1777 | 1779 | ||
1778 | - | func | |
1779 | - | let | |
1780 | - | let | |
1781 | - | let | |
1782 | - | | |
1783 | - | } | |
1784 | - | ||
1785 | - | ||
1786 | - | func | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1780 | + | func jE (aw,bJ,jd,ji) = { | |
1781 | + | let jo = bD(bJ) | |
1782 | + | let jp = value(getInteger(jo)) | |
1783 | + | let ju = (fraction((aI() - jp), jc(bJ, jd), dK) * jd) | |
1784 | + | js(aw, ju, ji, bJ) | |
1785 | + | } | |
1786 | + | ||
1787 | + | ||
1788 | + | func jF (eZ,iE,jG,bJ) = { | |
1789 | + | let aw = toString(iE) | |
1790 | + | let fR = jh(aw, er, bJ) | |
1791 | + | let jd = ar(fR._3[U]) | |
1792 | + | let jH = bK(fR._2) | |
1793 | + | let jI = valueOrElse(getInteger(jH), 0) | |
1792 | 1794 | if (if (!(b)) | |
1793 | - | then ( | |
1795 | + | then (jI >= 3) | |
1794 | 1796 | else false) | |
1795 | 1797 | then throw("Currently max infrastructure level = 3") | |
1796 | 1798 | else { | |
1797 | - | let | |
1798 | - | let | |
1799 | + | let jJ = ((sqrt(jd, 0, 0, DOWN) / 5) + 2) | |
1800 | + | let dC = (jI + 1) | |
1799 | 1801 | if (if (b) | |
1800 | - | then ( | |
1802 | + | then (dC > jJ) | |
1801 | 1803 | else false) | |
1802 | - | then throw(("Currently max infrastructure level = " + toString( | |
1804 | + | then throw(("Currently max infrastructure level = " + toString(jJ))) | |
1803 | 1805 | else { | |
1804 | - | let | |
1805 | - | if (if (!( | |
1806 | - | then ( | |
1806 | + | let jK = fraction(dS, (jd * dC), q) | |
1807 | + | if (if (!(eZ)) | |
1808 | + | then (jG != jK) | |
1807 | 1809 | else false) | |
1808 | - | then throw(("Payment attached should be " + toString( | |
1810 | + | then throw(("Payment attached should be " + toString(jK))) | |
1809 | 1811 | else { | |
1810 | - | let | |
1811 | - | let | |
1812 | - | let | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | let | |
1820 | - | let | |
1821 | - | let | |
1822 | - | $Tuple3(([IntegerEntry( | |
1812 | + | let hE = bU(fR._1) | |
1813 | + | let ii = hD(hE) | |
1814 | + | let jL = split(ii[bv], "_") | |
1815 | + | let jM = fraction(l, (jd * dC), q) | |
1816 | + | let jN = makeString(eY(eZ, jL, jM), "_") | |
1817 | + | let jO = jE(aw, fR._2, jd, er) | |
1818 | + | let jP = jO._5 | |
1819 | + | let jQ = hG(jP[bk]) | |
1820 | + | let jR = makeString([split(jP[bk], "_")[0], toString(dC)], "_") | |
1821 | + | let jS = hG(jR) | |
1822 | + | let ia = split(jP[bo], "_") | |
1823 | + | let jT = makeString([ia[bp], ia[bq], toString(((parseIntValue(ia[br]) + jS) - jQ)), toString(jS)], "_") | |
1824 | + | $Tuple3(([IntegerEntry(jH, dC), IntegerEntry(ej(fR._2, aw), dC), StringEntry(hE, makeString([ii[bt], jO._3[bu], jN, ii[bw]], ":")), StringEntry(jO._4, makeString([jR, jP[bl], jP[bm], jP[bn], jT], ":"))] ++ jO._1), dC, jM) | |
1823 | 1825 | } | |
1824 | 1826 | } | |
1825 | 1827 | } | |
1826 | 1828 | } | |
1827 | 1829 | ||
1828 | 1830 | ||
1829 | - | func | |
1830 | - | let | |
1831 | - | let | |
1832 | - | let | |
1833 | - | $Tuple2([IntegerEntry( | |
1834 | - | } | |
1835 | - | ||
1836 | - | ||
1837 | - | func | |
1838 | - | let | |
1839 | - | let | |
1831 | + | func jU (jV,jW,jX,jY) = { | |
1832 | + | let dw = valueOrElse(getInteger(jW), 0) | |
1833 | + | let dB = (dw + jY) | |
1834 | + | let jZ = dz(valueOrElse(getInteger(jV), 0), dB) | |
1835 | + | $Tuple2([IntegerEntry(jV, jZ[0]), IntegerEntry(jW, dB), IntegerEntry(jX, (valueOrElse(getInteger(jX), 0) + jZ[1]))], dB) | |
1836 | + | } | |
1837 | + | ||
1838 | + | ||
1839 | + | func ka (bP,jY) = { | |
1840 | + | let jn = value(assetInfo(fromBase58String(bP))) | |
1841 | + | let aw = valueOrErrorMessage(getString(bS(bP)), (("NFT " + jn.name) + " is orphaned")) | |
1840 | 1842 | if (if (if (c) | |
1841 | - | then ( | |
1843 | + | then (jn.issuer == this) | |
1842 | 1844 | else false) | |
1843 | - | then contains( | |
1845 | + | then contains(jn.name, aL) | |
1844 | 1846 | else false) | |
1845 | - | then | |
1846 | - | else | |
1847 | - | } | |
1848 | - | ||
1849 | - | ||
1850 | - | func | |
1851 | - | ||
1852 | - | ||
1853 | - | func | |
1854 | - | let | |
1855 | - | let | |
1856 | - | let | |
1857 | - | if (!(isDefined( | |
1847 | + | then jU(cX(aw), cW(aw), cY(aw), jY) | |
1848 | + | else jU(cT(bP), cS(bP), cU(bP), jY) | |
1849 | + | } | |
1850 | + | ||
1851 | + | ||
1852 | + | func kb (aw,jY) = jU(cX(aw), cW(aw), cY(aw), jY) | |
1853 | + | ||
1854 | + | ||
1855 | + | func kc (aw) = { | |
1856 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
1857 | + | let kd = bN(aw) | |
1858 | + | let ke = getString(kd) | |
1859 | + | if (!(isDefined(ke))) | |
1858 | 1860 | then throw("You are not eligible for ONBOARD artifact") | |
1859 | 1861 | else { | |
1860 | - | let | |
1861 | - | let | |
1862 | - | if (isDefined( | |
1863 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1862 | + | let kf = bQ(aw) | |
1863 | + | let kg = getString(kf) | |
1864 | + | if (isDefined(kg)) | |
1865 | + | then throw(("You already used your ONBOARD artifact on duck " + value(kg))) | |
1864 | 1866 | else { | |
1865 | - | let | |
1866 | - | let | |
1867 | - | if (isDefined( | |
1868 | - | then throw(((("The duck " + | |
1869 | - | else ([StringEntry( | |
1867 | + | let kh = bO(bP) | |
1868 | + | let ki = getString(kh) | |
1869 | + | if (isDefined(ki)) | |
1870 | + | then throw(((("The duck " + bP) + " already got points from ONBOARD artifact from user ") + value(ki))) | |
1871 | + | else ([StringEntry(kf, bP), StringEntry(kh, aw)] ++ ka(bP, dt)._1) | |
1870 | 1872 | } | |
1871 | 1873 | } | |
1872 | 1874 | } | |
1873 | 1875 | ||
1874 | 1876 | ||
1875 | - | func | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | let | |
1880 | - | if ((valueOrElse(getInteger( | |
1877 | + | func kj (aw,jj) = { | |
1878 | + | let fR = jh(aw, er, jj) | |
1879 | + | let bJ = fR._2 | |
1880 | + | let jd = ar(fR._3[U]) | |
1881 | + | let kk = bE(aM, bJ) | |
1882 | + | if ((valueOrElse(getInteger(kk), 0) > 0)) | |
1881 | 1883 | then throw("Presale artifact is already activated") | |
1882 | - | else if ((parseIntValue( | |
1883 | - | then throw(((( | |
1884 | + | else if ((parseIntValue(fR._3[T]) > ed)) | |
1885 | + | then throw((((aJ + " ") + bJ) + " is not eligible for presale artifact")) | |
1884 | 1886 | else { | |
1885 | - | let | |
1886 | - | ((( | |
1887 | + | let jO = jE(aw, bJ, jd, er) | |
1888 | + | (((jO._1 :+ IntegerEntry(kk, jd)) :+ StringEntry(jO._2, makeString(jO._3, ":"))) :+ StringEntry(jO._4, makeString(jO._5, ":"))) | |
1887 | 1889 | } | |
1888 | 1890 | } | |
1889 | 1891 | ||
1890 | 1892 | ||
1891 | - | func | |
1892 | - | let | |
1893 | - | let | |
1894 | - | let | |
1895 | - | let | |
1896 | - | let | |
1897 | - | let | |
1898 | - | if (( | |
1893 | + | func kl (bP) = { | |
1894 | + | let cp = valueOrElse(getInteger(R, ca), 0) | |
1895 | + | let jl = split(valueOrElse(getString(bV(bP)), aR), "_") | |
1896 | + | let cr = lastBlock.timestamp | |
1897 | + | let cs = cj(R, cp) | |
1898 | + | let cl = cs[cf] | |
1899 | + | let cm = cs[cg] | |
1900 | + | if ((jl[by] != "T")) | |
1899 | 1901 | then false | |
1900 | - | else if (if (if ((parseIntValue( | |
1901 | - | then ( | |
1902 | + | else if (if (if ((parseIntValue(jl[bx]) == cp)) | |
1903 | + | then (cm[ci] == "INPROGRESS") | |
1902 | 1904 | else false) | |
1903 | - | then (parseIntValue( | |
1905 | + | then (parseIntValue(cl[ch]) > cr) | |
1904 | 1906 | else false) | |
1905 | 1907 | then throw("Your duck is taking part in the tournament") | |
1906 | - | else | |
1907 | - | } | |
1908 | - | ||
1909 | - | ||
1910 | - | func | |
1911 | - | let | |
1912 | - | if ( | |
1908 | + | else aq(invoke(this, "exitTournamentInternal", [bP], nil)) | |
1909 | + | } | |
1910 | + | ||
1911 | + | ||
1912 | + | func km (kn,dC,ko,aw,kp,kq) = { | |
1913 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
1914 | + | if (kl(bP)) | |
1913 | 1915 | then throw("mergeInternal_checkTournament") | |
1914 | 1916 | else { | |
1915 | - | func | |
1916 | - | let | |
1917 | - | let | |
1918 | - | let | |
1919 | - | let | |
1920 | - | if (( | |
1921 | - | then throw(( | |
1917 | + | func kr (eM,bJ) = { | |
1918 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
1919 | + | let jo = bD(bJ) | |
1920 | + | let jp = valueOrErrorMessage(getInteger(jo), (("NFT " + jn.name) + " is not staked")) | |
1921 | + | let jq = valueOrErrorMessage(getString(bA(bJ)), (("NFT " + jn.name) + " is orphaned")) | |
1922 | + | if ((jq != aw)) | |
1923 | + | then throw((aJ + " is not yours")) | |
1922 | 1924 | else { | |
1923 | - | let | |
1924 | - | let | |
1925 | - | if (if (( | |
1926 | - | then ( | |
1925 | + | let jr = split(jn.description, "_") | |
1926 | + | let af = jr[W] | |
1927 | + | if (if ((eM._3 != "")) | |
1928 | + | then (eM._3 != af) | |
1927 | 1929 | else false) | |
1928 | 1930 | then throw("Lands should be on the same continent to merge") | |
1929 | 1931 | else { | |
1930 | - | let | |
1931 | - | let | |
1932 | - | let | |
1933 | - | let | |
1934 | - | let | |
1935 | - | let | |
1936 | - | let | |
1937 | - | let | |
1938 | - | let | |
1939 | - | if (("S" == | |
1932 | + | let as = jr[U] | |
1933 | + | let ks = eM._1 | |
1934 | + | let gz = valueOrErrorMessage(indexOf(ks, as), "You haven't passed all the lands needed") | |
1935 | + | let kt = (take(ks, gz) + drop(ks, (gz + 1))) | |
1936 | + | let jd = ar(as) | |
1937 | + | let ku = (eM._2 + valueOrElse(getInteger(bE(aM, bJ)), 0)) | |
1938 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
1939 | + | let kv = { | |
1940 | + | let h = as | |
1941 | + | if (("S" == h)) | |
1940 | 1942 | then 3 | |
1941 | - | else if (("M" == | |
1943 | + | else if (("M" == h)) | |
1942 | 1944 | then 4 | |
1943 | - | else if (("L" == | |
1945 | + | else if (("L" == h)) | |
1944 | 1946 | then 5 | |
1945 | - | else if (("XL" == | |
1947 | + | else if (("XL" == h)) | |
1946 | 1948 | then 6 | |
1947 | 1949 | else throw("Only S, M, L, XL can merge") | |
1948 | 1950 | } | |
1949 | - | if (( | |
1951 | + | if ((hU != kv)) | |
1950 | 1952 | then throw("All lands should be maxed to merge") | |
1951 | 1953 | else { | |
1952 | - | let | |
1953 | - | let | |
1954 | - | let | |
1955 | - | if ((0 > | |
1956 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1954 | + | let ei = jr[T] | |
1955 | + | let gv = gB(jr[V]) | |
1956 | + | let gF = (lastBlock.timestamp - jp) | |
1957 | + | if ((0 > gF)) | |
1958 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jp)) + ", current = ") + toString(lastBlock.timestamp))) | |
1957 | 1959 | else { | |
1958 | - | let | |
1959 | - | let | |
1960 | - | let | |
1961 | - | let | |
1962 | - | let | |
1963 | - | let | |
1964 | - | let | |
1965 | - | let | |
1966 | - | if (!(isDefined( | |
1967 | - | then throw(("Your staked lands don't contain " + | |
1960 | + | let jt = jc(bJ, jd) | |
1961 | + | let hT = (jd / q) | |
1962 | + | let jB = gD(split(eM._4, "_"), gv, gF, hT, jt) | |
1963 | + | let eW = gt(eM._6, gv, hT, -1) | |
1964 | + | let kw = gt(eM._10, gv, hT, -1) | |
1965 | + | let hn = gt(eM._9, gv, hT, 1) | |
1966 | + | let kx = eM._7 | |
1967 | + | let L = indexOf(kx, bJ) | |
1968 | + | if (!(isDefined(L))) | |
1969 | + | then throw(("Your staked lands don't contain " + bJ)) | |
1968 | 1970 | else { | |
1969 | - | let | |
1970 | - | let | |
1971 | - | $Tuple10( | |
1972 | - | then [DeleteEntry( | |
1973 | - | else nil)), | |
1971 | + | let ky = bC(bJ) | |
1972 | + | let kz = valueOrElse(getString(ky), "") | |
1973 | + | $Tuple10(kt, ku, af, jB, ((((((((((((eM._5 :+ DeleteEntry(bD(bJ))) :+ DeleteEntry(bG(aJ, bJ, aw))) :+ DeleteEntry(eh(ei))) :+ DeleteEntry(bA(bJ))) :+ DeleteEntry(bK(bJ))) :+ DeleteEntry(ej(bJ, aw))) :+ DeleteEntry(bE(aM, bJ))) :+ DeleteEntry(ek(ei))) :+ DeleteEntry(bI(bJ))) :+ DeleteEntry(ky)) :+ Burn(fromBase58String(bJ), 1)) ++ (if ((kz != "")) | |
1974 | + | then [DeleteEntry(ef(kz))] | |
1975 | + | else nil)), eW, removeByIndex(kx, value(L)), (eM._8 + jd), hn, kw) | |
1974 | 1976 | } | |
1975 | 1977 | } | |
1976 | 1978 | } | |
1977 | 1979 | } | |
1978 | 1980 | } | |
1979 | 1981 | } | |
1980 | 1982 | ||
1981 | - | let | |
1982 | - | let | |
1983 | - | let | |
1984 | - | let | |
1985 | - | let | |
1986 | - | let | |
1987 | - | then split_51C(value( | |
1983 | + | let hE = bU(bP) | |
1984 | + | let ii = hD(hE) | |
1985 | + | let gu = split(valueOrElse(getString(ad()), "0_0_0_0_0_0"), "_") | |
1986 | + | let kA = ag(aw) | |
1987 | + | let kB = getString(kA) | |
1988 | + | let kC = if (isDefined(kB)) | |
1989 | + | then split_51C(value(kB), "_") | |
1988 | 1990 | else nil | |
1989 | - | let | |
1990 | - | let | |
1991 | - | let | |
1992 | - | let | |
1993 | - | let | |
1994 | - | let | |
1995 | - | func | |
1996 | - | then | |
1997 | - | else | |
1998 | - | ||
1999 | - | func | |
2000 | - | then | |
1991 | + | let kD = split(value(assetInfo(fromBase58String(kp[0]))).description, "_")[W] | |
1992 | + | let kE = split(valueOrElse(getString(ae(kD)), "0_0_0_0_0_0"), "_") | |
1993 | + | let eX = { | |
1994 | + | let eO = kp | |
1995 | + | let eP = size(eO) | |
1996 | + | let eQ = $Tuple10(ko, 0, "", ii[bu], nil, gu, kC, 0, split("0_0_0_0_0_0", "_"), kE) | |
1997 | + | func eR (eS,eT) = if ((eT >= eP)) | |
1998 | + | then eS | |
1999 | + | else kr(eS, eO[eT]) | |
2000 | + | ||
2001 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2002 | + | then eS | |
2001 | 2003 | else throw("List size exceeds 5") | |
2002 | 2004 | ||
2003 | - | | |
2005 | + | eU(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5) | |
2004 | 2006 | } | |
2005 | - | let | |
2006 | - | let | |
2007 | - | let | |
2008 | - | let | |
2009 | - | let | |
2010 | - | let | |
2011 | - | let | |
2012 | - | let | |
2013 | - | let | |
2014 | - | let | |
2015 | - | let | |
2016 | - | $Tuple2(((((((((((((((( | |
2017 | - | then StringEntry( | |
2018 | - | else DeleteEntry( | |
2007 | + | let af = eX._3 | |
2008 | + | let hg = valueOrErrorMessage(indexOf(bc, af), ("Unknown continent: " + af)) | |
2009 | + | let gC = hm(eX._9, (ar(kn) / q)) | |
2010 | + | let iH = valueOrElse(getInteger(ee()), (ed + 1)) | |
2011 | + | let kF = toString(iH) | |
2012 | + | let iI = Issue(eB(kF, kn), makeString([kF, kn, gC, af], "_"), 1, 0, false) | |
2013 | + | let bB = calculateAssetId(iI) | |
2014 | + | let kG = toBase58String(bB) | |
2015 | + | let jN = makeString(eY((kq > 0), split(ii[bv], "_"), kq), "_") | |
2016 | + | let kH = ai(aw) | |
2017 | + | let kI = valueOrElse(getInteger(kH), 0) | |
2018 | + | $Tuple2((((((((((((((((eX._5 :+ (if ((size(eX._7) > 0)) | |
2019 | + | then StringEntry(kA, makeString_11C(eX._7, "_")) | |
2020 | + | else DeleteEntry(kA))) :+ IntegerEntry(kH, if ((eX._8 > kI)) | |
2019 | 2021 | then 0 | |
2020 | - | else ( | |
2021 | - | } | |
2022 | - | } | |
2023 | - | ||
2024 | - | ||
2025 | - | func | |
2026 | - | ||
2027 | - | ||
2028 | - | func | |
2029 | - | ||
2030 | - | ||
2031 | - | func | |
2032 | - | ||
2033 | - | ||
2034 | - | func | |
2035 | - | ||
2036 | - | ||
2037 | - | func | |
2038 | - | let | |
2039 | - | if ((4 == | |
2040 | - | then | |
2041 | - | else if ((3 == | |
2042 | - | then | |
2043 | - | else if ((5 == | |
2044 | - | then | |
2045 | - | else if ((2 == | |
2046 | - | then | |
2022 | + | else (kI - eX._8))) :+ IntegerEntry(ee(), (iH + 1))) :+ iI) :+ StringEntry(eh(kF), kG)) :+ StringEntry(bA(kG), aw)) :+ StringEntry(ek(kF), aw)) :+ IntegerEntry(bE(aM, kG), eX._2)) :+ IntegerEntry(bK(kG), dC)) :+ IntegerEntry(ej(kG, aw), dC)) :+ StringEntry(hE, makeString([ii[bt], eX._4, jN, ii[bw]], ":"))) :+ StringEntry(ad(), makeString(eX._6, "_"))) :+ StringEntry(ae(af), makeString(eX._10, "_"))) :+ StringEntry(bV(bP), makeString([af, "L", kG], "_"))) :+ ScriptTransfer(addressFromStringValue(aw), 1, bB)), kG) | |
2023 | + | } | |
2024 | + | } | |
2025 | + | ||
2026 | + | ||
2027 | + | func kJ (aw,kp) = km("M", 3, "SSSS", aw, kp, 0) | |
2028 | + | ||
2029 | + | ||
2030 | + | func kK (aw,kp) = km("L", 4, "SMM", aw, kp, (l * 4)) | |
2031 | + | ||
2032 | + | ||
2033 | + | func kL (aw,kp) = km("XL", 5, "SSSML", aw, kp, (l * 47)) | |
2034 | + | ||
2035 | + | ||
2036 | + | func kM (aw,kp) = km("XXL", 6, "LXL", aw, kp, (l * 54)) | |
2037 | + | ||
2038 | + | ||
2039 | + | func kN (aw,kp) = { | |
2040 | + | let h = size(kp) | |
2041 | + | if ((4 == h)) | |
2042 | + | then kJ(aw, kp) | |
2043 | + | else if ((3 == h)) | |
2044 | + | then kK(aw, kp) | |
2045 | + | else if ((5 == h)) | |
2046 | + | then kL(aw, kp) | |
2047 | + | else if ((2 == h)) | |
2048 | + | then kM(aw, kp) | |
2047 | 2049 | else throw("Unknown merge") | |
2048 | 2050 | } | |
2049 | 2051 | ||
2050 | 2052 | ||
2051 | - | func | |
2052 | - | then valueOrElse(getBoolean( | |
2053 | + | func kO (gz) = if (if ((gz.originCaller != M)) | |
2054 | + | then valueOrElse(getBoolean(au()), false) | |
2053 | 2055 | else false) | |
2054 | 2056 | then throw("Contracts are under maintenance") | |
2055 | - | else [StringEntry( | |
2056 | - | ||
2057 | - | ||
2058 | - | func | |
2059 | - | let | |
2060 | - | let | |
2061 | - | let | |
2062 | - | let | |
2063 | - | let | |
2064 | - | let | |
2065 | - | let | |
2066 | - | let | |
2067 | - | let | |
2068 | - | let | |
2069 | - | let | |
2070 | - | let | |
2071 | - | if ((0 > | |
2072 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2057 | + | else [StringEntry(av(toString(gz.originCaller)), toBase58String(gz.transactionId))] | |
2058 | + | ||
2059 | + | ||
2060 | + | func kP (aw,bJ) = { | |
2061 | + | let hS = bI(bJ) | |
2062 | + | let kQ = split(value(assetInfo(fromBase58String(bJ))).description, "_") | |
2063 | + | let as = kQ[U] | |
2064 | + | let jd = ar(as) | |
2065 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2066 | + | let hT = (jd / q) | |
2067 | + | let gv = gB(kQ[V]) | |
2068 | + | let hJ = hR(hS, hT, hU) | |
2069 | + | let gO = split(hJ[bl], "_") | |
2070 | + | let jo = bD(bJ) | |
2071 | + | let jp = getIntegerValue(jo) | |
2072 | + | let gF = (aI() - jp) | |
2073 | + | if ((0 > gF)) | |
2074 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jp)) + ", final = ") + toString(aI()))) | |
2073 | 2075 | else { | |
2074 | - | let | |
2075 | - | let | |
2076 | - | let | |
2077 | - | let | |
2078 | - | let | |
2079 | - | func | |
2080 | - | ||
2081 | - | let | |
2082 | - | let | |
2083 | - | let | |
2084 | - | let | |
2085 | - | func | |
2086 | - | then | |
2087 | - | else | |
2088 | - | ||
2089 | - | func | |
2090 | - | then | |
2076 | + | let jt = jc(bJ, jd) | |
2077 | + | let kR = gJ(gO, gv, gF, hT, jt) | |
2078 | + | let je = valueOrElse(getInteger(bE(aM, bJ)), 0) | |
2079 | + | let kS = ((jd * p) + ((((jd * hU) + je) * p) / 5)) | |
2080 | + | let kT = (fraction(kR._2, aS, p) * aV) | |
2081 | + | func kU (eM,hM) = (eM + parseIntValue(hM)) | |
2082 | + | ||
2083 | + | let kV = { | |
2084 | + | let eO = split(hJ[bm], "_") | |
2085 | + | let eP = size(eO) | |
2086 | + | let eQ = 0 | |
2087 | + | func eR (eS,eT) = if ((eT >= eP)) | |
2088 | + | then eS | |
2089 | + | else kU(eS, eO[eT]) | |
2090 | + | ||
2091 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2092 | + | then eS | |
2091 | 2093 | else throw("List size exceeds 6") | |
2092 | 2094 | ||
2093 | - | | |
2095 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
2094 | 2096 | } | |
2095 | - | let | |
2096 | - | let | |
2097 | + | let kW = (fraction(kV, (2 * aS), p) * aV) | |
2098 | + | let kX = if ((hJ[bn] == "")) | |
2097 | 2099 | then nil | |
2098 | - | else split_4C( | |
2099 | - | func | |
2100 | - | let | |
2101 | - | let | |
2102 | - | $Tuple2(( | |
2100 | + | else split_4C(hJ[bn], "_") | |
2101 | + | func hN (eM,hM) = { | |
2102 | + | let fw = eM._2 | |
2103 | + | let kY = parseIntValue(split(be[fw], "_")[bf]) | |
2104 | + | $Tuple2((eM._1 + ((parseIntValue(hM) * kY) * o)), (fw + 1)) | |
2103 | 2105 | } | |
2104 | 2106 | ||
2105 | - | let | |
2106 | - | let | |
2107 | - | let | |
2108 | - | let | |
2109 | - | func | |
2110 | - | then | |
2111 | - | else | |
2112 | - | ||
2113 | - | func | |
2114 | - | then | |
2107 | + | let kZ = { | |
2108 | + | let eO = kX | |
2109 | + | let eP = size(eO) | |
2110 | + | let eQ = $Tuple2(0, 0) | |
2111 | + | func hy (eS,eT) = if ((eT >= eP)) | |
2112 | + | then eS | |
2113 | + | else hN(eS, eO[eT]) | |
2114 | + | ||
2115 | + | func hz (eS,eT) = if ((eT >= eP)) | |
2116 | + | then eS | |
2115 | 2117 | else throw("List size exceeds 24") | |
2116 | 2118 | ||
2117 | - | hy( | |
2119 | + | hz(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
2118 | 2120 | } | |
2119 | - | let | |
2120 | - | $Tuple4( | |
2121 | - | } | |
2122 | - | } | |
2123 | - | ||
2124 | - | ||
2125 | - | func | |
2126 | - | let | |
2127 | - | let | |
2128 | - | let | |
2129 | - | let | |
2130 | - | let | |
2131 | - | let | |
2132 | - | func | |
2133 | - | ||
2134 | - | let | |
2135 | - | let | |
2136 | - | let | |
2137 | - | let | |
2138 | - | func | |
2139 | - | then | |
2140 | - | else | |
2141 | - | ||
2142 | - | func | |
2143 | - | then | |
2121 | + | let la = (fraction(kZ._1, (2 * aS), p) * aV) | |
2122 | + | $Tuple4(kS, kT, kW, la) | |
2123 | + | } | |
2124 | + | } | |
2125 | + | ||
2126 | + | ||
2127 | + | func lb (aw,bP) = { | |
2128 | + | let gl = cV(bP) | |
2129 | + | let lc = split(valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2130 | + | let hE = bU(bP) | |
2131 | + | let ii = hD(hE) | |
2132 | + | let go = gd(lc, fs(ii[bw]), true, nil) | |
2133 | + | let ld = fx(go) | |
2134 | + | func hL (eM,hM) = (eM + parseIntValue(hM)) | |
2135 | + | ||
2136 | + | let jB = { | |
2137 | + | let eO = split(ii[bu], "_") | |
2138 | + | let eP = size(eO) | |
2139 | + | let eQ = 0 | |
2140 | + | func eR (eS,eT) = if ((eT >= eP)) | |
2141 | + | then eS | |
2142 | + | else hL(eS, eO[eT]) | |
2143 | + | ||
2144 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2145 | + | then eS | |
2144 | 2146 | else throw("List size exceeds 6") | |
2145 | 2147 | ||
2146 | - | | |
2147 | - | } | |
2148 | - | let | |
2149 | - | let | |
2150 | - | let | |
2151 | - | let | |
2152 | - | let | |
2153 | - | func | |
2154 | - | then | |
2155 | - | else | |
2156 | - | ||
2157 | - | func | |
2158 | - | then | |
2148 | + | eU(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6) | |
2149 | + | } | |
2150 | + | let kT = (fraction(jB, aS, p) * aV) | |
2151 | + | let le = { | |
2152 | + | let eO = split(ii[bv], "_") | |
2153 | + | let eP = size(eO) | |
2154 | + | let eQ = 0 | |
2155 | + | func hy (eS,eT) = if ((eT >= eP)) | |
2156 | + | then eS | |
2157 | + | else hL(eS, eO[eT]) | |
2158 | + | ||
2159 | + | func hz (eS,eT) = if ((eT >= eP)) | |
2160 | + | then eS | |
2159 | 2161 | else throw("List size exceeds 6") | |
2160 | 2162 | ||
2161 | - | hy( | |
2162 | - | } | |
2163 | - | let | |
2164 | - | let | |
2163 | + | hz(hy(hy(hy(hy(hy(hy(eQ, 0), 1), 2), 3), 4), 5), 6) | |
2164 | + | } | |
2165 | + | let kW = (fraction(le, (2 * aS), p) * aV) | |
2166 | + | let kX = if ((ld == "")) | |
2165 | 2167 | then nil | |
2166 | - | else split_4C( | |
2167 | - | func | |
2168 | - | let | |
2169 | - | let | |
2170 | - | $Tuple2(( | |
2171 | - | } | |
2172 | - | ||
2173 | - | let | |
2174 | - | let | |
2175 | - | let | |
2176 | - | let | |
2177 | - | func | |
2178 | - | then | |
2179 | - | else | |
2180 | - | ||
2181 | - | func | |
2182 | - | then | |
2168 | + | else split_4C(ld, "_") | |
2169 | + | func hN (eM,hM) = { | |
2170 | + | let fw = eM._2 | |
2171 | + | let kY = parseIntValue(split(be[fw], "_")[bf]) | |
2172 | + | $Tuple2((eM._1 + ((parseIntValue(hM) * kY) * o)), (fw + 1)) | |
2173 | + | } | |
2174 | + | ||
2175 | + | let lf = { | |
2176 | + | let eO = kX | |
2177 | + | let eP = size(eO) | |
2178 | + | let eQ = $Tuple2(0, 0) | |
2179 | + | func hB (eS,eT) = if ((eT >= eP)) | |
2180 | + | then eS | |
2181 | + | else hN(eS, eO[eT]) | |
2182 | + | ||
2183 | + | func hC (eS,eT) = if ((eT >= eP)) | |
2184 | + | then eS | |
2183 | 2185 | else throw("List size exceeds 24") | |
2184 | 2186 | ||
2185 | - | hB( | |
2186 | - | } | |
2187 | - | let | |
2188 | - | $Tuple3( | |
2189 | - | } | |
2190 | - | ||
2191 | - | ||
2192 | - | @Callable( | |
2193 | - | func constructorV1 ( | |
2187 | + | hC(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(hB(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
2188 | + | } | |
2189 | + | let la = (fraction(lf._1, (2 * aS), p) * aV) | |
2190 | + | $Tuple3(kT, kW, la) | |
2191 | + | } | |
2192 | + | ||
2193 | + | ||
2194 | + | @Callable(gz) | |
2195 | + | func constructorV1 (lg) = if ((gz.caller != this)) | |
2194 | 2196 | then throw("Permission denied") | |
2195 | - | else [StringEntry( | |
2196 | - | ||
2197 | - | ||
2198 | - | ||
2199 | - | @Callable( | |
2200 | - | func saveInteger ( | |
2197 | + | else [StringEntry(G(), lg)] | |
2198 | + | ||
2199 | + | ||
2200 | + | ||
2201 | + | @Callable(gz) | |
2202 | + | func saveInteger (y,eD) = if ((gz.caller != this)) | |
2201 | 2203 | then throw("saveInteger is not public method") | |
2202 | - | else [IntegerEntry( | |
2203 | - | ||
2204 | - | ||
2205 | - | ||
2206 | - | @Callable( | |
2207 | - | func setBlocked ( | |
2204 | + | else [IntegerEntry(y, eD)] | |
2205 | + | ||
2206 | + | ||
2207 | + | ||
2208 | + | @Callable(gz) | |
2209 | + | func setBlocked (lh) = if ((gz.caller != this)) | |
2208 | 2210 | then throw("permission denied") | |
2209 | - | else [BooleanEntry( | |
2210 | - | ||
2211 | - | ||
2212 | - | ||
2213 | - | @Callable( | |
2211 | + | else [BooleanEntry(au(), lh)] | |
2212 | + | ||
2213 | + | ||
2214 | + | ||
2215 | + | @Callable(gz) | |
2214 | 2216 | func stakeLand () = { | |
2215 | - | let | |
2216 | - | if ((size( | |
2217 | + | let li = kO(gz) | |
2218 | + | if ((size(gz.payments) != 1)) | |
2217 | 2219 | then throw("Exactly one payment required") | |
2218 | 2220 | else { | |
2219 | - | let | |
2220 | - | let | |
2221 | - | let | |
2222 | - | if (( | |
2223 | - | then throw((("NFT " + | |
2221 | + | let lj = value(gz.payments[0]) | |
2222 | + | let bB = value(lj.assetId) | |
2223 | + | let x = toString(gz.caller) | |
2224 | + | if ((lj.amount != 1)) | |
2225 | + | then throw((("NFT " + aJ) + " token should be attached as payment")) | |
2224 | 2226 | else { | |
2225 | - | let | |
2226 | - | if (( | |
2227 | + | let jn = value(assetInfo(bB)) | |
2228 | + | if ((jn.issuer != this)) | |
2227 | 2229 | then throw("Unknown issuer of token") | |
2228 | - | else if (!(contains( | |
2229 | - | then throw((("Only NFT " + | |
2230 | + | else if (!(contains(jn.name, aJ))) | |
2231 | + | then throw((("Only NFT " + aJ) + " tokens are accepted")) | |
2230 | 2232 | else { | |
2231 | - | let | |
2232 | - | let | |
2233 | - | then dropRight( | |
2234 | - | else if (contains( | |
2235 | - | then dropRight( | |
2236 | - | else dropRight( | |
2237 | - | if (!(isDefined(parseInt( | |
2238 | - | then throw(("Cannot parse land number from " + | |
2233 | + | let lk = drop(jn.name, 4) | |
2234 | + | let ei = if (contains(lk, "XXL")) | |
2235 | + | then dropRight(lk, 3) | |
2236 | + | else if (contains(lk, "XL")) | |
2237 | + | then dropRight(lk, 2) | |
2238 | + | else dropRight(lk, 1) | |
2239 | + | if (!(isDefined(parseInt(ei)))) | |
2240 | + | then throw(("Cannot parse land number from " + jn.name)) | |
2239 | 2241 | else { | |
2240 | - | let | |
2241 | - | let | |
2242 | - | if (isDefined(getInteger( | |
2243 | - | then throw((("NFT " + | |
2242 | + | let bJ = toBase58String(bB) | |
2243 | + | let jo = bD(bJ) | |
2244 | + | if (isDefined(getInteger(jo))) | |
2245 | + | then throw((("NFT " + jn.name) + " is already staked")) | |
2244 | 2246 | else { | |
2245 | - | let | |
2246 | - | let | |
2247 | - | let | |
2248 | - | let | |
2249 | - | let | |
2250 | - | let | |
2251 | - | let | |
2252 | - | let | |
2253 | - | let | |
2254 | - | let | |
2255 | - | let | |
2256 | - | then split_51C(value( | |
2247 | + | let jr = split(jn.description, "_") | |
2248 | + | let gv = gB(jr[V]) | |
2249 | + | let jd = ar(jr[U]) | |
2250 | + | let hT = (jd / q) | |
2251 | + | let eW = gA(gv, hT, 1) | |
2252 | + | let ll = ae(jr[W]) | |
2253 | + | let kE = split(valueOrElse(getString(ll), "0_0_0_0_0_0"), "_") | |
2254 | + | let lm = makeString(gt(kE, gv, hT, 1), "_") | |
2255 | + | let kA = ag(x) | |
2256 | + | let kB = getString(kA) | |
2257 | + | let kx = if (isDefined(kB)) | |
2258 | + | then split_51C(value(kB), "_") | |
2257 | 2259 | else nil | |
2258 | - | if (containsElement( | |
2259 | - | then throw(("Your staked lands already contain " + | |
2260 | - | else if ((size( | |
2261 | - | then throw((("Your already staked max (" + toString( | |
2260 | + | if (containsElement(kx, bJ)) | |
2261 | + | then throw(("Your staked lands already contain " + bJ)) | |
2262 | + | else if ((size(kx) >= aO)) | |
2263 | + | then throw((("Your already staked max (" + toString(aO)) + ") lands")) | |
2262 | 2264 | else { | |
2263 | - | let | |
2264 | - | let | |
2265 | - | let | |
2266 | - | let | |
2267 | - | $Tuple2(([IntegerEntry( | |
2265 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2266 | + | let kH = ai(x) | |
2267 | + | let ln = valueOrElse(getInteger(kH), 0) | |
2268 | + | let lo = invoke(Q, "onStakeUnstakeLand", [x], nil) | |
2269 | + | $Tuple2(([IntegerEntry(jo, lastBlock.timestamp), IntegerEntry(bG(aJ, bJ, x), lastBlock.timestamp), StringEntry(kA, makeString_11C((kx :+ bJ), "_")), IntegerEntry(kH, (ln + jd)), StringEntry(bA(bJ), x), StringEntry(ek(ei), x), IntegerEntry(ej(bJ, x), hU), StringEntry(ad(), eW), StringEntry(ll, lm)] ++ li), lo) | |
2268 | 2270 | } | |
2269 | 2271 | } | |
2270 | 2272 | } | |
2271 | 2273 | } | |
2272 | 2274 | } | |
2273 | 2275 | } | |
2274 | 2276 | } | |
2275 | 2277 | ||
2276 | 2278 | ||
2277 | 2279 | ||
2278 | - | @Callable( | |
2279 | - | func unstakeLand ( | |
2280 | - | let | |
2281 | - | if ((size( | |
2280 | + | @Callable(gz) | |
2281 | + | func unstakeLand (jj) = { | |
2282 | + | let li = kO(gz) | |
2283 | + | if ((size(gz.payments) != 0)) | |
2282 | 2284 | then throw("No payments required") | |
2283 | 2285 | else { | |
2284 | - | let | |
2285 | - | let | |
2286 | - | let | |
2287 | - | let | |
2288 | - | let | |
2289 | - | let | |
2290 | - | let | |
2291 | - | let | |
2292 | - | let | |
2293 | - | let | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2298 | - | let | |
2299 | - | if (!(isDefined( | |
2300 | - | then throw(("Your staked lands don't contain " + | |
2286 | + | let aw = toString(gz.caller) | |
2287 | + | let fR = jh(aw, eq, jj) | |
2288 | + | let bJ = fR._2 | |
2289 | + | let jr = fR._3 | |
2290 | + | let kA = ag(aw) | |
2291 | + | let gv = gB(jr[V]) | |
2292 | + | let jd = ar(jr[U]) | |
2293 | + | let hT = (jd / q) | |
2294 | + | let eW = gA(gv, hT, -1) | |
2295 | + | let ll = ae(jr[W]) | |
2296 | + | let kE = split(valueOrElse(getString(ll), "0_0_0_0_0_0"), "_") | |
2297 | + | let lm = makeString(gt(kE, gv, hT, -1), "_") | |
2298 | + | let jO = jE(aw, bJ, jd, eq) | |
2299 | + | let kx = split_51C(valueOrElse(getString(kA), ""), "_") | |
2300 | + | let L = indexOf(kx, bJ) | |
2301 | + | if (!(isDefined(L))) | |
2302 | + | then throw(("Your staked lands don't contain " + bJ)) | |
2301 | 2303 | else { | |
2302 | - | let | |
2303 | - | let | |
2304 | - | if (( | |
2305 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2304 | + | let cr = lastBlock.timestamp | |
2305 | + | let lp = valueOrElse(getInteger(P, bW(aw)), 0) | |
2306 | + | if ((lp >= cr)) | |
2307 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lp))) | |
2306 | 2308 | else { | |
2307 | - | let | |
2308 | - | if (( | |
2309 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2309 | + | let lq = (valueOrElse(getInteger(Q, dL(aw)), 0) + m) | |
2310 | + | if ((lq > cr)) | |
2311 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lq))) | |
2310 | 2312 | else { | |
2311 | - | let | |
2312 | - | let | |
2313 | - | let | |
2313 | + | let kH = ai(aw) | |
2314 | + | let kI = valueOrElse(getInteger(kH), 0) | |
2315 | + | let lr = if ((jd > kI)) | |
2314 | 2316 | then 0 | |
2315 | - | else ( | |
2316 | - | let | |
2317 | - | $Tuple2(([ScriptTransfer( | |
2318 | - | then StringEntry( | |
2319 | - | else DeleteEntry( | |
2317 | + | else (kI - jd) | |
2318 | + | let lo = invoke(Q, "onStakeUnstakeLand", [aw], nil) | |
2319 | + | $Tuple2(([ScriptTransfer(gz.caller, 1, fromBase58String(bJ)), DeleteEntry(bD(bJ)), DeleteEntry(bG(aJ, bJ, aw)), StringEntry(ad(), eW), StringEntry(ll, lm), StringEntry(jO._2, makeString(jO._3, ":")), if ((size(kx) > 1)) | |
2320 | + | then StringEntry(kA, makeString_11C(removeByIndex(kx, value(L)), "_")) | |
2321 | + | else DeleteEntry(kA), IntegerEntry(kH, lr)] ++ li), lo) | |
2320 | 2322 | } | |
2321 | 2323 | } | |
2322 | 2324 | } | |
2323 | 2325 | } | |
2324 | 2326 | } | |
2325 | 2327 | ||
2326 | 2328 | ||
2327 | 2329 | ||
2328 | - | @Callable( | |
2329 | - | func unstakeLandCallback ( | |
2330 | + | @Callable(gz) | |
2331 | + | func unstakeLandCallback (bJ,aw) = if ((toString(gz.caller) != k)) | |
2330 | 2332 | then throw("Permission denied") | |
2331 | 2333 | else { | |
2332 | - | let | |
2333 | - | let | |
2334 | - | $Tuple2([Burn(fromBase58String( | |
2335 | - | } | |
2336 | - | ||
2337 | - | ||
2338 | - | ||
2339 | - | @Callable( | |
2340 | - | func unstakeLandREADONLY ( | |
2341 | - | let | |
2342 | - | $Tuple2(nil, | |
2343 | - | } | |
2344 | - | ||
2345 | - | ||
2346 | - | ||
2347 | - | @Callable( | |
2348 | - | func unstakeLandsFinalizeCallback ( | |
2334 | + | let ls = kP(aw, bJ) | |
2335 | + | let lo = invoke(Q, "onStakeUnstakeLand", [aw], nil) | |
2336 | + | $Tuple2([Burn(fromBase58String(bJ), 1), DeleteEntry(bD(bJ)), DeleteEntry(bG(aJ, bJ, aw))], $Tuple5(ls._1, ls._2, ls._3, ls._4, lo)) | |
2337 | + | } | |
2338 | + | ||
2339 | + | ||
2340 | + | ||
2341 | + | @Callable(gz) | |
2342 | + | func unstakeLandREADONLY (bJ,aw) = { | |
2343 | + | let ls = kP(aw, bJ) | |
2344 | + | $Tuple2(nil, ls) | |
2345 | + | } | |
2346 | + | ||
2347 | + | ||
2348 | + | ||
2349 | + | @Callable(gz) | |
2350 | + | func unstakeLandsFinalizeCallback (aw) = if ((toString(gz.caller) != k)) | |
2349 | 2351 | then throw("Permission denied") | |
2350 | - | else $Tuple2([DeleteEntry( | |
2351 | - | ||
2352 | - | ||
2353 | - | ||
2354 | - | @Callable( | |
2355 | - | func convertUnstakedLands () = if ((size( | |
2352 | + | else $Tuple2([DeleteEntry(ag(aw)), DeleteEntry(ai(aw))], 0) | |
2353 | + | ||
2354 | + | ||
2355 | + | ||
2356 | + | @Callable(gz) | |
2357 | + | func convertUnstakedLands () = if ((size(gz.payments) != 1)) | |
2356 | 2358 | then throw("Exactly one payment required") | |
2357 | 2359 | else { | |
2358 | - | let | |
2359 | - | let | |
2360 | - | let | |
2361 | - | if (( | |
2362 | - | then throw((("NFT " + | |
2360 | + | let lj = value(gz.payments[0]) | |
2361 | + | let bB = value(lj.assetId) | |
2362 | + | let x = toString(gz.caller) | |
2363 | + | if ((lj.amount != 1)) | |
2364 | + | then throw((("NFT " + aJ) + " token should be attached as payment")) | |
2363 | 2365 | else { | |
2364 | - | let | |
2365 | - | if (( | |
2366 | + | let jn = value(assetInfo(bB)) | |
2367 | + | if ((jn.issuer != this)) | |
2366 | 2368 | then throw("Unknown issuer of token") | |
2367 | - | else if (!(contains( | |
2368 | - | then throw((("Only NFT " + | |
2369 | + | else if (!(contains(jn.name, aJ))) | |
2370 | + | then throw((("Only NFT " + aJ) + " tokens are accepted")) | |
2369 | 2371 | else { | |
2370 | - | let | |
2371 | - | let | |
2372 | - | let | |
2373 | - | let | |
2374 | - | let | |
2375 | - | let | |
2376 | - | let | |
2377 | - | if (( | |
2372 | + | let bJ = toBase58String(bB) | |
2373 | + | let jr = split(jn.description, "_") | |
2374 | + | let jd = ar(jr[U]) | |
2375 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2376 | + | let je = valueOrElse(getInteger(bE(aM, bJ)), 0) | |
2377 | + | let lt = ((jd * p) + ((((jd * hU) + je) * p) / 5)) | |
2378 | + | let lu = invoke(S, "requestAcresCallback", [lt], nil) | |
2379 | + | if ((lu == lu)) | |
2378 | 2380 | then { | |
2379 | - | let | |
2380 | - | if (( | |
2381 | - | then $Tuple2([Burn(fromBase58String( | |
2381 | + | let lv = invoke(addressFromStringValue(k), "stakeAcresCallback", [x], [AttachedPayment(aa, lt)]) | |
2382 | + | if ((lv == lv)) | |
2383 | + | then $Tuple2([Burn(fromBase58String(bJ), 1)], 0) | |
2382 | 2384 | else throw("Strict value is not equal to itself.") | |
2383 | 2385 | } | |
2384 | 2386 | else throw("Strict value is not equal to itself.") | |
2385 | 2387 | } | |
2386 | 2388 | } | |
2387 | 2389 | } | |
2388 | 2390 | ||
2389 | 2391 | ||
2390 | 2392 | ||
2391 | - | @Callable( | |
2393 | + | @Callable(gz) | |
2392 | 2394 | func stakeDuck () = { | |
2393 | - | let | |
2394 | - | if ((size( | |
2395 | + | let li = kO(gz) | |
2396 | + | if ((size(gz.payments) != 1)) | |
2395 | 2397 | then throw("Exactly one payment required") | |
2396 | 2398 | else { | |
2397 | - | let | |
2398 | - | let | |
2399 | - | let | |
2400 | - | if (( | |
2401 | - | then throw((("NFT " + | |
2399 | + | let lj = value(gz.payments[0]) | |
2400 | + | let bB = value(lj.assetId) | |
2401 | + | let x = toString(gz.caller) | |
2402 | + | if ((lj.amount != 1)) | |
2403 | + | then throw((("NFT " + aK) + " token should be attached as payment")) | |
2402 | 2404 | else { | |
2403 | - | let | |
2404 | - | let | |
2405 | - | then ( | |
2405 | + | let jn = value(assetInfo(bB)) | |
2406 | + | let lw = if (if (c) | |
2407 | + | then (jn.issuer == this) | |
2406 | 2408 | else false) | |
2407 | - | then contains( | |
2409 | + | then contains(jn.name, aL) | |
2408 | 2410 | else false | |
2409 | - | if (if (if (( | |
2410 | - | then ( | |
2411 | + | if (if (if ((jn.issuer != dN)) | |
2412 | + | then (jn.issuer != dO) | |
2411 | 2413 | else false) | |
2412 | - | then !( | |
2414 | + | then !(lw) | |
2413 | 2415 | else false) | |
2414 | - | then throw((((("Unknown issuer of " + | |
2415 | - | else if (if (!(contains( | |
2416 | - | then !( | |
2416 | + | then throw((((("Unknown issuer of " + aK) + " or ") + aL) + " token")) | |
2417 | + | else if (if (!(contains(jn.name, aK))) | |
2418 | + | then !(lw) | |
2417 | 2419 | else false) | |
2418 | - | then throw((((("Only NFT " + | |
2420 | + | then throw((((("Only NFT " + aK) + " or ") + aL) + " tokens are accepted")) | |
2419 | 2421 | else { | |
2420 | - | let | |
2421 | - | let | |
2422 | - | if (isDefined(getInteger( | |
2423 | - | then throw((("NFT " + | |
2424 | - | else if (isDefined(getString( | |
2425 | - | then throw(("You already staked one duck: " + | |
2422 | + | let lx = toBase58String(bB) | |
2423 | + | let jo = bD(lx) | |
2424 | + | if (isDefined(getInteger(jo))) | |
2425 | + | then throw((("NFT " + jn.name) + " is already staked")) | |
2426 | + | else if (isDefined(getString(bT(x)))) | |
2427 | + | then throw(("You already staked one duck: " + jn.name)) | |
2426 | 2428 | else { | |
2427 | - | let | |
2428 | - | let | |
2429 | - | let | |
2430 | - | let | |
2431 | - | let | |
2432 | - | let | |
2433 | - | let | |
2434 | - | ([IntegerEntry( | |
2429 | + | let ly = bV(lx) | |
2430 | + | let co = getString(ly) | |
2431 | + | let hE = bU(lx) | |
2432 | + | let lz = getString(hE) | |
2433 | + | let iW = cQ(lx) | |
2434 | + | let iX = dx(valueOrElse(getInteger(cT(lx)), 0)) | |
2435 | + | let lA = valueOrElse(getInteger(iW), iX) | |
2436 | + | ([IntegerEntry(jo, lastBlock.timestamp), IntegerEntry(bG(aK, toBase58String(bB), x), lastBlock.timestamp), StringEntry(bS(lx), x), StringEntry(bT(x), lx)] ++ (if (isDefined(co)) | |
2435 | 2437 | then nil | |
2436 | - | else ([StringEntry( | |
2438 | + | else ([StringEntry(ly, aR)] ++ (if (isDefined(lz)) | |
2437 | 2439 | then nil | |
2438 | - | else (([StringEntry( | |
2440 | + | else (([StringEntry(hE, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iW, lA)) ++ li))))) | |
2439 | 2441 | } | |
2440 | 2442 | } | |
2441 | 2443 | } | |
2442 | 2444 | } | |
2443 | 2445 | } | |
2444 | 2446 | ||
2445 | 2447 | ||
2446 | 2448 | ||
2447 | - | @Callable( | |
2448 | - | func unstakeDuck ( | |
2449 | - | let | |
2450 | - | if ((size( | |
2449 | + | @Callable(gz) | |
2450 | + | func unstakeDuck (lx) = { | |
2451 | + | let li = kO(gz) | |
2452 | + | if ((size(gz.payments) != 0)) | |
2451 | 2453 | then throw("No payments required") | |
2452 | 2454 | else { | |
2453 | - | let | |
2454 | - | let | |
2455 | - | let | |
2456 | - | let | |
2457 | - | if (!(isDefined(getInteger( | |
2458 | - | then throw((("NFT " + | |
2459 | - | else if (!(isDefined(getString( | |
2460 | - | then throw((("The duck " + | |
2455 | + | let bB = fromBase58String(lx) | |
2456 | + | let x = toString(gz.caller) | |
2457 | + | let jn = value(assetInfo(bB)) | |
2458 | + | let jo = bD(lx) | |
2459 | + | if (!(isDefined(getInteger(jo)))) | |
2460 | + | then throw((("NFT " + jn.name) + " is not staked")) | |
2461 | + | else if (!(isDefined(getString(bT(x))))) | |
2462 | + | then throw((("The duck " + jn.name) + " is not staked")) | |
2461 | 2463 | else { | |
2462 | - | let | |
2463 | - | if (( | |
2464 | + | let jq = valueOrErrorMessage(getString(bS(lx)), (("NFT " + jn.name) + " is orphaned")) | |
2465 | + | if ((jq != x)) | |
2464 | 2466 | then throw("Staked NFT is not yours") | |
2465 | - | else if ( | |
2467 | + | else if (kl(lx)) | |
2466 | 2468 | then throw("unstakeDuck_checkTournament") | |
2467 | 2469 | else { | |
2468 | - | let | |
2469 | - | let | |
2470 | - | let | |
2471 | - | if (( | |
2472 | - | then throw((("Please heal your duck to " + toString( | |
2473 | - | else ([ScriptTransfer( | |
2470 | + | let iW = cQ(lx) | |
2471 | + | let iX = dx(valueOrElse(getInteger(cT(lx)), 0)) | |
2472 | + | let dI = valueOrElse(getInteger(iW), iX) | |
2473 | + | if ((iX > dI)) | |
2474 | + | then throw((("Please heal your duck to " + toString(iX)) + "hp before unstaking")) | |
2475 | + | else ([ScriptTransfer(gz.caller, 1, bB), DeleteEntry(jo), DeleteEntry(iW), DeleteEntry(bV(lx)), DeleteEntry(bS(lx)), DeleteEntry(bG(aK, lx, x)), DeleteEntry(bT(x))] ++ li) | |
2474 | 2476 | } | |
2475 | 2477 | } | |
2476 | 2478 | } | |
2477 | 2479 | } | |
2478 | 2480 | ||
2479 | 2481 | ||
2480 | 2482 | ||
2481 | - | @Callable( | |
2482 | - | func unstakeDuckCallback ( | |
2483 | + | @Callable(gz) | |
2484 | + | func unstakeDuckCallback (bP,aw) = if ((toString(gz.caller) != k)) | |
2483 | 2485 | then throw("Permission denied") | |
2484 | 2486 | else { | |
2485 | - | let | |
2486 | - | $Tuple2([ScriptTransfer(addressFromStringValue( | |
2487 | - | } | |
2488 | - | ||
2489 | - | ||
2490 | - | ||
2491 | - | @Callable( | |
2492 | - | func unstakeDuckREADONLY ( | |
2493 | - | let | |
2494 | - | $Tuple2(nil, | |
2495 | - | } | |
2496 | - | ||
2497 | - | ||
2498 | - | ||
2499 | - | @Callable( | |
2500 | - | func claimRes ( | |
2501 | - | let | |
2502 | - | if ((size( | |
2487 | + | let ls = lb(aw, bP) | |
2488 | + | $Tuple2([ScriptTransfer(addressFromStringValue(aw), 1, fromBase58String(bP)), DeleteEntry(bD(bP)), DeleteEntry(bS(bP)), DeleteEntry(bG(aK, bP, aw)), DeleteEntry(bT(aw))], ls) | |
2489 | + | } | |
2490 | + | ||
2491 | + | ||
2492 | + | ||
2493 | + | @Callable(gz) | |
2494 | + | func unstakeDuckREADONLY (bP,aw) = { | |
2495 | + | let ls = lb(aw, bP) | |
2496 | + | $Tuple2(nil, ls) | |
2497 | + | } | |
2498 | + | ||
2499 | + | ||
2500 | + | ||
2501 | + | @Callable(gz) | |
2502 | + | func claimRes (eD,lB) = { | |
2503 | + | let li = kO(gz) | |
2504 | + | if ((size(gz.payments) != 0)) | |
2503 | 2505 | then throw("No payments required") | |
2504 | 2506 | else { | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | $Tuple2((((( | |
2509 | - | } | |
2510 | - | } | |
2511 | - | ||
2512 | - | ||
2513 | - | ||
2514 | - | @Callable( | |
2515 | - | func claimResToWH ( | |
2516 | - | let | |
2517 | - | if ((size( | |
2507 | + | let aw = toString(gz.originCaller) | |
2508 | + | let fe = js(aw, eD, eq, lB) | |
2509 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
2510 | + | $Tuple2(((((fe._1 ++ ka(bP, fraction(dj, eD, p))._1) :+ StringEntry(fe._2, makeString(fe._3, ":"))) :+ StringEntry(fe._4, makeString(fe._5, ":"))) ++ li), fe._3[bu]) | |
2511 | + | } | |
2512 | + | } | |
2513 | + | ||
2514 | + | ||
2515 | + | ||
2516 | + | @Callable(gz) | |
2517 | + | func claimResToWH (eD,lB) = { | |
2518 | + | let li = kO(gz) | |
2519 | + | if ((size(gz.payments) != 0)) | |
2518 | 2520 | then throw("No payments required") | |
2519 | 2521 | else { | |
2520 | - | let | |
2521 | - | let | |
2522 | - | $Tuple2((((( | |
2523 | - | } | |
2524 | - | } | |
2525 | - | ||
2526 | - | ||
2527 | - | ||
2528 | - | @Callable( | |
2529 | - | func flight ( | |
2530 | - | let | |
2531 | - | if ((size( | |
2522 | + | let aw = toString(gz.originCaller) | |
2523 | + | let fe = js(aw, eD, ep, lB) | |
2524 | + | $Tuple2(((((fe._1 ++ kb(aw, fraction(dj, eD, p))._1) :+ StringEntry(fe._2, makeString(fe._3, ":"))) :+ StringEntry(fe._4, makeString(fe._5, ":"))) ++ li), fe._5[bl]) | |
2525 | + | } | |
2526 | + | } | |
2527 | + | ||
2528 | + | ||
2529 | + | ||
2530 | + | @Callable(gz) | |
2531 | + | func flight (iL,iM) = { | |
2532 | + | let li = kO(gz) | |
2533 | + | if ((size(gz.payments) != 0)) | |
2532 | 2534 | then throw("No payments required") | |
2533 | 2535 | else { | |
2534 | - | let | |
2535 | - | let | |
2536 | - | let | |
2537 | - | let | |
2538 | - | let | |
2539 | - | let | |
2540 | - | let | |
2541 | - | if (( | |
2536 | + | let bX = toString(gz.caller) | |
2537 | + | let hh = iK(bX, iL, iM) | |
2538 | + | let iQ = hh._1 | |
2539 | + | let bP = hh._2 | |
2540 | + | let ly = bV(bP) | |
2541 | + | let jl = valueOrElse(getString(ly), aR) | |
2542 | + | let iS = hh._4 | |
2543 | + | if ((iS == jl)) | |
2542 | 2544 | then throw("You can't fly to the same location") | |
2543 | 2545 | else { | |
2544 | - | let | |
2545 | - | let | |
2546 | - | let | |
2547 | - | let | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | let | |
2552 | - | let | |
2553 | - | let | |
2554 | - | then if ( | |
2555 | - | then | |
2556 | - | else if (!( | |
2557 | - | then if (( | |
2558 | - | then $Tuple2( | |
2559 | - | else $Tuple2( | |
2560 | - | else if (( | |
2546 | + | let cz = split(iS, "_") | |
2547 | + | let lC = (cz[by] == "T") | |
2548 | + | let lD = (cz[by] == "D") | |
2549 | + | let gl = cV(bP) | |
2550 | + | let lE = valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2551 | + | let lF = ff(lE, hh._5) | |
2552 | + | let lG = lF._1 | |
2553 | + | let lH = lF._2 | |
2554 | + | let hw = lF._3 | |
2555 | + | let lI = if (!(ct(R, jl))) | |
2556 | + | then if (lC) | |
2557 | + | then cx(jl, iS, 5) | |
2558 | + | else if (!(lD)) | |
2559 | + | then if ((iQ > 0)) | |
2560 | + | then $Tuple2(iS, iQ) | |
2561 | + | else $Tuple2(jl, 0) | |
2562 | + | else if ((iQ > 0)) | |
2561 | 2563 | then { | |
2562 | - | let | |
2563 | - | if (( | |
2564 | - | then $Tuple2( | |
2564 | + | let al = invoke(this, "processDelivery", [bP], nil) | |
2565 | + | if ((al == al)) | |
2566 | + | then $Tuple2(jl, iQ) | |
2565 | 2567 | else throw("Strict value is not equal to itself.") | |
2566 | 2568 | } | |
2567 | - | else $Tuple2( | |
2568 | - | else if ( | |
2569 | - | then if (!( | |
2569 | + | else $Tuple2(jl, 0) | |
2570 | + | else if (cn(R, jl)) | |
2571 | + | then if (!(cn(R, iS))) | |
2570 | 2572 | then throw("Your duck is taking part in the tournament") | |
2571 | 2573 | else { | |
2572 | - | let | |
2573 | - | let | |
2574 | - | let | |
2575 | - | if (( | |
2576 | - | then | |
2577 | - | else if (( | |
2574 | + | let lJ = parseIntValue(cz[bz]) | |
2575 | + | let lK = split(jl, "_") | |
2576 | + | let cp = valueOrElse(getInteger(R, ca), 0) | |
2577 | + | if ((lJ != (parseIntValue(lK[bz]) + 1))) | |
2578 | + | then cx(jl, iS, 7) | |
2579 | + | else if ((iQ > 0)) | |
2578 | 2580 | then { | |
2579 | - | let | |
2580 | - | let | |
2581 | - | then invoke( | |
2581 | + | let lL = valueOrElse(getInteger(R, ce(cp, bP)), 0) | |
2582 | + | let lM = if ((lJ > lL)) | |
2583 | + | then invoke(R, "saveDuckResult", [bP, lJ], nil) | |
2582 | 2584 | else unit | |
2583 | - | if (( | |
2584 | - | then $Tuple2( | |
2585 | + | if ((lM == lM)) | |
2586 | + | then $Tuple2(iS, iQ) | |
2585 | 2587 | else throw("Strict value is not equal to itself.") | |
2586 | 2588 | } | |
2587 | - | else $Tuple2( | |
2589 | + | else $Tuple2(jl, 0) | |
2588 | 2590 | } | |
2589 | - | else throw(("Unknown curLocation:" + | |
2590 | - | let | |
2591 | - | let | |
2592 | - | $Tuple2(((([StringEntry( | |
2593 | - | then [StringEntry( | |
2594 | - | else nil)) ++ | |
2595 | - | then | |
2596 | - | else | |
2591 | + | else throw(("Unknown curLocation:" + jl)) | |
2592 | + | let lN = lI._1 | |
2593 | + | let lO = lI._2 | |
2594 | + | $Tuple2(((([StringEntry(ly, lN), StringEntry(gl, lG), IntegerEntry(cQ(bP), lO)] ++ li) ++ (if (lH) | |
2595 | + | then [StringEntry(db(bP), "0_0_0_0_0")] | |
2596 | + | else nil)) ++ ka(bP, if ((iQ > 0)) | |
2597 | + | then dk | |
2598 | + | else dl)._1), hh._3) | |
2597 | 2599 | } | |
2598 | 2600 | } | |
2599 | 2601 | } | |
2600 | 2602 | ||
2601 | 2603 | ||
2602 | 2604 | ||
2603 | - | @Callable(gy) | |
2604 | - | func heal (lO,lP,lQ) = { | |
2605 | - | let lh = kN(gy) | |
2606 | - | if (if (if ((0 > lO)) | |
2607 | - | then true | |
2608 | - | else (0 > lP)) | |
2605 | + | @Callable(gz) | |
2606 | + | func heal (lP,lQ,lR) = { | |
2607 | + | let li = kO(gz) | |
2608 | + | if (if (if ((0 > lP)) | |
2609 | 2609 | then true | |
2610 | 2610 | else (0 > lQ)) | |
2611 | + | then true | |
2612 | + | else (0 > lR)) | |
2611 | 2613 | then throw("Quantity cannot be negative") | |
2612 | 2614 | else { | |
2613 | - | let | |
2614 | - | if ( | |
2615 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
2616 | + | if (kl(bP)) | |
2615 | 2617 | then throw("heal_checkTournament") | |
2616 | 2618 | else { | |
2617 | - | let | |
2618 | - | let | |
2619 | - | let | |
2620 | - | let | |
2621 | - | if (( | |
2622 | - | then throw((("HP should be < " + toString( | |
2619 | + | let lS = [lP, lQ, lR] | |
2620 | + | let iW = cQ(bP) | |
2621 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
2622 | + | let lT = valueOrElse(getInteger(iW), iX) | |
2623 | + | if ((lT >= iX)) | |
2624 | + | then throw((("HP should be < " + toString(iX)) + " to heal")) | |
2623 | 2625 | else { | |
2624 | - | let | |
2625 | - | let | |
2626 | - | let | |
2626 | + | let hE = bU(bP) | |
2627 | + | let ii = hD(hE) | |
2628 | + | let lU = if ((ii[bw] == "")) | |
2627 | 2629 | then nil | |
2628 | - | else split_4C( | |
2629 | - | func | |
2630 | - | let | |
2631 | - | let | |
2632 | - | then parseIntValue( | |
2630 | + | else split_4C(ii[bw], "_") | |
2631 | + | func lV (eM,cw) = { | |
2632 | + | let an = eM._2 | |
2633 | + | let gY = if ((size(lU) > an)) | |
2634 | + | then parseIntValue(lU[an]) | |
2633 | 2635 | else 0 | |
2634 | - | if ((3 > | |
2636 | + | if ((3 > an)) | |
2635 | 2637 | then { | |
2636 | - | let | |
2637 | - | if (( | |
2638 | - | then throw(((("You have only " + toString( | |
2639 | - | else $Tuple3(( | |
2638 | + | let lW = lS[an] | |
2639 | + | if ((lW > gY)) | |
2640 | + | then throw(((("You have only " + toString(gY)) + " of ") + bb[an])) | |
2641 | + | else $Tuple3((eM._1 :+ toString((gY - lW))), (an + 1), (eM._3 + (parseIntValue(split(cw, "_")[bg]) * lW))) | |
2640 | 2642 | } | |
2641 | - | else $Tuple3(( | |
2643 | + | else $Tuple3((eM._1 :+ toString(gY)), (an + 1), eM._3) | |
2642 | 2644 | } | |
2643 | 2645 | ||
2644 | - | let | |
2645 | - | let | |
2646 | - | let | |
2647 | - | let | |
2648 | - | func | |
2649 | - | then | |
2650 | - | else | |
2651 | - | ||
2652 | - | func | |
2653 | - | then | |
2646 | + | let fe = { | |
2647 | + | let eO = be | |
2648 | + | let eP = size(eO) | |
2649 | + | let eQ = $Tuple3(nil, 0, 0) | |
2650 | + | func eR (eS,eT) = if ((eT >= eP)) | |
2651 | + | then eS | |
2652 | + | else lV(eS, eO[eT]) | |
2653 | + | ||
2654 | + | func eU (eS,eT) = if ((eT >= eP)) | |
2655 | + | then eS | |
2654 | 2656 | else throw("List size exceeds 50") | |
2655 | 2657 | ||
2656 | - | | |
2658 | + | eU(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
2657 | 2659 | } | |
2658 | - | let | |
2659 | - | $Tuple2((([IntegerEntry( | |
2660 | + | let lX = min([iX, (lT + fe._3)]) | |
2661 | + | $Tuple2((([IntegerEntry(iW, lX), StringEntry(hE, makeString_2C([ii[bt], ii[bu], ii[bv], makeString(fe._1, "_")], ":"))] ++ li) ++ ka(bP, (du * ((lP + lQ) + lR)))._1), lX) | |
2660 | 2662 | } | |
2661 | 2663 | } | |
2662 | 2664 | } | |
2663 | 2665 | } | |
2664 | 2666 | ||
2665 | 2667 | ||
2666 | 2668 | ||
2667 | - | @Callable( | |
2669 | + | @Callable(gz) | |
2668 | 2670 | func healES () = { | |
2669 | - | let | |
2670 | - | if ((size( | |
2671 | + | let li = kO(gz) | |
2672 | + | if ((size(gz.payments) != 1)) | |
2671 | 2673 | then throw("Exactly one payment required") | |
2672 | 2674 | else { | |
2673 | - | let | |
2674 | - | if (( | |
2675 | + | let lj = value(gz.payments[0]) | |
2676 | + | if ((lj.assetId != i)) | |
2675 | 2677 | then throw("Allowed USDT payment only!") | |
2676 | 2678 | else { | |
2677 | - | let | |
2678 | - | if ( | |
2679 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
2680 | + | if (kl(bP)) | |
2679 | 2681 | then throw("healES_checkTournament") | |
2680 | 2682 | else { | |
2681 | - | let | |
2682 | - | let | |
2683 | - | let | |
2684 | - | if (( | |
2683 | + | let iW = cQ(bP) | |
2684 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
2685 | + | let lT = valueOrElse(getInteger(iW), iX) | |
2686 | + | if ((lT > 0)) | |
2685 | 2687 | then throw("HP should be 0 to call Emergency Service") | |
2686 | 2688 | else { | |
2687 | - | let | |
2688 | - | let | |
2689 | - | let | |
2689 | + | let hE = bU(bP) | |
2690 | + | let ii = hD(hE) | |
2691 | + | let lU = if ((ii[bw] == "")) | |
2690 | 2692 | then nil | |
2691 | - | else split_4C( | |
2692 | - | let | |
2693 | - | then parseIntValue( | |
2693 | + | else split_4C(ii[bw], "_") | |
2694 | + | let lY = if ((size(lU) > 0)) | |
2695 | + | then parseIntValue(lU[0]) | |
2694 | 2696 | else 0 | |
2695 | - | let | |
2696 | - | then parseIntValue( | |
2697 | + | let lZ = if ((size(lU) > 1)) | |
2698 | + | then parseIntValue(lU[1]) | |
2697 | 2699 | else 0 | |
2698 | - | let | |
2699 | - | then parseIntValue( | |
2700 | + | let ma = if ((size(lU) > 2)) | |
2701 | + | then parseIntValue(lU[2]) | |
2700 | 2702 | else 0 | |
2701 | - | if (if (if ((lX > 0)) | |
2702 | - | then true | |
2703 | - | else (lY > 0)) | |
2703 | + | if (if (if ((lY > 0)) | |
2704 | 2704 | then true | |
2705 | 2705 | else (lZ > 0)) | |
2706 | + | then true | |
2707 | + | else (ma > 0)) | |
2706 | 2708 | then throw("You have to use own Medical Kit") | |
2707 | 2709 | else { | |
2708 | - | let | |
2709 | - | let | |
2710 | - | then split_4C(value( | |
2710 | + | let mb = getString(O, bY()) | |
2711 | + | let mc = if (isDefined(mb)) | |
2712 | + | then split_4C(value(mb), "_") | |
2711 | 2713 | else nil | |
2712 | - | let | |
2713 | - | then parseIntValue( | |
2714 | + | let md = if ((size(mc) > 0)) | |
2715 | + | then parseIntValue(mc[0]) | |
2714 | 2716 | else 0 | |
2715 | - | if ((0 >= | |
2717 | + | if ((0 >= md)) | |
2716 | 2718 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2717 | 2719 | else { | |
2718 | - | let | |
2719 | - | let | |
2720 | - | let | |
2721 | - | let | |
2722 | - | let | |
2723 | - | if (( | |
2724 | - | then throw(("Payment attached should be " + toString( | |
2720 | + | let lX = (lT + parseIntValue(split(be[0], "_")[bg])) | |
2721 | + | let me = makeString([toString((md - 1)), removeByIndex(mc, 0)], "_") | |
2722 | + | let cw = split(be[0], "_") | |
2723 | + | let mf = cv(cw) | |
2724 | + | let mg = fraction((mf * aT), aS, (p * bj)) | |
2725 | + | if ((lj.amount != mg)) | |
2726 | + | then throw(("Payment attached should be " + toString(mg))) | |
2725 | 2727 | else { | |
2726 | - | let | |
2727 | - | $Tuple2((( | |
2728 | + | let fe = aj(invoke(O, "updateEsStorage", [me], [AttachedPayment(i, mg)])) | |
2729 | + | $Tuple2(((li :+ IntegerEntry(iW, lX)) ++ ka(bP, do)._1), fe) | |
2728 | 2730 | } | |
2729 | 2731 | } | |
2730 | 2732 | } | |
2731 | 2733 | } | |
2732 | 2734 | } | |
2733 | 2735 | } | |
2734 | 2736 | } | |
2735 | 2737 | } | |
2736 | 2738 | ||
2737 | 2739 | ||
2738 | 2740 | ||
2739 | - | @Callable( | |
2740 | - | func updateBackpack ( | |
2741 | + | @Callable(gz) | |
2742 | + | func updateBackpack (bP,mh) = if ((gz.caller != O)) | |
2741 | 2743 | then throw("permission denied") | |
2742 | - | else $Tuple2([StringEntry( | |
2743 | - | ||
2744 | - | ||
2745 | - | ||
2746 | - | @Callable( | |
2744 | + | else $Tuple2([StringEntry(bU(bP), mh)], mh) | |
2745 | + | ||
2746 | + | ||
2747 | + | ||
2748 | + | @Callable(gz) | |
2747 | 2749 | func commitForRandom () = { | |
2748 | - | let | |
2749 | - | let | |
2750 | - | let | |
2751 | - | $Tuple2(([IntegerEntry( | |
2752 | - | } | |
2753 | - | ||
2754 | - | ||
2755 | - | ||
2756 | - | @Callable( | |
2757 | - | func revealRandom ( | |
2758 | - | let | |
2759 | - | let | |
2760 | - | let | |
2761 | - | let | |
2762 | - | if (( | |
2763 | - | then throw(("Random number is not ready yet, wait until height = " + toString( | |
2750 | + | let li = kO(gz) | |
2751 | + | let mi = (height + ab) | |
2752 | + | let aw = toString(gz.caller) | |
2753 | + | $Tuple2(([IntegerEntry(ac(aw), mi)] ++ li), mi) | |
2754 | + | } | |
2755 | + | ||
2756 | + | ||
2757 | + | ||
2758 | + | @Callable(gz) | |
2759 | + | func revealRandom (aE) = { | |
2760 | + | let li = kO(gz) | |
2761 | + | let aw = toString(gz.caller) | |
2762 | + | let mj = ac(aw) | |
2763 | + | let mi = valueOrErrorMessage(getInteger(mj), "You have to commitForRandom() first!") | |
2764 | + | if ((mi > height)) | |
2765 | + | then throw(("Random number is not ready yet, wait until height = " + toString(mi))) | |
2764 | 2766 | else { | |
2765 | - | let | |
2766 | - | let | |
2767 | - | let | |
2768 | - | $Tuple2(([DeleteEntry( | |
2769 | - | } | |
2770 | - | } | |
2771 | - | ||
2772 | - | ||
2773 | - | ||
2774 | - | @Callable( | |
2767 | + | let aG = value(value(blockInfoByHeight(mi)).vrf) | |
2768 | + | let aF = toBytes(valueOrElse(getString(av(aw)), "")) | |
2769 | + | let mk = aD(aE, aF, aG) | |
2770 | + | $Tuple2(([DeleteEntry(mj)] ++ li), mk) | |
2771 | + | } | |
2772 | + | } | |
2773 | + | ||
2774 | + | ||
2775 | + | ||
2776 | + | @Callable(gz) | |
2775 | 2777 | func buySLand () = { | |
2776 | - | let | |
2777 | - | if ((size( | |
2778 | + | let li = kO(gz) | |
2779 | + | if ((size(gz.payments) != 1)) | |
2778 | 2780 | then throw("Exactly one payment required") | |
2779 | 2781 | else { | |
2780 | - | let | |
2781 | - | if (( | |
2782 | + | let lj = value(gz.payments[0]) | |
2783 | + | if ((lj.assetId != i)) | |
2782 | 2784 | then throw("Allowed USDT payment only!") | |
2783 | - | else if (( | |
2784 | - | then throw(("Payment attached should be " + toString( | |
2785 | + | else if ((lj.amount != dU)) | |
2786 | + | then throw(("Payment attached should be " + toString(dU))) | |
2785 | 2787 | else { | |
2786 | - | let | |
2787 | - | let | |
2788 | - | $Tuple2(((( | |
2788 | + | let fe = iD(gz.caller, gz.transactionId) | |
2789 | + | let ml = am(invoke(S, "burnAcres", [dW], nil)) | |
2790 | + | $Tuple2((((fe._1 :+ ScriptTransfer(O, lj.amount, i)) ++ kb(toString(gz.caller), dq)._1) ++ li), $Tuple2(fe._2._1, ml)) | |
2789 | 2791 | } | |
2790 | 2792 | } | |
2791 | 2793 | } | |
2792 | 2794 | ||
2793 | 2795 | ||
2794 | 2796 | ||
2795 | - | @Callable( | |
2796 | - | func expedition ( | |
2797 | - | let | |
2798 | - | if ((size( | |
2797 | + | @Callable(gz) | |
2798 | + | func expedition (iL,iM) = { | |
2799 | + | let li = kO(gz) | |
2800 | + | if ((size(gz.payments) != 0)) | |
2799 | 2801 | then throw("No payments required") | |
2800 | 2802 | else { | |
2801 | - | let | |
2802 | - | let | |
2803 | - | let | |
2804 | - | let | |
2805 | - | let | |
2806 | - | let | |
2807 | - | let | |
2808 | - | let | |
2809 | - | let | |
2810 | - | let | |
2811 | - | let | |
2812 | - | let | |
2813 | - | let | |
2814 | - | let | |
2815 | - | let | |
2816 | - | let | |
2817 | - | let | |
2818 | - | then $Tuple3([IntegerEntry( | |
2819 | - | else $Tuple3(( | |
2820 | - | then [StringEntry( | |
2821 | - | else ((((nil :+ StringEntry( | |
2822 | - | if ( | |
2803 | + | let bX = toString(gz.caller) | |
2804 | + | let hh = iK(bX, iL, iM) | |
2805 | + | let bP = hh._2 | |
2806 | + | let iW = cQ(bP) | |
2807 | + | let hE = bU(bP) | |
2808 | + | let ii = hD(hE) | |
2809 | + | let jL = split(ii[bv], "_") | |
2810 | + | let jN = makeString(eY(true, jL, dT), "_") | |
2811 | + | let gl = cV(bP) | |
2812 | + | let lE = valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2813 | + | let mm = ff(lE, hh._5) | |
2814 | + | let lG = mm._1 | |
2815 | + | let lH = mm._2 | |
2816 | + | let hw = mm._3 | |
2817 | + | let mn = iD(gz.caller, gz.transactionId) | |
2818 | + | let iJ = mn._2._1 | |
2819 | + | let fe = if ((0 >= hh._1)) | |
2820 | + | then $Tuple3([IntegerEntry(iW, 0), StringEntry(gl, lG)], "", 0) | |
2821 | + | else $Tuple3((mn._1 ++ (if (lH) | |
2822 | + | then [StringEntry(db(bP), "0_0_0_0_0")] | |
2823 | + | else ((((nil :+ StringEntry(bV(bP), makeString([mn._2._2, "L", iJ], "_"))) :+ IntegerEntry(iW, hh._1)) :+ StringEntry(gl, lG)) :+ StringEntry(hE, makeString([ii[bt], ii[bu], jN, ii[bw]], ":"))))), iJ, hh._3) | |
2824 | + | if (kl(bP)) | |
2823 | 2825 | then throw("expedition_checkTournament") | |
2824 | 2826 | else { | |
2825 | - | let | |
2826 | - | $Tuple2((( | |
2827 | + | let ml = am(invoke(S, "burnAcres", [dW], nil)) | |
2828 | + | $Tuple2(((fe._1 ++ ka(bP, dq)._1) ++ li), $Tuple3(fe._2, fe._3, ml)) | |
2827 | 2829 | } | |
2828 | 2830 | } | |
2829 | 2831 | } | |
2830 | 2832 | ||
2831 | 2833 | ||
2832 | 2834 | ||
2833 | - | @Callable( | |
2835 | + | @Callable(gz) | |
2834 | 2836 | func buySLandForAcres () = { | |
2835 | - | let | |
2836 | - | if ((size( | |
2837 | + | let li = kO(gz) | |
2838 | + | if ((size(gz.payments) != 1)) | |
2837 | 2839 | then throw("exactly 1 payment must be attached") | |
2838 | 2840 | else { | |
2839 | - | let | |
2840 | - | let | |
2841 | - | if (if (!(isDefined( | |
2841 | + | let lj = gz.payments[0] | |
2842 | + | let fl = lj.amount | |
2843 | + | if (if (!(isDefined(lj.assetId))) | |
2842 | 2844 | then true | |
2843 | - | else (value( | |
2845 | + | else (value(lj.assetId) != aa)) | |
2844 | 2846 | then throw("ACRES payments only!") | |
2845 | - | else if (( | |
2846 | - | then throw(("Payment attached should be " + toString( | |
2847 | + | else if ((fl != dW)) | |
2848 | + | then throw(("Payment attached should be " + toString(dW))) | |
2847 | 2849 | else { | |
2848 | - | let | |
2849 | - | let | |
2850 | - | $Tuple2((( | |
2850 | + | let fe = iD(gz.caller, gz.transactionId) | |
2851 | + | let ml = am(invoke(S, "burnAcres", [dW], [AttachedPayment(aa, fl)])) | |
2852 | + | $Tuple2(((fe._1 ++ kb(toString(gz.caller), dq)._1) ++ li), $Tuple2(fe._2._1, ml)) | |
2851 | 2853 | } | |
2852 | 2854 | } | |
2853 | 2855 | } | |
2854 | 2856 | ||
2855 | 2857 | ||
2856 | 2858 | ||
2857 | - | @Callable( | |
2858 | - | func upgradeInfra ( | |
2859 | - | let | |
2860 | - | if ((size( | |
2859 | + | @Callable(gz) | |
2860 | + | func upgradeInfra (bJ) = { | |
2861 | + | let li = kO(gz) | |
2862 | + | if ((size(gz.payments) != 0)) | |
2861 | 2863 | then throw("No payments required") | |
2862 | 2864 | else { | |
2863 | - | let | |
2864 | - | let | |
2865 | - | $Tuple2((( | |
2866 | - | } | |
2867 | - | } | |
2868 | - | ||
2869 | - | ||
2870 | - | ||
2871 | - | @Callable( | |
2872 | - | func activateArtifact ( | |
2873 | - | let | |
2874 | - | if ((size( | |
2865 | + | let fe = jF(true, gz.caller, 0, bJ) | |
2866 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
2867 | + | $Tuple2(((fe._1 ++ li) ++ ka(bP, fraction(dr, fe._3, p))._1), fe._2) | |
2868 | + | } | |
2869 | + | } | |
2870 | + | ||
2871 | + | ||
2872 | + | ||
2873 | + | @Callable(gz) | |
2874 | + | func activateArtifact (mo,mp) = { | |
2875 | + | let li = kO(gz) | |
2876 | + | if ((size(gz.payments) != 0)) | |
2875 | 2877 | then throw("No payments required") | |
2876 | 2878 | else { | |
2877 | - | let | |
2878 | - | let | |
2879 | - | let | |
2880 | - | if (("PRESALE" == | |
2881 | - | then | |
2882 | - | else if (("ONBOARD" == | |
2883 | - | then | |
2879 | + | let aw = toString(gz.caller) | |
2880 | + | let fe = { | |
2881 | + | let h = mo | |
2882 | + | if (("PRESALE" == h)) | |
2883 | + | then kj(aw, mp) | |
2884 | + | else if (("ONBOARD" == h)) | |
2885 | + | then kc(aw) | |
2884 | 2886 | else throw("Unknown artifact") | |
2885 | 2887 | } | |
2886 | - | ( | |
2887 | - | } | |
2888 | - | } | |
2889 | - | ||
2890 | - | ||
2891 | - | ||
2892 | - | @Callable( | |
2893 | - | func mergeLands ( | |
2894 | - | let | |
2895 | - | if ((size( | |
2888 | + | (fe ++ li) | |
2889 | + | } | |
2890 | + | } | |
2891 | + | ||
2892 | + | ||
2893 | + | ||
2894 | + | @Callable(gz) | |
2895 | + | func mergeLands (kp) = { | |
2896 | + | let li = kO(gz) | |
2897 | + | if ((size(gz.payments) != 0)) | |
2896 | 2898 | then throw("No payments required") | |
2897 | 2899 | else { | |
2898 | - | let | |
2899 | - | $Tuple2((( | |
2900 | - | } | |
2901 | - | } | |
2902 | - | ||
2903 | - | ||
2904 | - | ||
2905 | - | @Callable( | |
2906 | - | func cargoExchange ( | |
2907 | - | let | |
2908 | - | if ((size( | |
2900 | + | let fe = kN(toString(gz.caller), kp) | |
2901 | + | $Tuple2(((fe._1 ++ li) ++ kb(toString(gz.caller), ds)._1), fe._2) | |
2902 | + | } | |
2903 | + | } | |
2904 | + | ||
2905 | + | ||
2906 | + | ||
2907 | + | @Callable(gz) | |
2908 | + | func cargoExchange (mq,bJ) = { | |
2909 | + | let li = kO(gz) | |
2910 | + | if ((size(gz.payments) != 0)) | |
2909 | 2911 | then throw("No payments required") | |
2910 | 2912 | else { | |
2911 | - | let | |
2912 | - | let | |
2913 | - | let | |
2914 | - | let | |
2915 | - | if (!(isDefined(getInteger( | |
2916 | - | then throw(( | |
2913 | + | let ih = split_4C(mq, ":") | |
2914 | + | let aw = toString(gz.originCaller) | |
2915 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
2916 | + | let jo = bD(bJ) | |
2917 | + | if (!(isDefined(getInteger(jo)))) | |
2918 | + | then throw((jn.name + " is not staked")) | |
2917 | 2919 | else { | |
2918 | - | let | |
2919 | - | if (( | |
2920 | - | then throw(( | |
2920 | + | let jq = valueOrErrorMessage(getString(bA(bJ)), (("NFT " + jn.name) + " is orphaned")) | |
2921 | + | if ((jq != aw)) | |
2922 | + | then throw((aJ + " is not yours")) | |
2921 | 2923 | else { | |
2922 | - | let | |
2923 | - | let | |
2924 | - | let | |
2925 | - | let | |
2926 | - | let | |
2927 | - | if (( | |
2928 | - | then throw((("Duck location type is " + | |
2929 | - | else if (( | |
2930 | - | then throw(("Duck should be on the land " + | |
2924 | + | let hT = (ar(split(jn.description, "_")[U]) / q) | |
2925 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
2926 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
2927 | + | let jl = valueOrElse(getString(bV(bP)), aR) | |
2928 | + | let cq = split(value(jl), "_") | |
2929 | + | if ((cq[by] != "L")) | |
2930 | + | then throw((("Duck location type is " + cq[by]) + ", but should be L")) | |
2931 | + | else if ((cq[bz] != bJ)) | |
2932 | + | then throw(("Duck should be on the land " + bJ)) | |
2931 | 2933 | else { | |
2932 | - | let | |
2933 | - | let | |
2934 | - | let | |
2935 | - | let | |
2936 | - | let | |
2937 | - | let | |
2938 | - | let | |
2939 | - | let | |
2940 | - | ([StringEntry( | |
2934 | + | let hS = bI(bJ) | |
2935 | + | let hJ = hR(hS, hT, hU) | |
2936 | + | let hE = bU(bP) | |
2937 | + | let ii = hD(hE) | |
2938 | + | let fe = ig(ih, hJ, ii) | |
2939 | + | let ia = split(hJ[bo], "_") | |
2940 | + | let jC = (parseIntValue(ia[bq]) + fe._7) | |
2941 | + | let jD = (parseIntValue(ia[br]) - fe._7) | |
2942 | + | ([StringEntry(hE, makeString_2C([ii[bt], fe._4, fe._5, fe._6], ":")), StringEntry(hS, makeString_2C([hJ[bk], fe._1, fe._2, fe._3, makeString([ia[bp], toString(jC), toString(jD), ia[bs]], "_")], ":"))] ++ li) | |
2941 | 2943 | } | |
2942 | 2944 | } | |
2943 | 2945 | } | |
2944 | 2946 | } | |
2945 | 2947 | } | |
2946 | 2948 | ||
2947 | 2949 | ||
2948 | 2950 | ||
2949 | - | @Callable( | |
2950 | - | func saveWarehouse ( | |
2951 | + | @Callable(gz) | |
2952 | + | func saveWarehouse (hW,bJ) = if ((gz.caller != O)) | |
2951 | 2953 | then throw("Access denied") | |
2952 | 2954 | else { | |
2953 | - | let | |
2954 | - | let | |
2955 | - | if ((size( | |
2955 | + | let hS = bI(bJ) | |
2956 | + | let hX = split_4C(hW, ":") | |
2957 | + | if ((size(hX) != 5)) | |
2956 | 2958 | then throw("warehouse string should contain 4 ':' separators") | |
2957 | 2959 | else { | |
2958 | - | let | |
2959 | - | let | |
2960 | - | let | |
2961 | - | let | |
2962 | - | if ((0 > | |
2960 | + | let mr = split(hX[bo], "_")[bp] | |
2961 | + | let jC = hI(hX) | |
2962 | + | let ms = hG(hX[bk]) | |
2963 | + | let jD = ((ms - parseIntValue(mr)) - jC) | |
2964 | + | if ((0 > jD)) | |
2963 | 2965 | then throw("Operation leads to negative free warehouse space") | |
2964 | 2966 | else { | |
2965 | - | let | |
2966 | - | $Tuple2([StringEntry( | |
2967 | + | let mt = makeString_2C([hX[bk], hX[bl], hX[bm], hX[bn], makeString([mr, toString(jC), toString(jD), toString(ms)], "_")], ":") | |
2968 | + | $Tuple2([StringEntry(hS, mt)], mt) | |
2967 | 2969 | } | |
2968 | 2970 | } | |
2969 | 2971 | } | |
2970 | 2972 | ||
2971 | 2973 | ||
2972 | 2974 | ||
2973 | - | @Callable( | |
2974 | - | func setCustomName ( | |
2975 | - | let | |
2976 | - | if ((size( | |
2975 | + | @Callable(gz) | |
2976 | + | func setCustomName (bB,kz,bF) = { | |
2977 | + | let li = kO(gz) | |
2978 | + | if ((size(gz.payments) != 1)) | |
2977 | 2979 | then throw("Exactly one payment required") | |
2978 | 2980 | else { | |
2979 | - | let | |
2980 | - | if (( | |
2981 | + | let lj = value(gz.payments[0]) | |
2982 | + | if ((lj.assetId != i)) | |
2981 | 2983 | then throw("Allowed USDT payment only!") | |
2982 | - | else if (( | |
2983 | - | then throw(("Payment should be " + toString( | |
2984 | - | else if (contains( | |
2985 | - | then throw(("Name should not contain '__': " + | |
2986 | - | else if ((size( | |
2987 | - | then throw(("Name too long, maxLength=" + toString( | |
2984 | + | else if ((lj.amount != dQ)) | |
2985 | + | then throw(("Payment should be " + toString(dQ))) | |
2986 | + | else if (contains(kz, "__")) | |
2987 | + | then throw(("Name should not contain '__': " + kz)) | |
2988 | + | else if ((size(kz) > dR)) | |
2989 | + | then throw(("Name too long, maxLength=" + toString(dR))) | |
2988 | 2990 | else { | |
2989 | - | let | |
2990 | - | let | |
2991 | - | let | |
2992 | - | if (("ACCOUNT" == | |
2991 | + | let aw = toString(gz.originCaller) | |
2992 | + | let mu = { | |
2993 | + | let h = bF | |
2994 | + | if (("ACCOUNT" == h)) | |
2993 | 2995 | then { | |
2994 | - | let | |
2995 | - | let | |
2996 | - | if (isDefined( | |
2997 | - | then throw(("Name already registered: " + | |
2996 | + | let mv = em(kz) | |
2997 | + | let mw = getString(mv) | |
2998 | + | if (isDefined(mw)) | |
2999 | + | then throw(("Name already registered: " + kz)) | |
2998 | 3000 | else { | |
2999 | - | let | |
3000 | - | let | |
3001 | - | let | |
3002 | - | then [DeleteEntry( | |
3001 | + | let mx = bM(aw) | |
3002 | + | let my = getString(mx) | |
3003 | + | let mz = if (isDefined(my)) | |
3004 | + | then [DeleteEntry(em(value(my)))] | |
3003 | 3005 | else nil | |
3004 | - | ((( | |
3006 | + | (((mz :+ StringEntry(mx, kz)) :+ StringEntry(mv, aw)) ++ kb(aw, dp)._1) | |
3005 | 3007 | } | |
3006 | 3008 | } | |
3007 | - | else if (("LAND" == | |
3009 | + | else if (("LAND" == h)) | |
3008 | 3010 | then { | |
3009 | - | let | |
3010 | - | let | |
3011 | - | if (!(isDefined(getInteger( | |
3012 | - | then throw(( | |
3011 | + | let jn = value(assetInfo(fromBase58String(bB))) | |
3012 | + | let jo = bD(bB) | |
3013 | + | if (!(isDefined(getInteger(jo)))) | |
3014 | + | then throw((jn.name + " is not staked")) | |
3013 | 3015 | else { | |
3014 | - | let | |
3015 | - | if (( | |
3016 | - | then throw(( | |
3016 | + | let jq = valueOrErrorMessage(getString(bA(bB)), (("NFT " + jn.name) + " is orphaned")) | |
3017 | + | if ((jq != aw)) | |
3018 | + | then throw((aJ + " is not yours")) | |
3017 | 3019 | else { | |
3018 | - | let | |
3019 | - | let | |
3020 | - | if (isDefined( | |
3021 | - | then throw(("Name already registered: " + | |
3020 | + | let mv = ef(kz) | |
3021 | + | let mw = getString(mv) | |
3022 | + | if (isDefined(mw)) | |
3023 | + | then throw(("Name already registered: " + kz)) | |
3022 | 3024 | else { | |
3023 | - | let | |
3024 | - | let | |
3025 | - | let | |
3026 | - | then [DeleteEntry( | |
3025 | + | let mA = bC(bB) | |
3026 | + | let my = getString(mA) | |
3027 | + | let mz = if (isDefined(my)) | |
3028 | + | then [DeleteEntry(ef(value(my)))] | |
3027 | 3029 | else nil | |
3028 | - | ((( | |
3030 | + | (((mz :+ StringEntry(mA, kz)) :+ StringEntry(mv, bB)) ++ kb(aw, dp)._1) | |
3029 | 3031 | } | |
3030 | 3032 | } | |
3031 | 3033 | } | |
3032 | 3034 | } | |
3033 | - | else if (("DUCK" == | |
3035 | + | else if (("DUCK" == h)) | |
3034 | 3036 | then { | |
3035 | - | let | |
3036 | - | let | |
3037 | - | if (if (!(isDefined(getInteger( | |
3037 | + | let jn = value(assetInfo(fromBase58String(bB))) | |
3038 | + | let jo = bD(bB) | |
3039 | + | if (if (!(isDefined(getInteger(jo)))) | |
3038 | 3040 | then true | |
3039 | - | else !(isDefined(getString( | |
3040 | - | then throw(( | |
3041 | + | else !(isDefined(getString(bT(aw))))) | |
3042 | + | then throw((jn.name + " is not staked")) | |
3041 | 3043 | else { | |
3042 | - | let | |
3043 | - | if (( | |
3044 | - | then throw(( | |
3044 | + | let jq = valueOrErrorMessage(getString(bS(bB)), (("NFT " + jn.name) + " is orphaned")) | |
3045 | + | if ((jq != aw)) | |
3046 | + | then throw((aK + " is not yours")) | |
3045 | 3047 | else { | |
3046 | - | let | |
3047 | - | let | |
3048 | - | if (isDefined( | |
3049 | - | then throw(("Name already registered: " + | |
3048 | + | let mv = el(kz) | |
3049 | + | let mw = getString(mv) | |
3050 | + | if (isDefined(mw)) | |
3051 | + | then throw(("Name already registered: " + kz)) | |
3050 | 3052 | else { | |
3051 | - | let | |
3052 | - | let | |
3053 | - | let | |
3054 | - | then [DeleteEntry( | |
3053 | + | let mA = bL(bB) | |
3054 | + | let my = getString(mA) | |
3055 | + | let mz = if (isDefined(my)) | |
3056 | + | then [DeleteEntry(el(value(my)))] | |
3055 | 3057 | else nil | |
3056 | - | ((( | |
3058 | + | (((mz :+ StringEntry(mA, kz)) :+ StringEntry(mv, bB)) ++ ka(bB, dp)._1) | |
3057 | 3059 | } | |
3058 | 3060 | } | |
3059 | 3061 | } | |
3060 | 3062 | } | |
3061 | 3063 | else throw("Unknown entity type") | |
3062 | 3064 | } | |
3063 | - | $Tuple2((( | |
3065 | + | $Tuple2(((mu :+ ScriptTransfer(O, lj.amount, i)) ++ li), 0) | |
3064 | 3066 | } | |
3065 | 3067 | } | |
3066 | 3068 | } | |
3067 | 3069 | ||
3068 | 3070 | ||
3069 | 3071 | ||
3070 | - | @Callable( | |
3071 | - | func setReferrals ( | |
3072 | + | @Callable(gz) | |
3073 | + | func setReferrals (mB,mC) = if ((gz.callerPublicKey != g)) | |
3072 | 3074 | then throw("Permission denied") | |
3073 | 3075 | else { | |
3074 | - | let | |
3075 | - | if ((size( | |
3076 | + | let li = kO(gz) | |
3077 | + | if ((size(gz.payments) != 0)) | |
3076 | 3078 | then throw("No payments required") | |
3077 | - | else if (!(isDefined(addressFromString( | |
3078 | - | then throw(("Invalid address: " + | |
3079 | + | else if (!(isDefined(addressFromString(mB)))) | |
3080 | + | then throw(("Invalid address: " + mB)) | |
3079 | 3081 | else { | |
3080 | - | let | |
3081 | - | if (!(isDefined( | |
3082 | - | then throw(("Invalid address: " + | |
3082 | + | let mD = addressFromString(mC) | |
3083 | + | if (!(isDefined(mD))) | |
3084 | + | then throw(("Invalid address: " + mC)) | |
3083 | 3085 | else { | |
3084 | - | let | |
3085 | - | if (!(isDefined( | |
3086 | + | let mE = getString(av(mB)) | |
3087 | + | if (!(isDefined(mE))) | |
3086 | 3088 | then throw("oldPlayer didn't do any tx in game") | |
3087 | - | else if ((0 >= wavesBalance(value( | |
3089 | + | else if ((0 >= wavesBalance(value(mD)).available)) | |
3088 | 3090 | then throw("newPlayer has no WAVES") | |
3089 | 3091 | else { | |
3090 | - | let | |
3091 | - | let | |
3092 | - | let | |
3093 | - | then split_4C(value( | |
3092 | + | let mF = en() | |
3093 | + | let mG = getString(mF) | |
3094 | + | let mH = if (isDefined(mG)) | |
3095 | + | then split_4C(value(mG), "_") | |
3094 | 3096 | else nil | |
3095 | - | if (containsElement( | |
3096 | - | then throw(( | |
3097 | + | if (containsElement(mH, mC)) | |
3098 | + | then throw((mC + " is not newbie (already has referrals)")) | |
3097 | 3099 | else { | |
3098 | - | let | |
3099 | - | let | |
3100 | - | if (if (isDefined( | |
3101 | - | then isDefined(addressFromString(value( | |
3100 | + | let kd = bN(mC) | |
3101 | + | let ke = getString(kd) | |
3102 | + | if (if (isDefined(ke)) | |
3103 | + | then isDefined(addressFromString(value(ke))) | |
3102 | 3104 | else false) | |
3103 | - | then throw((( | |
3105 | + | then throw(((mC + " already has refBy: ") + value(ke))) | |
3104 | 3106 | else { | |
3105 | - | let | |
3106 | - | let | |
3107 | - | let | |
3108 | - | then split_4C(value( | |
3107 | + | let mI = bR(mB) | |
3108 | + | let mJ = getString(mI) | |
3109 | + | let mK = if (isDefined(mJ)) | |
3110 | + | then split_4C(value(mJ), "_") | |
3109 | 3111 | else nil | |
3110 | - | if (containsElement( | |
3111 | - | then throw(((( | |
3112 | + | if (containsElement(mK, mC)) | |
3113 | + | then throw((((mB + " already contains ") + mC) + " within referrals")) | |
3112 | 3114 | else { | |
3113 | - | let | |
3114 | - | let | |
3115 | - | then value( | |
3116 | - | else makeString_2C(( | |
3117 | - | $Tuple2(([StringEntry( | |
3115 | + | let mL = makeString_2C((mK :+ mC), "_") | |
3116 | + | let mM = if (containsElement(mH, mB)) | |
3117 | + | then value(mG) | |
3118 | + | else makeString_2C((mH :+ mB), "_") | |
3119 | + | $Tuple2(([StringEntry(kd, mB), StringEntry(mI, mL), StringEntry(mF, mM)] ++ li), 0) | |
3118 | 3120 | } | |
3119 | 3121 | } | |
3120 | 3122 | } | |
3121 | 3123 | } | |
3122 | 3124 | } | |
3123 | 3125 | } | |
3124 | 3126 | } | |
3125 | 3127 | ||
3126 | 3128 | ||
3127 | 3129 | ||
3128 | - | @Callable( | |
3129 | - | func distributePoints ( | |
3130 | - | let | |
3131 | - | if ((size( | |
3130 | + | @Callable(gz) | |
3131 | + | func distributePoints (mN,mO,mP,mQ,mR) = { | |
3132 | + | let li = kO(gz) | |
3133 | + | if ((size(gz.payments) != 0)) | |
3132 | 3134 | then throw("No payments required") | |
3133 | 3135 | else { | |
3134 | - | let | |
3135 | - | let | |
3136 | - | let | |
3137 | - | let | |
3136 | + | let aw = toString(gz.originCaller) | |
3137 | + | let mS = ao(invoke(Q, "checkWlgXpREADONLY", [aw], nil)) | |
3138 | + | let mT = am(mS[1]) | |
3139 | + | let mU = if ((0 >= mT)) | |
3138 | 3140 | then $Tuple2(0, nil) | |
3139 | 3141 | else { | |
3140 | - | let | |
3141 | - | if (( | |
3142 | - | then $Tuple2( | |
3142 | + | let jY = am(invoke(Q, "takeWlgXp", [aw], nil)) | |
3143 | + | if ((jY == jY)) | |
3144 | + | then $Tuple2(mT, [IntegerEntry(cX(aw), am(mS[0])), IntegerEntry(cW(aw), am(mS[2]))]) | |
3143 | 3145 | else throw("Strict value is not equal to itself.") | |
3144 | 3146 | } | |
3145 | - | let | |
3146 | - | let | |
3147 | - | let | |
3148 | - | let | |
3149 | - | let | |
3150 | - | let | |
3151 | - | let | |
3152 | - | let | |
3153 | - | let | |
3154 | - | if (( | |
3155 | - | then throw((("There are only " + toString( | |
3147 | + | let mV = mU._1 | |
3148 | + | let mW = mU._2 | |
3149 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
3150 | + | let mX = cY(aw) | |
3151 | + | let mY = (valueOrElse(getInteger(mX), 0) + mV) | |
3152 | + | let mZ = cU(bP) | |
3153 | + | let na = valueOrElse(getInteger(mZ), 0) | |
3154 | + | let nb = (mY + na) | |
3155 | + | let nc = ((((mN + mO) + mP) + mQ) + mR) | |
3156 | + | if ((nc > nb)) | |
3157 | + | then throw((("There are only " + toString(nb)) + " free points to distribute")) | |
3156 | 3158 | else { | |
3157 | - | let | |
3158 | - | let | |
3159 | - | let | |
3160 | - | $Tuple2((([IntegerEntry( | |
3159 | + | let nd = cR(bP) | |
3160 | + | let dG = split(valueOrElse(getString(nd), "0_0_0_0_0"), "_") | |
3161 | + | let ne = (mY - nc) | |
3162 | + | $Tuple2((([IntegerEntry(mX, if ((0 > ne)) | |
3161 | 3163 | then 0 | |
3162 | - | else | |
3163 | - | then ( | |
3164 | - | else | |
3164 | + | else ne), IntegerEntry(mZ, if ((0 > ne)) | |
3165 | + | then (na + ne) | |
3166 | + | else na), StringEntry(nd, makeString([toString((parseIntValue(dG[cG]) + mN)), toString((parseIntValue(dG[cH]) + mO)), toString((parseIntValue(dG[cI]) + mP)), toString((parseIntValue(dG[cJ]) + mQ)), toString((parseIntValue(dG[cK]) + mR))], "_"))] ++ li) ++ mW), 0) | |
3165 | 3167 | } | |
3166 | 3168 | } | |
3167 | 3169 | } | |
3168 | 3170 | ||
3169 | 3171 | ||
3170 | 3172 | ||
3171 | - | @Callable( | |
3172 | - | func splitByGlobalWeightsREADONLY ( | |
3173 | - | ||
3174 | - | ||
3175 | - | ||
3176 | - | @Callable( | |
3177 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3178 | - | let | |
3179 | - | $Tuple2(nil, $Tuple2( | |
3180 | - | } | |
3181 | - | ||
3182 | - | ||
3183 | - | ||
3184 | - | @Callable( | |
3185 | - | func getBackpackREADONLY ( | |
3186 | - | ||
3187 | - | ||
3188 | - | ||
3189 | - | @Callable( | |
3190 | - | func getWarehouseREADONLY ( | |
3191 | - | let | |
3192 | - | let | |
3193 | - | let | |
3194 | - | $Tuple2(nil, makeString_2C( | |
3195 | - | } | |
3196 | - | ||
3197 | - | ||
3198 | - | ||
3199 | - | @Callable( | |
3200 | - | func saveLastTx () = if (!(containsElement([ | |
3173 | + | @Callable(gz) | |
3174 | + | func splitByGlobalWeightsREADONLY (eD) = $Tuple2(nil, eV(eD)) | |
3175 | + | ||
3176 | + | ||
3177 | + | ||
3178 | + | @Callable(gz) | |
3179 | + | func splitByGlobalAndLocalWeightsREADONLY (nf,ng,gC) = { | |
3180 | + | let gv = gB(gC) | |
3181 | + | $Tuple2(nil, $Tuple2(eV(nf), eG(ng, gv))) | |
3182 | + | } | |
3183 | + | ||
3184 | + | ||
3185 | + | ||
3186 | + | @Callable(gz) | |
3187 | + | func getBackpackREADONLY (bP) = $Tuple2(nil, makeString(hD(bU(bP)), ":")) | |
3188 | + | ||
3189 | + | ||
3190 | + | ||
3191 | + | @Callable(gz) | |
3192 | + | func getWarehouseREADONLY (bJ) = { | |
3193 | + | let jn = value(assetInfo(fromBase58String(bJ))) | |
3194 | + | let hT = (ar(split(jn.description, "_")[U]) / q) | |
3195 | + | let hU = valueOrElse(getInteger(bK(bJ)), 0) | |
3196 | + | $Tuple2(nil, makeString_2C(hR(bI(bJ), hT, hU), ":")) | |
3197 | + | } | |
3198 | + | ||
3199 | + | ||
3200 | + | ||
3201 | + | @Callable(gz) | |
3202 | + | func saveLastTx () = if (!(containsElement([Q, O, R, S], gz.caller))) | |
3201 | 3203 | then throw("Access denied") | |
3202 | - | else $Tuple2( | |
3203 | - | ||
3204 | - | ||
3205 | - | ||
3206 | - | @Callable( | |
3207 | - | func updateDuckStats ( | |
3204 | + | else $Tuple2(kO(gz), 42) | |
3205 | + | ||
3206 | + | ||
3207 | + | ||
3208 | + | @Callable(gz) | |
3209 | + | func updateDuckStats (bP,jY) = if ((gz.caller != O)) | |
3208 | 3210 | then throw("Access denied") | |
3209 | - | else | |
3210 | - | ||
3211 | - | ||
3212 | - | ||
3213 | - | @Callable( | |
3214 | - | func updateAccStats ( | |
3211 | + | else ka(bP, jY) | |
3212 | + | ||
3213 | + | ||
3214 | + | ||
3215 | + | @Callable(gz) | |
3216 | + | func updateAccStats (aw,jY) = if (!(containsElement([Q, O, S], gz.caller))) | |
3215 | 3217 | then throw("Access denied") | |
3216 | - | else | |
3217 | - | ||
3218 | - | ||
3219 | - | ||
3220 | - | @Callable( | |
3221 | - | func equipDuck ( | |
3222 | - | let | |
3223 | - | if ((size( | |
3218 | + | else kb(aw, jY) | |
3219 | + | ||
3220 | + | ||
3221 | + | ||
3222 | + | @Callable(gz) | |
3223 | + | func equipDuck (nh) = { | |
3224 | + | let li = kO(gz) | |
3225 | + | if ((size(gz.payments) != 0)) | |
3224 | 3226 | then throw("No payments required") | |
3225 | 3227 | else { | |
3226 | - | let | |
3227 | - | let | |
3228 | - | if ( | |
3228 | + | let aw = toString(gz.originCaller) | |
3229 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
3230 | + | if (kl(bP)) | |
3229 | 3231 | then throw("equipDuck_checkTournament") | |
3230 | 3232 | else { | |
3231 | - | let | |
3232 | - | let | |
3233 | - | let | |
3234 | - | let | |
3235 | - | let | |
3236 | - | if ((size( | |
3233 | + | let gl = cV(bP) | |
3234 | + | let lc = split(valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3235 | + | let hE = bU(bP) | |
3236 | + | let ii = hD(hE) | |
3237 | + | let lG = split(nh, "_") | |
3238 | + | if ((size(lG) != cM)) | |
3237 | 3239 | then throw("Wrong equipment string") | |
3238 | 3240 | else { | |
3239 | - | let | |
3240 | - | let | |
3241 | - | let | |
3241 | + | let go = gd(lc, fs(ii[bw]), true, nil) | |
3242 | + | let gp = split(lG[cL], ";")[1] | |
3243 | + | let dE = if ((gp == "")) | |
3242 | 3244 | then 0 | |
3243 | 3245 | else { | |
3244 | - | let | |
3245 | - | if (( | |
3246 | + | let gq = split(gp, ",")[0] | |
3247 | + | if ((gq == "")) | |
3246 | 3248 | then 0 | |
3247 | 3249 | else { | |
3248 | - | let | |
3249 | - | let | |
3250 | - | let | |
3251 | - | if (if (if (if (if (( | |
3250 | + | let fH = split(gq, ":") | |
3251 | + | let L = fH[0] | |
3252 | + | let gr = fH[1] | |
3253 | + | if (if (if (if (if ((L == "06")) | |
3252 | 3254 | then true | |
3253 | - | else ( | |
3255 | + | else (L == "07")) | |
3254 | 3256 | then true | |
3255 | - | else ( | |
3256 | - | then ( | |
3257 | + | else (L == "08")) | |
3258 | + | then (gr != "") | |
3257 | 3259 | else false) | |
3258 | - | then (parseIntValue( | |
3260 | + | then (parseIntValue(gr) > 0) | |
3259 | 3261 | else false) | |
3260 | - | then parseIntValue(split( | |
3262 | + | then parseIntValue(split(be[parseIntValue(L)], "_")[bg]) | |
3261 | 3263 | else 0 | |
3262 | 3264 | } | |
3263 | 3265 | } | |
3264 | - | let | |
3265 | - | let | |
3266 | - | let | |
3267 | - | $Tuple2(([StringEntry( | |
3266 | + | let fY = dD(this, bP, dE, true) | |
3267 | + | let gs = gd(lG, go, false, fY) | |
3268 | + | let ld = fx(gs) | |
3269 | + | $Tuple2(([StringEntry(gl, nh), StringEntry(hE, makeString_2C([ii[bt], ii[bu], ii[bv], ld], ":")), StringEntry(db(bP), makeString([toString(fY[7]), toString(fY[8]), toString(fY[9]), toString(fY[10]), toString(fY[11])], "_"))] ++ li), 0) | |
3268 | 3270 | } | |
3269 | 3271 | } | |
3270 | 3272 | } | |
3271 | 3273 | } | |
3272 | 3274 | ||
3273 | 3275 | ||
3274 | 3276 | ||
3275 | - | @Callable( | |
3276 | - | func initDuckTourAttempt ( | |
3277 | + | @Callable(gz) | |
3278 | + | func initDuckTourAttempt (bP) = if ((gz.caller != R)) | |
3277 | 3279 | then throw("Access denied") | |
3278 | 3280 | else { | |
3279 | - | let | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | let | |
3284 | - | let | |
3285 | - | let | |
3286 | - | $Tuple2([IntegerEntry( | |
3287 | - | } | |
3288 | - | ||
3289 | - | ||
3290 | - | ||
3291 | - | @Callable( | |
3281 | + | let iW = cQ(bP) | |
3282 | + | let iX = dx(valueOrElse(getInteger(cT(bP)), 0)) | |
3283 | + | let lA = valueOrElse(getInteger(iW), iX) | |
3284 | + | let ni = bV(bP) | |
3285 | + | let jl = valueOrElse(getString(ni), aR) | |
3286 | + | let cp = valueOrElse(getInteger(R, ca), 0) | |
3287 | + | let nj = (toString(cp) + "_T_0") | |
3288 | + | $Tuple2([IntegerEntry(cZ(bP), lA), IntegerEntry(iW, iX), StringEntry(da(bP), jl), StringEntry(ni, nj)], nj) | |
3289 | + | } | |
3290 | + | ||
3291 | + | ||
3292 | + | ||
3293 | + | @Callable(gz) | |
3292 | 3294 | func breakAttempt () = { | |
3293 | - | let | |
3294 | - | let | |
3295 | - | let | |
3296 | - | let | |
3297 | - | if ((split( | |
3295 | + | let li = kO(gz) | |
3296 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.caller))), "You don't have a duck staked") | |
3297 | + | let ni = bV(bP) | |
3298 | + | let jl = valueOrElse(getString(ni), aR) | |
3299 | + | if ((split(jl, "_")[by] != "T")) | |
3298 | 3300 | then throw("Your duck is not in the tournament") | |
3299 | 3301 | else { | |
3300 | - | let | |
3301 | - | let | |
3302 | - | $Tuple2((( | |
3303 | - | } | |
3304 | - | } | |
3305 | - | ||
3306 | - | ||
3307 | - | ||
3308 | - | @Callable( | |
3309 | - | func breakAttemptCallback () = if (( | |
3302 | + | let nk = getIntegerValue(cZ(bP)) | |
3303 | + | let nl = getStringValue(da(bP)) | |
3304 | + | $Tuple2(((li :+ IntegerEntry(cQ(bP), nk)) :+ StringEntry(ni, nl)), jl) | |
3305 | + | } | |
3306 | + | } | |
3307 | + | ||
3308 | + | ||
3309 | + | ||
3310 | + | @Callable(gz) | |
3311 | + | func breakAttemptCallback () = if ((gz.caller != R)) | |
3310 | 3312 | then throw("Access denied") | |
3311 | 3313 | else { | |
3312 | - | let | |
3313 | - | $Tuple2([IntegerEntry( | |
3314 | - | } | |
3315 | - | ||
3316 | - | ||
3317 | - | ||
3318 | - | @Callable( | |
3319 | - | func exitTournamentInternal ( | |
3314 | + | let bP = valueOrErrorMessage(getString(bT(toString(gz.originCaller))), "You don't have a duck staked") | |
3315 | + | $Tuple2([IntegerEntry(cQ(bP), getIntegerValue(cZ(bP))), StringEntry(bV(bP), getStringValue(da(bP)))], "breakAttemptCallback") | |
3316 | + | } | |
3317 | + | ||
3318 | + | ||
3319 | + | ||
3320 | + | @Callable(gz) | |
3321 | + | func exitTournamentInternal (bP) = if ((gz.caller != this)) | |
3320 | 3322 | then throw("Access denied") | |
3321 | 3323 | else { | |
3322 | - | let | |
3323 | - | let | |
3324 | - | $Tuple2([IntegerEntry( | |
3325 | - | } | |
3326 | - | ||
3327 | - | ||
3328 | - | ||
3329 | - | @Callable( | |
3330 | - | func processDelivery ( | |
3324 | + | let nk = getIntegerValue(cZ(bP)) | |
3325 | + | let nl = getStringValue(da(bP)) | |
3326 | + | $Tuple2([IntegerEntry(cQ(bP), nk), StringEntry(bV(bP), nl)], false) | |
3327 | + | } | |
3328 | + | ||
3329 | + | ||
3330 | + | ||
3331 | + | @Callable(gz) | |
3332 | + | func processDelivery (bP) = if ((gz.caller != this)) | |
3331 | 3333 | then throw("Access denied") | |
3332 | 3334 | else { | |
3333 | - | let | |
3334 | - | let | |
3335 | - | if (( | |
3336 | - | then throw(("Delivery is not available, fund=" + | |
3335 | + | let aw = toString(gz.originCaller) | |
3336 | + | let nm = valueOrElse(getInteger(O, bZ), 0) | |
3337 | + | if ((aU > nm)) | |
3338 | + | then throw(("Delivery is not available, fund=" + ax(nm, 6))) | |
3337 | 3339 | else { | |
3338 | - | let | |
3339 | - | let | |
3340 | - | let | |
3341 | - | let | |
3342 | - | let | |
3343 | - | then valueOrElse(getInteger( | |
3340 | + | let cr = lastBlock.timestamp | |
3341 | + | let nn = dh(aw) | |
3342 | + | let no = valueOrElse(getInteger(di(aw)), 0) | |
3343 | + | let np = (cr / dK) | |
3344 | + | let fN = if ((no == np)) | |
3345 | + | then valueOrElse(getInteger(nn), 0) | |
3344 | 3346 | else 0 | |
3345 | - | let | |
3346 | - | let | |
3347 | - | if (( | |
3348 | - | then throw((("You already used " + toString( | |
3347 | + | let nq = valueOrElse(getInteger(S, dM(aw)), 0) | |
3348 | + | let nr = (aZ + (nq / ba)) | |
3349 | + | if ((fN >= nr)) | |
3350 | + | then throw((("You already used " + toString(nr)) + " delivery attempts for today")) | |
3349 | 3351 | else { | |
3350 | - | let | |
3351 | - | let | |
3352 | - | $Tuple2([IntegerEntry( | |
3352 | + | let ns = dg(bP) | |
3353 | + | let nt = invoke(O, "sendDeliveryReward", [aw], nil) | |
3354 | + | $Tuple2([IntegerEntry(nn, (fN + 1)), IntegerEntry(di(aw), np), IntegerEntry(ns, (valueOrElse(getInteger(ns), 0) + 1))], nt) | |
3353 | 3355 | } | |
3354 | 3356 | } | |
3355 | 3357 | } | |
3356 | 3358 | ||
3357 | 3359 | ||
3358 | 3360 | ||
3359 | - | @Callable( | |
3360 | - | func robLand ( | |
3361 | - | let | |
3362 | - | if ((size( | |
3361 | + | @Callable(gz) | |
3362 | + | func robLand (iL,iM) = { | |
3363 | + | let li = kO(gz) | |
3364 | + | if ((size(gz.payments) != 1)) | |
3363 | 3365 | then throw("exactly 1 payment must be attached") | |
3364 | 3366 | else { | |
3365 | - | let | |
3366 | - | let | |
3367 | - | if (if (!(isDefined( | |
3367 | + | let lj = gz.payments[0] | |
3368 | + | let nu = lj.amount | |
3369 | + | if (if (!(isDefined(lj.assetId))) | |
3368 | 3370 | then true | |
3369 | - | else (value( | |
3371 | + | else (value(lj.assetId) != Y)) | |
3370 | 3372 | then throw("WLGOLD payments only!") | |
3371 | - | else if (( | |
3372 | - | then throw((("Payment should be " + | |
3373 | + | else if ((nu != aW)) | |
3374 | + | then throw((("Payment should be " + ax(aW, 8)) + " WLGOLD")) | |
3373 | 3375 | else { | |
3374 | - | let | |
3375 | - | if (!(sigVerify_8Kb( | |
3376 | + | let aw = toString(gz.caller) | |
3377 | + | if (!(sigVerify_8Kb(iL, iM, g))) | |
3376 | 3378 | then throw("signature does not match") | |
3377 | 3379 | else { | |
3378 | - | let | |
3379 | - | let | |
3380 | - | let | |
3381 | - | let | |
3382 | - | let | |
3383 | - | let | |
3384 | - | let | |
3385 | - | let | |
3386 | - | if (( | |
3380 | + | let fk = split_4C(toUtf8String(iL), ";") | |
3381 | + | let nv = split_4C(fk[0], "|") | |
3382 | + | let iO = split(nv[ew], "_") | |
3383 | + | let iP = parseIntValue(iO[0]) | |
3384 | + | let iQ = parseIntValue(iO[1]) | |
3385 | + | let ja = nv[ex] | |
3386 | + | let nw = split(fk[1], "|") | |
3387 | + | let nx = nw[ey] | |
3388 | + | if ((nx != "B")) | |
3387 | 3389 | then throw("Only bank robbery is supported") | |
3388 | 3390 | else { | |
3389 | - | let | |
3390 | - | if (if (( | |
3391 | + | let iT = parseIntValue(nw[eA]) | |
3392 | + | if (if ((iT > (lastBlock.timestamp + dP))) | |
3391 | 3393 | then true | |
3392 | - | else ((lastBlock.timestamp - | |
3393 | - | then throw(((("signature outdated: logTime=" + toString( | |
3394 | + | else ((lastBlock.timestamp - dP) > iT)) | |
3395 | + | then throw(((("signature outdated: logTime=" + toString(iT)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
3394 | 3396 | else { | |
3395 | - | let | |
3396 | - | let | |
3397 | - | if (( | |
3398 | - | then throw(((("Tx ids don't match! In state: " + | |
3397 | + | let iU = nw[ez] | |
3398 | + | let iV = valueOrElse(getString(av(aw)), "") | |
3399 | + | if ((iV != iU)) | |
3400 | + | then throw(((("Tx ids don't match! In state: " + iV) + ", in msg: ") + iU)) | |
3399 | 3401 | else { | |
3400 | - | let | |
3401 | - | let | |
3402 | - | let | |
3403 | - | let | |
3404 | - | let | |
3405 | - | let | |
3406 | - | let | |
3407 | - | let | |
3408 | - | if ( | |
3402 | + | let bP = valueOrErrorMessage(getString(bT(aw)), "You don't have a duck staked") | |
3403 | + | let gl = cV(bP) | |
3404 | + | let lE = valueOrElse(getString(gl), ",;,_,;,_,;,_,;,_,;,_,;,") | |
3405 | + | let ny = ff(lE, ja) | |
3406 | + | let lG = ny._1 | |
3407 | + | let lH = ny._2 | |
3408 | + | let nz = ny._3 | |
3409 | + | let jl = valueOrElse(getString(bV(bP)), aR) | |
3410 | + | if (cn(R, jl)) | |
3409 | 3411 | then throw("Your duck is taking part in the tournament") | |
3410 | 3412 | else { | |
3411 | - | let | |
3412 | - | let | |
3413 | - | let | |
3414 | - | let | |
3415 | - | let | |
3416 | - | then valueOrElse(getInteger( | |
3413 | + | let cr = lastBlock.timestamp | |
3414 | + | let nn = de(aw) | |
3415 | + | let no = valueOrElse(getInteger(df(aw)), 0) | |
3416 | + | let np = (cr / dK) | |
3417 | + | let fN = if ((no == np)) | |
3418 | + | then valueOrElse(getInteger(nn), 0) | |
3417 | 3419 | else 0 | |
3418 | - | let | |
3419 | - | let | |
3420 | - | if (( | |
3421 | - | then throw((("You already used " + toString( | |
3420 | + | let nq = valueOrElse(getInteger(S, dM(aw)), 0) | |
3421 | + | let nA = (aX + (nq / aY)) | |
3422 | + | if ((fN >= nA)) | |
3423 | + | then throw((("You already used " + toString(nA)) + " robbery attempts for today")) | |
3422 | 3424 | else { | |
3423 | - | let | |
3424 | - | let | |
3425 | + | let ns = dd(bP) | |
3426 | + | let nB = if ((iQ > 0)) | |
3425 | 3427 | then { | |
3426 | - | let | |
3427 | - | let | |
3428 | - | then (2 * | |
3429 | - | else (5 * | |
3430 | - | if (( | |
3431 | - | then throw(((("Robbery is not available, funds = " + | |
3432 | - | else [ScriptTransfer( | |
3428 | + | let nm = assetBalance(this, Y) | |
3429 | + | let nC = if (nz) | |
3430 | + | then (2 * aW) | |
3431 | + | else (5 * aW) | |
3432 | + | if ((nC > nm)) | |
3433 | + | then throw(((("Robbery is not available, funds = " + ax(nm, 8)) + " WLGOLD, required = ") + ax(nC, 8))) | |
3434 | + | else [ScriptTransfer(gz.caller, nC, Y)] | |
3433 | 3435 | } | |
3434 | 3436 | else nil | |
3435 | - | $Tuple2(((((((((( | |
3436 | - | then [StringEntry( | |
3437 | - | else nil)) ++ | |
3438 | - | then | |
3439 | - | else | |
3437 | + | $Tuple2((((((((((li ++ nB) ++ (if (lH) | |
3438 | + | then [StringEntry(db(bP), "0_0_0_0_0")] | |
3439 | + | else nil)) ++ ka(bP, if ((iQ > 0)) | |
3440 | + | then dm | |
3441 | + | else dn)._1) :+ IntegerEntry(dc(bP), cr)) :+ IntegerEntry(nn, (fN + 1))) :+ IntegerEntry(df(aw), np)) :+ IntegerEntry(ns, (valueOrElse(getInteger(ns), 0) + 1))) :+ StringEntry(gl, lG)) :+ IntegerEntry(cQ(bP), max([iQ, 0]))), 0) | |
3440 | 3442 | } | |
3441 | 3443 | } | |
3442 | 3444 | } | |
3443 | 3445 | } | |
3444 | 3446 | } | |
3445 | 3447 | } | |
3446 | 3448 | } | |
3447 | 3449 | } | |
3448 | 3450 | } | |
3449 | 3451 | ||
3450 | 3452 | ||
3451 | 3453 | ||
3452 | - | @Callable( | |
3454 | + | @Callable(gz) | |
3453 | 3455 | func buyRoboDuck () = if (!(c)) | |
3454 | 3456 | then throw("Feature is turned off") | |
3455 | 3457 | else { | |
3456 | - | let | |
3457 | - | if ((size( | |
3458 | + | let li = kO(gz) | |
3459 | + | if ((size(gz.payments) != 1)) | |
3458 | 3460 | then throw("Exactly one payment required") | |
3459 | 3461 | else { | |
3460 | - | let | |
3461 | - | if (( | |
3462 | + | let lj = value(gz.payments[0]) | |
3463 | + | if ((lj.assetId != i)) | |
3462 | 3464 | then throw("Allowed USDT payment only!") | |
3463 | - | else if (( | |
3464 | - | then throw((("Payment attached should be " + | |
3465 | + | else if ((lj.amount != dV)) | |
3466 | + | then throw((("Payment attached should be " + ax(dV, 6)) + " USDT")) | |
3465 | 3467 | else { | |
3466 | - | let | |
3467 | - | let | |
3468 | - | let | |
3469 | - | let | |
3470 | - | let | |
3471 | - | let | |
3472 | - | $Tuple2((((( | |
3468 | + | let nD = valueOrElse(getInteger(eo()), 0) | |
3469 | + | let nE = toBytes(nD) | |
3470 | + | let eg = ((aL + "-") + takeRight(toBase16String(nE), 8)) | |
3471 | + | let nF = takeRight(toBase16String(sha256_16Kb(nE)), 6) | |
3472 | + | let iI = Issue(eg, ("Robo Duck NFT for WavesLands game, background color = #" + nF), 1, 0, false) | |
3473 | + | let bB = calculateAssetId(iI) | |
3474 | + | $Tuple2(((((li :+ IntegerEntry(eo(), (nD + 1))) :+ iI) :+ ScriptTransfer(gz.originCaller, 1, bB)) :+ ScriptTransfer(O, lj.amount, i)), $Tuple2(toBase58String(bB), nF)) | |
3473 | 3475 | } | |
3474 | 3476 | } | |
3475 | 3477 | } | |
3476 | 3478 | ||
3477 | 3479 |
github/deemru/w8io/169f3d6 1527.16 ms ◑