Mw0NChZae2OlpAEA4wAAAAAAAAAAAAAAACwAAABAAAAAcwAOAABkAGQBbABaAGQAZAFsAVoBZABkAWwCWgFkAGQBbANaA2QAZAFsBFoEZABkAWwFWgZkAGQBbAdaB2UEaghkAWQChQIZAGTwawVaCWUJclRlCloLbhBkAGQEbAdtC1oLbQxaDAEAZAVkBmQHZAhkCWQKZAtkDGQNZA5kD2QQZBFkEmQTZBRkFWQWZBdkGGQZZBpkG2QcZB1kHmQfZCBkIWQiZCNkJGQlZCZkJ2QoZClkKmQrZCxkLWQuZC9kMGcsWg1lCXLUZQ1qDmQxZDJkM2cDgwEBAGQ0ZDWEAFoPZRCDAFoRZRFmAWQ2ZDeEAVoSZQRqCGTxawWQAXIEZDlkOoQAWhNuHmUEaghk8msFkAFyGmQ8ZDqEAFoTbghkPWQ6hABaE2TzZD5kP4QBWhRlFWUHZC6DApABckBlB2oWWhZuIEcAZEBkQYQAZEFlB2oXZEJkQ40EWhhlGGRCZEONAVoWZQdqGWREgwFaGmUHahlkRYMBWhtlB2oZZEaDAVocZQdqGWRHZEJkSI0CWh1lB2oZZElkQmRKjQJaHmUHah9aH2UVZQdkB4MCkAFyyGUEaghkAWRLhQIZAGT0awWQAXLIZQdqIFogblhlBGoIZAFkS4UCGQBk9WsFkAJyAEcAZExkTYQAZE1lB2ohZEJkQ40EWiJlImQHZE5kT40CWiBuIEcAZFBkUYQAZFFlB2oXZEJkQ40EWiNlI2RCZEONAVogZQRqCGT2awWQAnI0ZQdqJFokbghkU2QfhABaJGRUZCCEAFolZRVlB2QigwKQAnJYZQdqJlomblhlBGoIZAFkS4UCGQBk92sFkAJykEcAZFVkVoQAZFZlB2ohZEJkQ40EWidlJ2QiZFdkT40CWiZuIEcAZFhkWYQAZFllB2oXZEJkQ40EWihlKGRCZEONAVomZQdqKVopZQdqKloqZQdqK1orRwBkWmRbhABkW2ULgwNaLGUHai1aLWUHai5aLmUHai9aL2UHajBaMGUVZQdkF4MCkAJy/mUHajFaMW4iRwBkXGQXhABkF2UBajJlB2ozZRoZAGUsZQFqMmRdjQZaMWUHajRaNGUVZQdkE4MCkANyOmUHajVaNW4iZABkXmw2bTdaOAEARwBkX2QThABkE2UHajllHRkAgwNaNWUHajpaOmUVZQdkGYMCkANydmUHajtaO25gZPhlBGoIZAFkAoUCGQAEAAMAawGQA2+UZPlrAG4EAgABAJADcrBlB2o8ZQFqO2UbZRxmAoMCWjtuJkcAZGBkGYQAZBllAWo7ZQdqPWUbZRxmAhkAZSxlAWo7ZF2NBlo7ZRVlB2QWgwKQA3LqZQdqPlo+biZHAGRhZBaEAGQWZQFqPmUHaj9lGmVAZgIZAGUsZQFqPmRdjQZaPmUVZQdkFIMCkARyJGUHakFaQW4yZRVlAWQUgwKQBHJWRwBkYmQUhABkFGUBakFlB2o9ZRtlHGYCGQBlLGUBakFkXY0GWkFlFWUHZBKDApAEcmplB2pCWkJuKkcAZGNkEoQAZBJlMGUdGQBlB2o5ZR1lHmYCGQBlLGUBagBqQmRdjQZaQmUHakNaQ2UHakRaRGUHakVaRWRkZGWEAFpGZGZkDmRnZGhkEGQPZGlkamRrZGxkbWQVZBNnDVpHZG5kb4QAWkhkcGRxhABaSWUVZQdkJYMCkARy8GUHakpaSm5uZQmQBXIkZHJkc4QAWktHAGR0ZHWEAGR1ZQBqTIMDWk1HAGR2ZCWEAGQlZU1kd40DWkpuOmQAZHhsB21OWk5tT1pPAQBkeWRzhABaS0cAZHpkdYQAZHVlC4MDWk1HAGR7ZCWEAGQlZU1kd40DWkplFWUHZCiDApAFcnJlB2pQWlBuCGR8ZCiEAFpQZVBaUWUVZQdkG4MCkAVykmUHalJaUm4UZVBHAGR9ZBuEAGQbZUqDA4MBWlJlFWUHZC+DApAFcsZlB2pTWlNlB2pUWlRlB2pVWlVuemR+ZH+EAFpWZIBkgYQAWldkgmVXX1hkQmSDnAFkhGSFhAJaWWSGZVlfWEcAZIdkiIQAZIhlCoMDWlRlVGQaZVpmAWkAgwNaU2VbZVNfXGSJZVNfXWUVZQdkiIMCkAZyMmUHalRlVGYCWl5uBmVUZgFaXmSKZCGEAFpVZRVlB2QvgwKQBnJUZQdqX1pfbihlCZAGcnxkAGQBbGBaYGQAZAFsBVoFZItkjIQAWmFk+mSOZDOEAVpfZRVlB2QcgwKQBnKWZQdqYlpiZQdqY1pjblhlCZAGcsJHAGSPZJCEAGSQZQdqZGRCZEONBFpjRwBkkWQchABkHIMCWmJuLGSSZJOEAFplRwBklGSVhABklWUHaguDA1pmRwBklmQchABkHGVmZHeNA1piZQRqCGQBZEuFAhkAZPtrBZAHchBlB2pnWmdlB2poWmhucmUJkAdygnkQZABkl2wHbWlaaQEAVwBuHAQAZWprCpAHckIBAAEAAQBlB2pkWmlZAG4CWAB5EGQAZJhsB21rWmsBAFcAbhwEAGVqawqQB3JwAQABAAEAZQdqZFprWQBuAlgAZJlkMoQAWmdkmmQxhABaaGUVZQdkKoMCkAdylmUHamxabG6kZQRqCGQBZEuFAhkAZPxrBZAHcs5HAGSbZJyEAGScZQdqIWRCZEONBFptZW1knWQqhACDAVpsbmxlBGoIZAFkS4UCGQBk/WsFkAhyBkcAZJ5knIQAZJxlB2ohZEJkQ40EWm1lbWQqZJ9kT40CWmxuNEcAZKBkoYQAZKFlB2pugwNab0cAZKJko4QAZKNlB2oXZW9kQmSkjQVacGVwZEJkQ40BWmxlFWUHZKWDApAIclRlB2pxWnFlB2pyWnJuLkcAZKZkp4QAZKeDAlpzRwBkqGSlhABkpWVzgwNacUcAZKlkqoQAZKplc4MDWnJlFWUHZAmDApAIcpZlB2p0WnRuEEcAZKtkCYQAZAlldYMDWnRlFWUHZAaDApAIc8JHAGSsZK2EAGStZXWDA1p2ZQdqd2SuZK+EAIMBWnhlFWUHZAaDApAIcuplB2p5WnllB2p2WnZujmUEaghkAWRLhQIZAGT+awWQCXIMZW1ksGQGhACDAVp5bmxlBGoIZAFkS4UCGQBk/2sFkAlyREcAZLFksoQAZLJlB2ohZEJkQ40EWnplemQGZLNkT40CWnluNEcAZLRktYQAZLVlB2pugwNae0cAZLZkt4QAZLdlB2oXZXtkQmSkjQVafGV8ZEJkQ40BWnllFWUHZCuDApAJcoxlB2p9Wn1ulGUEaghkAWRLhQIZAJABZABrBZAJcsZHAGS4ZLmEAGS5ZQdqIWRCZEONBFp+ZX5kumQrhACDAVp9blplBGoIZAFkS4UCGQCQAWQBawWQCnIARwBku2S5hABkuWUHaiFkQmRDjQRafmV+ZCtkvGRPjQJafW4gRwBkvWS+hABkvmUHahdkQmRDjQRaf2V/ZEJkQ40BWn1lBGoIZAFkS4UCGQCQAWQCawWQCnJMRwBkv2TAhABkwGUHaiNkQmRDjQRaIWUVZQdkCIMCkApyYGUHaoBagG5EZQRqCGQBZEuFAhkAkAFkA2sFkApyhGUhZMFkCIQAgwFagG4gRwBkwmTDhABkw2UHahdkQmRDjQRagWWBZEJkQ40BWoBlFWUHZAqDApAKcrhlB2qCWoJuRGUEaghkAWRLhQIZAJABZARrBZAKctxlIWTEZAqEAIMBWoJuIEcAZMVkxoQAZMZlB2oXZEJkQ40EWoNlg2RCZEONAVqCZRVlB2QtgwKQC3IQZQdqhFqEbkRlBGoIZAFkS4UCGQCQAWQFawWQC3I0ZSFkx2QthACDAVqEbiBHAGTIZMmEAGTJZQdqF2RCZEONBFqFZYVkQmRDjQFahGUVZQdkL4MCkAtybmUHaoZahmUHaodah27eZQRqCGQBZEuFAhkAkAFkBmsFkAtytEcAZMpky4QAZMtlB2ohZEJkQ40EWohliGTMZC+EAIMBWoZliGTNZDCEAIMBWodumGUEaghkAWRLhQIZAJABZAdrBZALcvpHAGTOZM+EAGTPZQdqIWRCZEONBFqJZYlkL2TQZE+NAlqGZYlkMGTRZE+NAlqHblJHAGTSZNOEAGTTZQdqF2RCZEONBFqKRwBk1GTVhABk1WWKZEJkQ40EWotHAGTWZNeEAGTXZYpkQmRDjQRajGWLZEJkQ40BWoZljGRCZEONAVqHZQRqCGQBZEuFAhkAkAFkCGsFkAxypEcAZNhk2YQAZNllB2ohZEJkQ40EWo1HAGTaZNuEAGTbZQdqZGRCZEONBFqOZY1k3GQNhACDAVqPZN1k3oQAWpBugGUEaghkAWRLhQIZAJABZAlrBZAMcvxHAGTfZNuEAGTbZQdqZGRCZEONBFqORwBk4GThhABk4WUHaiFkQmRDjQRakWWRZA1k4mRPjQJaj2TjZN6EAFqQbihHAGTkZOWEAGTlZQdqF2RCZEONBFqSZZJkQmRDjQFaj2TmZN6EAFqQRwBk52QMhABkDIMCWpNlFWUHZCaDApANckZlB2qUWpRuEGUaZRpk6JwCZOlkJoQEWpRlFWUHZB2DApANcmplB2qVWpVuEGWEZYRk6pwCZOtkHYQEWpVlFWUHZB6DApANco5lB2qWWpZuVmRCZI1kjWYAZOycBGWXZZdll2UHaphlB2qZZQdqK2UHapoZAGUHaptk7WUHappmAhkAZgIZAGTtZgIZAGUHaptlGmcBZRpmAhkAZO6cBWTvZB6EBlqWZRVlB2QMgwKQDXP8ZRRlB18UZRJlB18SZAFTACgKAQAA6QAAAABO6QMAAADpBwAAACkC2gtHZW5lcmljTWV0YdoKX3R5cGVfdmFyc9oIQ2xhc3NWYXLaC0NvbmNhdGVuYXRl2gVGaW5hbNoNTGl0ZXJhbFN0cmluZ9oJUGFyYW1TcGVj2gRTZWxm2gRUeXBl2gxUeXBlVmFyVHVwbGXaBlVucGFja9oJQXdhaXRhYmxl2g1Bc3luY0l0ZXJhdG9y2g1Bc3luY0l0ZXJhYmxl2glDb3JvdXRpbmXaDkFzeW5jR2VuZXJhdG9y2hNBc3luY0NvbnRleHRNYW5hZ2Vy2ghDaGFpbk1hcNoOQ29udGV4dE1hbmFnZXLaB0NvdW50ZXLaBURlcXVl2gtEZWZhdWx0RGljdNoLT3JkZXJlZERpY3TaCVR5cGVkRGljdNoNU3VwcG9ydHNJbmRleNoJQW5ub3RhdGVk2gxhc3NlcnRfbmV2ZXLaE2RhdGFjbGFzc190cmFuc2Zvcm3aBWZpbmFs2gZJbnRWYXLaDGlzX3R5cGVkZGljdNoHTGl0ZXJhbNoHTmV3VHlwZdoIb3ZlcmxvYWTaCFByb3RvY29s2gtyZXZlYWxfdHlwZdoHcnVudGltZdoRcnVudGltZV9jaGVja2FibGXaBFRleHTaCVR5cGVBbGlhc9oJVHlwZUd1YXJk2g1UWVBFX0NIRUNLSU5H2gVOZXZlctoITm9SZXR1cm7aCFJlcXVpcmVk2gtOb3RSZXF1aXJlZNoIZ2V0X2FyZ3PaCmdldF9vcmlnaW7aDmdldF90eXBlX2hpbnRzYwEAAAAAAAAAAwAAAAQAAABDAAAAczIAAAB0AHwAgwF9AWQBfAFrBnIueBx8AWQBGQBEAF0QfQJ8AWoBfAJkAIMCAQBxGlcAfAFTACkCTtoJX19zbG90c19fKQLaBGRpY3TaA3BvcCkD2gNkY3TaCWRpY3RfY29wedoEc2xvdKkAcjsAAAD6gi9ob21lL3VldGxoci9Eb2N1bWVudHMvU2VybW9QbG90X2JhY2tlbmQvZHJhZnRfU1JBTV9ibGFja2JveC9VRVRSVl9FU29DX21wdzgvdmVudi9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvdHlwaW5nX2V4dGVuc2lvbnMucHnaDl9ub19zbG90c19jb3B5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ICAgICAgICAgICAgICAgICAgIE1BWF9TSVpFOiBGaW5hbCA9IDkwMDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NJWkUgKz0gMSAgIyBFcnJvciByZXBvcnRlZCBieSB0eXBlIGNoZWNrZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvbm5lY3Rpb246CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FT1VUOiBGaW5hbFtpbnRdID0gMTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgRmFzdENvbm5lY3RvcihDb25uZWN0aW9uKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTUVPVVQgPSAxICAjIEVycm9yIHJlcG9ydGVkIGJ5IHR5cGUgY2hlY2tlcgoKICAgICAgICAgICAgICAgICAgICAgICBUaGVyZSBpcyBubyBydW50aW1lIGNoZWNraW5nIG9mIHRoZXNlIHByb3BlcnRpZXMuKQHaA2RvY2MAAAAAAAAAAAAAAAADAAAAAAAAAHNOAAAAZQBaAWQAWgJkAVoDZBBaBGQRZARkBYQBWgVkBmQHhABaBmQIZAmEAFoHhwBmAWQKZAuECFoIZAxkDYQAWglkDmQPhABaCocABABaC1MAKRLaBl9GaW5hbGHZAQAAQSBzcGVjaWFsIHR5cGluZyBjb25zdHJ1Y3QgdG8gaW5kaWNhdGUgdGhhdCBhIG5hbWUKICAgICAgICBjYW5ub3QgYmUgcmUtYXNzaWduZWQgb3Igb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzLgogICAgICAgIEZvciBleGFtcGxlOgoKICAgICAgICAgICAgTUFYX1NJWkU6IEZpbmFsID0gOTAwMAogICAgICAgICAgICBNQVhfU0laRSArPSAxICAjIEVycm9yIHJlcG9ydGVkIGJ5IHR5cGUgY2hlY2tlcgoKICAgICAgICAgICAgY2xhc3MgQ29ubmVjdGlvbjoKICAgICAgICAgICAgICAgIFRJTUVPVVQ6IEZpbmFsW2ludF0gPSAxMAogICAgICAgICAgICBjbGFzcyBGYXN0Q29ubmVjdG9yKENvbm5lY3Rpb24pOgog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cyBpbmNsdWRlIGFsc28KICAgICAgICBpbmhlcml0ZWQgbWVtYmVycy4KCiAgICAgICAgVHlwZUVycm9yIGlzIHJhaXNlZCBpZiB0aGUgYXJndW1lbnQgaXMgbm90IG9mIGEgdHlwZSB0aGF0IGNhbiBjb250YWluCiAgICAgICAgYW5ub3RhdGlvbnMsIGFuZCBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIHJldHVybmVkIGlmIG5vIGFubm90YXRpb25zIGFyZQogICAgICAgIHByZXNlbnQuCgogICAgICAgIEJFV0FSRSAtLSB0aGUgYmVoYXZpb3Igb2YgZ2xvYmFsbnMgYW5kIGxvY2FsbnMgaXMgY291bnRlcmludHVpdGl2ZQogICAgICAgICh1bmxlc3MgeW91IGFyZSBmYW1pbGlhciB3aXRoIGhvdyBldmFsKCkgYW5kIGV4ZWMoKSB3b3JrKS4gIFRoZQogICAgICAgIHNlYXJjaCBvcmRlciBpcyBsb2NhbHMgZmlyc3QsIHRoZW4gZ2xvYmFscy4KCiAgICAgICAgLSBJZiBubyBkaWN0IGFyZ3VtZW50cyBhcmUgcGFzc2VkLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdXNlIHRoZQogICAgICAgICAgZ2xvYmFscyBmcm9tIG9iaiAob3IgdGhlIHJlc3BlY3RpdmUgbW9kdWxlJ3MgZ2xvYmFscyBmb3IgY2xhc3NlcyksCiAgICAgICAgICBhbmQgdGhlc2UgYXJlIGFsc28gdXNlZCBhcyB0aGUgbG9jYWxzLiAgSWYgdGhlIG9iamVjdCBkb2VzIG5vdCBhcHBlYXIKICAgICAgICAgIHRvIGhhdmUgZ2xvYmFscywgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyB1c2VkLgoKICAgICAgICAtIElmIG9uZSBkaWN0IGFyZ3VtZW50IGlzIHBhc3NlZCwgaXQgaXMgdXNlZCBmb3IgYm90aCBnbG9iYWxzIGFuZAogICAgICAgICAgbG9jYWxzLgoKICAgICAgICAtIElmIHR3byBkaWN0IGFyZ3VtZW50cyBhcmUgcGFzc2VkLCB0aGV5IHNwZWNpZnkgZ2xvYmFscyBhbmQKICAgICAgICAgIGxvY2FscywgcmVzcGVjdGl2ZWx5Lgog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Y2suVW5zaWduZWRdIGluZGljYXRlcyB0byB0aGUKICAgICAgICBoeXBvdGhldGljYWwgcnVudGltZV9jaGVjayBtb2R1bGUgdGhhdCB0aGlzIHR5cGUgaXMgYW4gdW5zaWduZWQgaW50LgogICAgICAgIEV2ZXJ5IG90aGVyIGNvbnN1bWVyIG9mIHRoaXMgdHlwZSBjYW4gaWdub3JlIHRoaXMgbWV0YWRhdGEgYW5kIHRyZWF0CiAgICAgICAgdGhpcyB0eXBlIGFzIGludC4KCiAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIEFubm90YXRlZCBtdXN0IGJlIGEgdmFsaWQgdHlwZSwgdGhlIHJlbWFpbmluZwogICAgICAgIGFyZ3VtZW50cyBhcmUga2VwdCBhcyBhIHR1cGxlIGluIHRoZSBfX21ldGFkYXRhX18gZmllbGQuCgogICAgICAgIERldGFpbHM6CgogICAgICAgIC0gSXQncyBhbiBlcnJvciB0byBjYWxsIGBBbm5vdGF0ZWRgIHdpdGggbGVzcyB0aGFuIHR3byBhcmd1bWVudHMuCiAgICAgICAgLSBOZXN0ZWQgQW5ub3RhdGVkIGFyZSBmbGF0dGVuZWQ6OgoKICAgICAgICAgICAgQW5ub3RhdGVkW0Fubm90YXRlZFtULCBBbm4xLCBBbm4yXSwgQW5uM10gPT0gQW5ub3RhdGVkW1QsIEFubjEsIEFubjIsIEFubjNdCgogICAgICAgIC0gSW5zdGFudGlhdGluZyBhbiBhbm5vdGF0ZWQgdHlwZSBpcyBlcXVpdmFsZW50IHRvIGluc3RhbnRpYXRpbmcgdGhlCiAgICAgICAgdW5kZXJseWluZyB0eXBlOjoKCiAgICAgICAgICAgIEFubm90YXRlZFtDLCBBbm4xXSg1KSA9PSBDKDUpCgogICAgICAgIC0gQW5ub3RhdGVkIGNhbiBiZSB1c2VkIGFzIGEgZ2VuZXJpYyB0eXBlIGFsaWFzOjoKCiAgICAgICAgICAgIE9wdGltaXplZCA9IEFubm90YXRlZFtULCBydW50aW1lLk9wdGltaXplKCldCiAgICAgICAgICAgIE9wdGltaXplZFtpbnRdID09IEFubm90YXRlZFtpbnQsIHJ1bnRpbWUuT3B0aW1pemUoKV0KCiAgICAgICAgICAgIE9wdGltaXplZExpc3QgPSBBbm5vdGF0ZWRbTGlzdFtUXSwgcnVudGltZS5PcHRpbWl6ZSgpXQogICAgICAgICAgICBPcHRpbWl6ZWRMaXN0W2ludF0gPT0gQW5ub3RhdGVkW0xpc3RbaW50XSwgcnVudGltZS5PcHRpbWl6ZSgpXQogICAgICAgIE4pBHJnAAAAcmgAAAByaQAAAHJqAAAAcjsAAAByOwAAAHI7AAAAcjwAAAByHQAAAPcFAABzAgAAAAgeKQHaEV9CYXNlR2VuZXJpY0FsaWFzKQFyVQAAAGMBAAAAAAAAAAEAAAAHAAAAQwAAAHM+AAAAdAB8AHQBgwJyDnQCUwB0AHwAdANqBHQFdAZ0B3QIZgWDAnIqfABqCVMAfAB0A2oKawhyOnQDagpTAGQBUwApAmE2AgAAR2V0IHRoZSB1bnN1YnNjcmlwdGVkIHZlcnNpb24gb2YgYSB0eXBlLgoKICAgICAgICBUaGlzIHN1cHBvcnRzIGdlbmVyaWMgdHlwZXMsIENhbGxhYmxlLCBUdXBsZSwgVW5pb24sIExpdGVyYWwsIEZpbmFsLCBDbGFzc1ZhcgogICAgICAgIGFuZCBBbm5vdGF0ZWQuIFJldHVybiBOb25lIGZvciB1bnN1cHBvcnRlZCB0eXBlcy4gRXhhbXBsZXM6OgoKICAgICAgICAgICAgZ2V0X29yaWdpbihMaXRlcmFsWzQyXSkgaXMgTGl0ZXJhbAogICAgICAgICAgICBnZXRfb3JpZ2luKGludCkgaXMgTm9uZQogICAgICAgICAgICBnZXRfb3JpZ2luKENsYXNzVmFyW2ludF0pIGlzIENsYXNzVmFyCiAgICAgICAgICAgIGdldF9vcmlnaW4oR2VuZXJpYykgaXMgR2VuZXJpYwogICAgICAgICAgICBnZXRfb3JpZ2luKEdlbmVyaWNbVF0pIGlzIEdlbmVyaWMKICAgICAgICAgICAgZ2V0X29yaWdpbihVbmlvbltULCBpbnRdKSBpcyBVbmlvbgogICAgICAgICAgICBnZXRfb3JpZ2luKExpc3RbVHVwbGVbVCwgVF1dW2ludF0pID09IGxpc3QKICAgICAgICAgICAgZ2V0X29yaWdpbihQLmFyZ3MpIGlzIFAKICAgICAgICBOKQtyQwAAAHIsAQAAch0AAAByUgAAAHJTAAAAclUAAABySwEAANoNUGFyYW1TcGVjQXJnc9oPUGFyYW1TcGVjS3dhcmdzcp8AAAByxgAAACkBcn0AAAByOwAAAHI7AAAAcjwAAAByMwAAACoGAABzEAAAAAAPCgEEAQwBCgEGAQoBBgFjAQAAAAAAAAACAAAABAAAAEMAAABzegAAAHQAfAB0AYMCchh8AGoCZgF8AGoDFwBTAHQAfAB0BGoFdAZmAoMCcnZ0B3wAZAFkAoMDcjhmAFMAfABqCH0BdAl8AIMBdApqC2oMawhycnwBZAMZAHQNawlycnQOfAFkBGQGhQIZAIMBfAFkBxkAZgJ9AXwBUwBmAFMAKQhhxgEAAEdldCB0eXBlIGFyZ3VtZW50cyB3aXRoIGFsbCBzdWJzdGl0dXRpb25zIHBlcmZvcm1lZC4KCiAgICAgICAgRm9yIHVuaW9ucywgYmFzaWMgc2ltcGxpZmljYXRpb25zIHVzZWQgYnkgVW5pb24gY29uc3RydWN0b3IgYXJlIHBlcmZvcm1lZC4KICAgICAgICBFeGFtcGxlczo6CiAgICAgICAgICAgIGdldF9hcmdzKERpY3Rbc3RyLCBpbnRdKSA9PSAoc3RyLCBpbnQpCiAgICAgICAgICAgIGdldF9hcmdzKGludCkgPT0gKCkKICAgICAgICAgICAgZ2V0X2FyZ3MoVW5pb25baW50LCBVbmlvbltULCBpbnRdLCBzdHJdW2ludF0pID09IChpbnQsIHN0cikKICAgICAgICAgICAgZ2V0X2FyZ3MoVW5pb25baW50LCBUdXBsZVtULCBpbnRdXVtzdHJdKSA9PSAoaW50LCBUdXBsZVtzdHIsIGludF0pCiAgICAgICAgICAgIGdldF9hcmdzKENhbGxhYmxlW1tdLCBUXVtpbnRdKSA9PSAoW10sIGludCkKICAgICAgICByWgAAAEZyAQAAAE5ygAAAAHLTAAAActMAAAApD3JDAAAAciwBAABynwAAAHI0AQAAclIAAAByUwAAAHJVAAAActUAAAByzgAAAHIzAAAAcqwAAABynQAAAHK+AAAA2ghFbGxpcHNpc3LWAAAAKQJyfQAAAHKpAAAAcjsAAAByOwAAAHI8AAAAcjIAAABCBgAAcxQAAAAACwoBDgEQAQwBBAEGARwBGAEEAWMAAAAAAAAAAAAAAAACAAAAQAAAAHMUAAAAZQBaAWQAWgJkAWQChABaA2QDUwApBNoOX1R5cGVBbGlhc0Zvcm1jAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAGQBfABqABcAUwApAk56EnR5cGluZ19leHRlbnNpb25zLikBcnUAAAApAXJjAAAAcjsAAAByOwAAAHI8AAAAcnYAAABfBgAAcwIAAAAAAXoXX1R5cGVBbGlhc0Zvcm0uX19yZXByX19OKQRyZwAAAHJoAAAAcmkAAABydgAAAHI7AAAAcjsAAAByOwAAAHI8AAAAck8BAABeBgAAcwIAAAAIAXJPAQAAYwIAAAAAAAAAAgAAAAMAAABDAAAAcxIAAAB0AHwAmwBkAZ0CgwGCAWQCUwApA2EmAQAAU3BlY2lhbCBtYXJrZXIgaW5kaWNhdGluZyB0aGF0IGFuIGFzc2lnbm1lbnQgc2hvdWxkCiAgICAgICAgYmUgcmVjb2duaXplZCBhcyBhIHByb3BlciB0eXBlIGFsaWFzIGRlZmluaXRpb24gYnkgdHlwZQogICAgICAgIGNoZWNrZXJzLgoKICAgICAgICBGb3IgZXhhbXBsZTo6CgogICAgICAgICAgICBQcmVkaWNhdGU6IFR5cGVBbGlhcyA9IENhbGxhYmxlWy4uLiwgYm9vbF0KCiAgICAgICAgSXQncyBpbnZhbGlkIHdoZW4gdXNlZCBhbnl3aGVyZSBleGNlcHQgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUuCiAgICAgICAgehUgaXMgbm90IHN1YnNjcmlwdGFibGVOKQFyRwAAACkCcmMAAAByTQAAAHI7AAAAcjsAAAByPAAAAHIrAAAAYgYAAHMCAAAAAAxjAAAAAAAAAAAAAAAAAgAAAEAAAABzFAAAAGUAWgFkAFoCZAFkAoQAWgNkA1MAKQRyTwEAAGMBAAAAAAAAAAEAAAACAAAAQwAAAHMKAAAAZAF8AGoAFwBTACkCTnoSdHlwaW5nX2V4dGVuc2lvbnMuKQFydQAAACkBcmMAAAByOwAAAHI7AAAAcjwAAABydgAAAHIGAABzAgAAAAABehdfVHlwZUFsaWFzRm9ybS5fX3JlcHJfX04pBHJnAAAAcmgAAAByaQAAAHJ2AAAAcjsAAAByOwAAAHI7AAAAcjwAAAByTwEAAHEGAABzAgAAAAgBYa8BAABTcGVjaWFsIG1hcmtlciBpbmRpY2F0aW5nIHRoYXQgYW4gYXNzaWdubWVudCBzaG91bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJlY29nbml6ZWQgYXMgYSBwcm9wZXIgdHlwZSBhbGlhcyBkZWZpbml0aW9uIGJ5IHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZXJzLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOjoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZGljYXRlOiBUeXBlQWxpYXMgPSBDYWxsYWJsZVsuLi4sIGJvb2xdCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQncyBpbnZhbGlkIHdoZW4gdXNlZCBhbnl3aGVyZSBleGNlcHQgYXMgaW4gdGhlIGV4YW1wbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlLmMAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBFMAKQXaDl9UeXBlQWxpYXNNZXRhehdNZXRhY2xhc3MgZm9yIFR5cGVBbGlhc2MBAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAZAFTACkCTnobdHlwaW5nX2V4dGVuc2lvbnMuVHlwZUFsaWFzcjsAAAApAXJjAAAAcjsAAAByOwAAAHI8AAAAcnYAAACFBgAAcwIAAAAAAXoXX1R5cGVBbGlhc01ldGEuX19yZXByX19OKQVyZwAAAHJoAAAAcmkAAAByagAAAHJ2AAAAcjsAAAByOwAAAHI7AAAAcjwAAAByUAEAAIIGAABzBAAAAAgBBAJyUAEAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMsAAAAZQBaAWQAWgJkAVoDZgBaBGQCZAOEAFoFZARkBYQAWgZkBmQHhABaB2QIUwApCdoOX1R5cGVBbGlhc0Jhc2VhJgEAAFNwZWNpYWwgbWFya2VyIGluZGljYXRpbmcgdGhhdCBhbiBhc3NpZ25tZW50IHNob3VsZAogICAgICAgIGJlIHJlY29nbml6ZWQgYXMgYSBwcm9wZXIgdHlwZSBhbGlhcyBkZWZpbml0aW9uIGJ5IHR5cGUKICAgICAgICBjaGVja2Vycy4KCiAgICAgICAgRm9yIGV4YW1wbGU6OgoKICAgICAgICAgICAgUHJlZGljYXRlOiBUeXBlQWxpYXMgPSBDYWxsYWJsZVsuLi4sIGJvb2xdCgogICAgICAgIEl0J3MgaW52YWxpZCB3aGVuIHVzZWQgYW55d2hlcmUgZXhjZXB0IGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLgogICAgICAgIGMCAAAAAAAAAAIAAAACAAAAQwAAAHMMAAAAdABkAYMBggFkAFMAKQJOeitUeXBlQWxpYXMgY2Fubm90IGJlIHVzZWQgd2l0aCBpc2luc3RhbmNlKCkuKQFyRwAAACkCcmMAAAByZAAAAHI7AAAAcjsAAAByPAAAAHJlAAAAlQYAAHMCAAAAAAF6IF9UeXBlQWxpYXNCYXNlLl9faW5zdGFuY2VjaGVja19fYwIAAAAAAAAAAgAAAAIAAABDAAAAcwwAAAB0AGQBgwGCAWQAUwApAk56K1R5cGVBbGlhcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGlzc3ViY2xhc3MoKS4pAXJHAAAAKQJyYwAAAHJMAAAAcjsAAAByOwAAAHI8AAAAcmYAAACYBgAAcwIAAAAAAXogX1R5cGVBbGlhc0Jhc2UuX19zdWJjbGFzc2NoZWNrX19jAQAAAAAAAAABAAAAAQAAAEMAAABzBAAAAGQBUwApAk56G3R5cGluZ19leHRlbnNpb25zLlR5cGVBbGlhc3I7AAAAKQFyYwAAAHI7AAAAcjsAAAByPAAAAHJ2AAAAmwYAAHMCAAAAAAF6F19UeXBlQWxpYXNCYXNlLl9fcmVwcl9fTikIcmcAAAByaAAAAHJpAAAAcmoAAAByNQAAAHJlAAAAcmYAAABydgAAAHI7AAAAcjsAAAByOwAAAHI8AAAAclEBAACIBgAAcwoAAAAICgQBBAIIAwgDclEBAAApAnKxAAAAcmsAAAByTAEAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMkAAAAZQBaAWQAWgJkAVoDZgBaBGQCZAOEAFoFZARkBYQAWgZkBlMAKQfaCl9JbW11dGFibGV6M01peGluIHRvIGluZGljYXRlIHRoYXQgb2JqZWN0IHNob3VsZCBub3QgYmUgY29waWVkLmMBAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAfABTACkBTnI7AAAAKQFyYwAAAHI7AAAAcjsAAAByPAAAANoIX19jb3B5X1+rBgAAcwIAAAAAAXoTX0ltbXV0YWJsZS5fX2NvcHlfX2MCAAAAAAAAAAIAAAABAAAAQwAAAHMEAAAAfABTACkBTnI7AAAAKQJyYwAAANoEbWVtb3I7AAAAcjsAAAByPAAAANoMX19kZWVwY29weV9frgYAAHMCAAAAAAF6F19JbW11dGFibGUuX19kZWVwY29weV9fTikHcmcAAAByaAAAAHJpAAAAcmoAAAByNQAAAHJTAQAAclUBAAByOwAAAHI7AAAAcjsAAAByPAAAAHJSAQAApwYAAHMIAAAACAEEAQQCCANyUgEAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMoAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGZAeEAFoGZAhTACkJckwBAABhUQEAAFRoZSBhcmdzIGZvciBhIFBhcmFtU3BlYyBvYmplY3QuCgogICAgICAgIEdpdmVuIGEgUGFyYW1TcGVjIG9iamVjdCBQLCBQLmFyZ3MgaXMgYW4gaW5zdGFuY2Ugb2YgUGFyYW1TcGVjQXJncy4KCiAgICAgICAgUGFyYW1TcGVjQXJncyBvYmplY3RzIGhhdmUgYSByZWZlcmVuY2UgYmFjayB0byB0aGVpciBQYXJhbVNwZWM6CgogICAgICAgIFAuYXJncy5fX29yaWdpbl9fIGlzIFAKCiAgICAgICAgVGhpcyB0eXBlIGlzIG1lYW50IGZvciBydW50aW1lIGludHJvc3BlY3Rpb24gYW5kIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgdG8KICAgICAgICBzdGF0aWMgdHlwZSBjaGVja2Vycy4KICAgICAgICBjAgAAAAAAAAACAAAAAgAAAEMAAABzCgAAAHwBfABfAGQAUwApAU4pAXKfAAAAKQJyYwAAAHIKAQAAcjsAAAByOwAAAHI8AAAAcn8AAAC9BgAAcwIAAAAAAXoWUGFyYW1TcGVjQXJncy5fX2luaXRfX2MBAAAAAAAAAAEAAAACAAAAQwAAAHMOAAAAfABqAGoBmwBkAZ0CUwApAk56BS5hcmdzKQJynwAAAHJnAAAAKQFyYwAAAHI7AAAAcjsAAAByPAAAAHJ2AAAAwAYAAHMCAAAAAAF6FlBhcmFtU3BlY0FyZ3MuX19yZXByX19jAgAAAAAAAAACAAAAAwAAAEMAAABzGgAAAHQAfAF0AYMCcw50AlMAfABqA3wBagNrAlMAKQFOKQRyQwAAAHJMAQAAco4AAABynwAAACkCcmMAAAByjwAAAHI7AAAAcjsAAAByPAAAAHKQAAAAwwYAAHMGAAAAAAEKAQQBehRQYXJhbVNwZWNBcmdzLl9fZXFfX04pB3JnAAAAcmgAAAByaQAAAHJqAAAAcn8AAABydgAAAHKQAAAAcjsAAAByOwAAAHI7AAAAcjwAAAByTAEAALEGAABzCAAAAAgLBAEIAwgDYwAAAAAAAAAAAAAAAAIAAABAAAAAcygAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEZAWEAFoFZAZkB4QAWgZkCFMAKQlyTQEAAGFbAQAAVGhlIGt3YXJncyBmb3IgYSBQYXJhbVNwZWMgb2JqZWN0LgoKICAgICAgICBHaXZlbiBhIFBhcmFtU3BlYyBvYmplY3QgUCwgUC5rd2FyZ3MgaXMgYW4gaW5zdGFuY2Ugb2YgUGFyYW1TcGVjS3dhcmdzLgoKICAgICAgICBQYXJhbVNwZWNLd2FyZ3Mgb2JqZWN0cyBoYXZlIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlaXIgUGFyYW1TcGVjOgoKICAgICAgICBQLmt3YXJncy5fX29yaWdpbl9fIGlzIFAKCiAgICAgICAgVGhpcyB0eXBlIGlzIG1lYW50IGZvciBydW50aW1lIGludHJvc3BlY3Rpb24gYW5kIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgdG8KICAgICAgICBzdGF0aWMgdHlwZSBjaGVja2Vycy4KICAgICAgICBjAgAAAAAAAAACAAAAAgAAAEMAAABzCgAAAHwBfABfAGQAUwApAU4pAXKfAAAAKQJyYwAAAHIKAQAAcjsAAAByOwAAAHI8AAAAcn8AAADUBgAAcwIAAAAAAXoYUGFyYW1TcGVjS3dhcmdzLl9faW5pdF9fYwEAAAAAAAAAAQAAAAIAAABDAAAAcw4AAAB8AGoAagGbAGQBnQJTACkCTnoHLmt3YXJncykCcp8AAAByZwAAACkBcmMAAAByOwAAAHI7AAAAcjwAAABydgAAANcGAABzAgAAAAABehhQYXJhbVNwZWNLd2FyZ3MuX19yZXByX19jAgAAAAAAAAACAAAAAwAAAEMAAABzGgAAAHQAfAF0AYMCcw50AlMAfABqA3wBagNrAlMAKQFOKQRyQwAAAHJNAQAAco4AAABynwAAACkCcmMAAAByjwAAAHI7AAAAcjsAAAByPAAAAHKQAAAA2gYAAHMGAAAAAAEKAQQBehZQYXJhbVNwZWNLd2FyZ3MuX19lcV9fTikHcmcAAAByaAAAAHJpAAAAcmoAAAByfwAAAHJ2AAAAcpAAAAByOwAAAHI7AAAAcjsAAAByPAAAAHJNAQAAyAYAAHMIAAAACAsEAQgDCANyTQEAAGMAAAAAAAAAAAAAAAAEAAAAAAAAAHN8AAAAZQBaAWQAWgJkAVoDZQRqBVoGZQdkAmQDhACDAVoIZQdkBGQFhACDAVoJZAZkB2QHZAicA4cAZgFkCWQKhApaCmQLZAyEAFoLZA1kDoQAWgxkD2QQhABaDWQRZBKEAFoOZBNkFIQAWg9lEHN0ZBVkFoQAWhGHAAQAWhJTACkXcgoAAABhJwcAAFBhcmFtZXRlciBzcGVjaWZpY2F0aW9uIHZhcmlhYmxlLgoKICAgICAgICBVc2FnZTo6CgogICAgICAgICAgIFAgPSBQYXJhbVNwZWMoJ1AnKQoKICAgICAgICBQYXJhbWV0ZXIgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgZXhpc3QgcHJpbWFyaWx5IGZvciB0aGUgYmVuZWZpdCBvZiBzdGF0aWMKICAgICAgICB0eXBlIGNoZWNrZXJzLiAgVGhleSBhcmUgdXNlZCB0byBmb3J3YXJkIHRoZSBwYXJhbWV0ZXIgdHlwZXMgb2Ygb25lCiAgICAgICAgY2FsbGFibGUgdG8gYW5vdGhlciBjYWxsYWJsZSwgYSBwYXR0ZXJuIGNvbW1vbmx5IGZvdW5kIGluIGhpZ2hlciBvcmRlcgogICAgICAgIGZ1bmN0aW9ucyBhbmQgZGVjb3JhdG9ycy4gIFRoZXkgYXJlIG9ubHkgdmFsaWQgd2hlbiB1c2VkIGluIGBgQ29uY2F0ZW5hdGVgYCwKICAgICAgICBvciBzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBgYENhbGxhYmxlYGAuIEluIFB5dGhvbiAzLjEwIGFuZCBoaWdoZXIsCiAgICAgICAgdGhleSBhcmUgYWxzbyBzdXBwb3J0ZWQgaW4gdXNlci1kZWZpbmVkIEdlbmVyaWNzIGF0IHJ1bnRpbWUuCiAgICAgICAgU2VlIGNsYXNzIEdlbmVyaWMgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZ2VuZXJpYyB0eXBlcy4gIEFuCiAgICAgICAgZXhhbXBsZSBmb3IgYW5ub3RhdGluZyBhIGRlY29yYXRvcjo6CgogICAgICAgICAgIFQgPSBUeXBlVmFyKCdUJykKICAgICAgICAgICBQID0gUGFyYW1TcGVjKCdQJykKCiAgICAgICAgICAgZGVmIGFkZF9sb2dnaW5nKGY6IENhbGxhYmxlW1AsIFRdKSAtPiBDYWxsYWJsZVtQLCBUXToKICAgICAgICAgICAgICAgJycnQSB0eXBlLXNhZmUgZGVjb3JhdG9yIHRvIGFkZCBsb2dnaW5nIHRvIGEgZnVuY3Rpb24uJycnCiAgICAgICAgICAgICAgIGRlZiBpbm5lcigqYXJnczogUC5hcmdzLCAqKmt3YXJnczogUC5rd2FyZ3MpIC0+IFQ6CiAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oZid7Zi5fX25hbWVfX30gd2FzIGNhbGxlZCcpCiAgICAgICAgICAgICAgICAgICByZXR1cm4gZigqYXJncywgKiprd2FyZ3MpCiAgICAgICAgICAgICAgIHJldHVybiBpbm5lcgoKICAgICAgICAgICBAYWRkX2xvZ2dpbmcKICAgICAgICAgICBkZWYgYWRkX3R3byh4OiBmbG9hdCwgeTogZmxvYXQpIC0+IGZsb2F0OgogICAgICAgICAgICAgICAnJydBZGQgdHdvIG51bWJlcnMgdG9nZXRoZXIuJycnCiAgICAgICAgICAgICAgIHJldHVybiB4ICsgeQoKICAgICAgICBQYXJhbWV0ZXIgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgZGVmaW5lZCB3aXRoIGNvdmFyaWFudD1UcnVlIG9yCiAgICAgICAgY29udHJhdmFyaWFudD1UcnVlIGNhbiBiZSB1c2VkIHRvIGRlY2xhcmUgY292YXJpYW50IG9yIGNvbnRyYXZhcmlhbnQKICAgICAgICBnZW5lcmljIHR5cGVzLiAgVGhlc2Uga2V5d29yZCBhcmd1bWVudHMgYXJlIHZhbGlkLCBidXQgdGhlaXIgYWN0dWFsIHNlbWFudGljcwogICAgICAgIGFyZSB5ZXQgdG8gYmUgZGVjaWRlZC4gIFNlZSBQRVAgNjEyIGZvciBkZXRhaWxzLgoKICAgICAgICBQYXJhbWV0ZXIgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgY2FuIGJlIGludHJvc3BlY3RlZC4gZS5nLjoKCiAgICAgICAgICAgUC5fX25hbWVfXyA9PSAnVCcKICAgICAgICAgICBQLl9fYm91bmRfXyA9PSBOb25lCiAgICAgICAgICAgUC5fX2NvdmFyaWFudF9fID09IEZhbHNlCiAgICAgICAgICAgUC5fX2NvbnRyYXZhcmlhbnRfXyA9PSBGYWxzZQoKICAgICAgICBOb3RlIHRoYXQgb25seSBwYXJhbWV0ZXIgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgZGVmaW5lZCBpbiBnbG9iYWwgc2NvcGUgY2FuCiAgICAgICAgYmUgcGlja2xlZC4KICAgICAgICBjAQAAAAAAAAABAAAAAgAAAEMAAABzCAAAAHQAfACDAVMAKQFOKQFyTAEAACkBcmMAAAByOwAAAHI7AAAAcjwAAAByrwAAABgHAABzAgAAAAACeg5QYXJhbVNwZWMuYXJnc2MBAAAAAAAAAAEAAAACAAAAQwAAAHMIAAAAdAB8AIMBUwApAU4pAXJNAQAAKQFyYwAAAHI7AAAAcjsAAAByPAAAAHLiAAAAHAcAAHMCAAAAAAJ6EFBhcmFtU3BlYy5rd2FyZ3NORikD2gVib3VuZHJwAAAAcnIAAABjAgAAAAMAAAAGAAAADAAAAAMAAABzigAAAHQAgwBqAXwAZwGDAQEAfAF8AF8CdAN8A4MBfABfBHQDfASDAXwAXwV8AnI8dAZqB3wCZAGDAnwAXwhuBmQAfABfCHkYdAlqCmQCgwFqC2oMZANkBIMCfQVXAG4cBAB0DXQOZgJrCnJ2AQABAAEAZAB9BVkAbgJYAHwFZAVrA3KGfAV8AF8PZABTACkGTnoVQm91bmQgbXVzdCBiZSBhIHR5cGUucoAAAAByZwAAAHIZAQAA2hF0eXBpbmdfZXh0ZW5zaW9ucykQcogAAAByfwAAAHJnAAAA2gRib29s2g1fX2NvdmFyaWFudF9f2hFfX2NvbnRyYXZhcmlhbnRfX3JSAAAAcncAAADaCV9fYm91bmRfX3KgAAAAcqEAAAByogAAAHLvAAAAcpMAAAByEgEAAHJoAAAAKQZyYwAAAHKVAAAAclYBAABycAAAAHJyAAAA2gdkZWZfbW9kKQFyiwAAAHI7AAAAcjwAAAByfwAAACAHAABzGgAAAAABDgEGAQoBCgEEARACBgMCARgBEgEKAQgBehJQYXJhbVNwZWMuX19pbml0X19jAQAAAAAAAAACAAAAAgAAAEMAAABzJgAAAHwAagByDGQBfQFuEHwAagFyGGQCfQFuBGQDfQF8AXwAagIXAFMAKQRO+gEr+gEt+gF+KQNyWQEAAHJaAQAAcmcAAAApAnJjAAAA2gZwcmVmaXhyOwAAAHI7AAAAcjwAAABydgAAADIHAABzDAAAAAABBgEGAQYBBgIEAXoSUGFyYW1TcGVjLl9fcmVwcl9fYwEAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB0AGoBfACDAVMAKQFOKQJy9AAAAHKNAAAAKQFyYwAAAHI7AAAAcjsAAAByPAAAAHKNAAAAOwcAAHMCAAAAAAF6ElBhcmFtU3BlYy5fX2hhc2hfX2MCAAAAAAAAAAIAAAACAAAAQwAAAHMIAAAAfAB8AWsIUwApAU5yOwAAACkCcmMAAAByjwAAAHI7AAAAcjsAAAByPAAAAHKQAAAAPgcAAHMCAAAAAAF6EFBhcmFtU3BlYy5fX2VxX19jAQAAAAAAAAABAAAAAQAAAEMAAABzBgAAAHwAagBTACkBTikBcmcAAAApAXJjAAAAcjsAAAByOwAAAHI8AAAAcjgBAABBBwAAcwIAAAAAAXoUUGFyYW1TcGVjLl9fcmVkdWNlX19jAQAAAAAAAAADAAAAAQAAAE8AAABzBAAAAGQAUwApAU5yOwAAACkDcmMAAAByrwAAAHLiAAAAcjsAAAByOwAAAHI8AAAAckYBAABFBwAAcwIAAAAAAXoSUGFyYW1TcGVjLl9fY2FsbF9fYwIAAAAAAAAAAgAAAAIAAABDAAAAcxYAAAB8AHwBawdyEnwBagB8AIMBAQBkAFMAKQFOKQFyXQAAACkCcmMAAAByWwAAAHI7AAAAcjsAAAByPAAAANoOX2dldF90eXBlX3ZhcnNKBwAAcwQAAAAAAQgBehhQYXJhbVNwZWMuX2dldF90eXBlX3ZhcnMpE3JnAAAAcmgAAAByaQAAAHJqAAAAclIAAAByXAAAAHKLAAAAckoBAAByrwAAAHLiAAAAcn8AAABydgAAAHKNAAAAcpAAAAByOAEAAHJGAQAAcigBAAByYQEAAHKRAAAAcjsAAAByOwAAACkBcosAAAByPAAAAHIKAAAA5gYAAHMYAAAACC0EAwYCDAQMBBYSCAkIAwgDCAQIAwQCYwAAAAAAAAAAAAAAAAMAAAAAAAAAc2gAAABlAFoBZABaAmUDchRlBGoFWgZuBmUEagdaBmQBWghlBGoJWgqHAGYBZAJkA4QIWgtkBGQFhABaDGQGZAeEAFoNZAhkCYQAWg5lD2QKZAuEAIMBWhBlA3NgZAxkDYQAWhGHAAQAWhJTACkO2hhfQ29uY2F0ZW5hdGVHZW5lcmljQWxpYXNGYwMAAAAAAAAAAwAAAAIAAAADAAAAcxwAAAB0AIMAagF8AoMBAQB8AXwAXwJ8AnwAXwNkAFMAKQFOKQRyiAAAAHJ/AAAAcp8AAAByzgAAACkDcmMAAAByCgEAAHKvAAAAKQFyiwAAAHI7AAAAcjwAAAByfwAAAF8HAABzBgAAAAABDAEGAXohX0NvbmNhdGVuYXRlR2VuZXJpY0FsaWFzLl9faW5pdF9fYwEAAAAAAAAAAQAAAAYAAAADAAAAczIAAAB0AGoBiQCIAHwAagKDAZsAZAFkAmoDhwBmAWQDZASECHwAagREAIMBgwGbAGQFnQRTACkGTnKGAAAAegIsIGMBAAAAAAAAAAIAAAADAAAAMwAAAHMWAAAAfABdDn0BiAB8AYMBVgABAHECZABTACkBTnI7AAAAKQJyQAAAAHI+AQAAKQFyiQAAAHI7AAAAcjwAAAByRAAAAGYHAABzAgAAAAQAejRfQ29uY2F0ZW5hdGVHZW5lcmljQWxpYXMuX19yZXByX18uPGxvY2Fscz4uPGdlbmV4cHI+cocAAAApBXJSAAAAcokAAABynwAAAHKaAAAAcs4AAAApAXJjAAAAcjsAAAApAXKJAAAAcjwAAABydgAAAGQHAABzBAAAAAABBgF6IV9Db25jYXRlbmF0ZUdlbmVyaWNBbGlhcy5fX3JlcHJfX2MBAAAAAAAAAAEAAAADAAAAQwAAAHMQAAAAdAB8AGoBfABqAmYCgwFTACkBTikDcowAAABynwAAAHLOAAAAKQFyYwAAAHI7AAAAcjsAAAByPAAAAHKNAAAAaQcAAHMCAAAAAAF6IV9Db25jYXRlbmF0ZUdlbmVyaWNBbGlhcy5fX2hhc2hfX2MBAAAAAAAAAAMAAAABAAAATwAAAHMEAAAAZABTACkBTnI7AAAAKQNyYwAAAHKvAAAAcuIAAAByOwAAAHI7AAAAcjwAAAByRgEAAG0HAABzAgAAAAABeiFfQ29uY2F0ZW5hdGVHZW5lcmljQWxpYXMuX19jYWxsX19jAQAAAAAAAAABAAAAAwAAAEMAAABzFAAAAHQAZAFkAoQAfABqAUQAgwGDAVMAKQNOYwEAAAAAAAAAAgAAAAUAAABzAAAAcyIAAAB8AF0afQF0AHwBdAFqAnQDZgKDAnICfAFWAAEAcQJkAFMAKQFOKQRyQwAAAHJSAAAAclwAAAByCgAAACkCckAAAAByfQAAAHI7AAAAcjsAAAByPAAAAHJEAAAAcwcAAHMCAAAABAB6Ol9Db25jYXRlbmF0ZUdlbmVyaWNBbGlhcy5fX3BhcmFtZXRlcnNfXy48bG9jYWxzPi48Z2VuZXhwcj4pAnJfAAAAcs4AAAApAXJjAAAAcjsAAAByOwAAAHI8AAAAcj4AAABwBwAAcwQAAAAAAgIBeidfQ29uY2F0ZW5hdGVHZW5lcmljQWxpYXMuX19wYXJhbWV0ZXJzX19jAgAAAAAAAAACAAAAAwAAAEMAAABzHgAAAHwAagByGnwAagFyGnQCagN8AGoBfAGDAgEAZABTACkBTikEcp8AAAByPgAAAHJSAAAAcmEBAAApAnJjAAAAclsAAAByOwAAAHI7AAAAcjwAAAByYQEAAHgHAABzBAAAAAABDAF6J19Db25jYXRlbmF0ZUdlbmVyaWNBbGlhcy5fZ2V0X3R5cGVfdmFycykTcmcAAAByaAAAAHJpAAAAcigBAAByUgAAAHJTAAAAcosAAAByQwEAAHJaAAAAcsYAAAByqwAAAHJ/AAAAcnYAAAByjQAAAHJGAQAAckoBAAByPgAAAHJhAQAAcpEAAAByOwAAAHI7AAAAKQFyiwAAAHI8AAAAcmIBAABSBwAAcxgAAAAIAwQBCAIGAwQCBgIMBQgFCAQIAwwGBAJyYgEAAGMCAAAAAAAAAAIAAAAEAAAAAwAAAHNaAAAAfAFmAGsCchB0AGQBgwGCAXQBfAF0AoMCcyB8AWYBfQF0AXwBZAcZAHQDgwJzNnQAZAODAYIBZASJAHQChwBmAWQFZAaECHwBRACDAYMBfQF0BHwAfAGDAlMAKQhOeiZDYW5ub3QgdGFrZSBhIENvbmNhdGVuYXRlIG9mIG5vIHR5cGVzLnKAAAAAekFUaGUgbGFzdCBwYXJhbWV0ZXIgdG8gQ29uY2F0ZW5hdGUgc2hvdWxkIGJlIGEgUGFyYW1TcGVjIHZhcmlhYmxlLnovQ29uY2F0ZW5hdGVbYXJnLCAuLi5dOiBlYWNoIGFyZyBtdXN0IGJlIGEgdHlwZS5jAQAAAAAAAAACAAAABAAAADMAAABzGgAAAHwAXRJ9AXQAagF8AYgAgwJWAAEAcQJkAFMAKQFOKQJyUgAAAHJ3AAAAKQJyQAAAAHJBAAAAKQFy5gAAAHI7AAAAcjwAAAByRAAAAIgHAABzAgAAAAQAeidfY29uY2F0ZW5hdGVfZ2V0aXRlbS48bG9jYWxzPi48Z2VuZXhwcj5y0wAAACkFckcAAAByQwAAAHJfAAAAcgoAAAByYgEAACkCcmMAAAByTQAAAHI7AAAAKQFy5gAAAHI8AAAA2hRfY29uY2F0ZW5hdGVfZ2V0aXRlbX4HAABzEgAAAAACCAEIAQoBBgEOAQgCBAEWAXJjAQAAYwIAAAAAAAAAAgAAAAMAAABDAAAAcwoAAAB0AHwAfAGDAlMAKQFhJgEAAFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgYFBhcmFtU3BlY2BgIGFuZCBgYENhbGxhYmxlYGAgdG8gcmVwcmVzZW50IGEKICAgICAgICBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gd2hpY2ggYWRkcywgcmVtb3ZlcyBvciB0cmFuc2Zvcm1zIHBhcmFtZXRlcnMgb2YgYQogICAgICAgIGNhbGxhYmxlLgoKICAgICAgICBGb3IgZXhhbXBsZTo6CgogICAgICAgICAgIENhbGxhYmxlW0NvbmNhdGVuYXRlW2ludCwgUF0sIGludF0KCiAgICAgICAgU2VlIFBFUCA2MTIgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLgogICAgICAgICkBcmMBAAApAnJjAAAAck0AAAByOwAAAHI7AAAAcjwAAAByBwAAAJIHAABzAgAAAAAMYwAAAAAAAAAAAAAAAAIAAABAAAAAcxwAAABlAFoBZABaAmQBZAKEAFoDZANkBIQAWgRkBVMAKQbaEF9Db25jYXRlbmF0ZUZvcm1jAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAGQBfABqABcAUwApAk56EnR5cGluZ19leHRlbnNpb25zLikBcnUAAAApAXJjAAAAcjsAAAByOwAAAHI8AAAAcnYAAACiBwAAcwIAAAAAAXoZX0NvbmNhdGVuYXRlRm9ybS5fX3JlcHJfX2MCAAAAAAAAAAIAAAADAAAAQwAAAHMKAAAAdAB8AHwBgwJTACkBTikBcmMBAAApAnJjAAAAck0AAAByOwAAAHI7AAAAcjwAAAByeQAAAKUHAABzAgAAAAABehxfQ29uY2F0ZW5hdGVGb3JtLl9fZ2V0aXRlbV9fTikFcmcAAAByaAAAAHJpAAAAcnYAAAByeQAAAHI7AAAAcjsAAAByOwAAAHI8AAAAcmQBAAChBwAAcwQAAAAIAQgDcmQBAABhJgEAAFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgYFBhcmFtU3BlY2BgIGFuZCBgYENhbGxhYmxlYGAgdG8gcmVwcmVzZW50IGEKICAgICAgICBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gd2hpY2ggYWRkcywgcmVtb3ZlcyBvciB0cmFuc2Zvcm1zIHBhcmFtZXRlcnMgb2YgYQogICAgICAgIGNhbGxhYmxlLgoKICAgICAgICBGb3IgZXhhbXBsZTo6CgogICAgICAgICAgIENhbGxhYmxlW0NvbmNhdGVuYXRlW2ludCwgUF0sIGludF0KCiAgICAgICAgU2VlIFBFUCA2MTIgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLgogICAgICAgIGMAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBFMAKQXaFV9Db25jYXRlbmF0ZUFsaWFzTWV0YXoaTWV0YWNsYXNzIGZvciBDb25jYXRlbmF0ZS5jAQAAAAAAAAABAAAAAQAAAEMAAABzBAAAAGQBUwApAk56HXR5cGluZ19leHRlbnNpb25zLkNvbmNhdGVuYXRlcjsAAAApAXJjAAAAcjsAAAByOwAAAHI8AAAAcnYAAAC5BwAAcwIAAAAAAXoeX0NvbmNhdGVuYXRlQWxpYXNNZXRhLl9fcmVwcl9fTikFcmcAAAByaAAAAHJpAAAAcmoAAABydgAAAHI7AAAAcjsAAAByOwAAAHI8AAAAcmUBAAC2BwAAcwQAAAAIAQQCcmUBAABjAAAAAAAAAAAAAAAAAgAAAEAAAABzNAAAAGUAWgFkAFoCZAFaA2YAWgRkAmQDhABaBWQEZAWEAFoGZAZkB4QAWgdkCGQJhABaCGQKUwApC9oVX0NvbmNhdGVuYXRlQWxpYXNCYXNlYSYBAABVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGBQYXJhbVNwZWNgYCBhbmQgYGBDYWxsYWJsZWBgIHRvIHJlcHJlc2VudCBhCiAgICAgICAgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHdoaWNoIGFkZHMsIHJlbW92ZXMgb3IgdHJhbnNmb3JtcyBwYXJhbWV0ZXJzIG9mIGEKICAgICAgICBjYWxsYWJsZS4KCiAgICAgICAgRm9yIGV4YW1wbGU6OgoKICAgICAgICAgICBDYWxsYWJsZVtDb25jYXRlbmF0ZVtpbnQsIFBdLCBpbnRdCgogICAgICAgIFNlZSBQRVAgNjEyIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi4KICAgICAgICBjAgAAAAAAAAACAAAAAgAAAEMAAABzDAAAAHQAZAGDAYIBZABTACkCTnotQ29uY2F0ZW5hdGUgY2Fubm90IGJlIHVzZWQgd2l0aCBpc2luc3RhbmNlKCkuKQFyRwAAACkCcmMAAAByZAAAAHI7AAAAcjsAAAByPAAAAHJlAAAAywcAAHMCAAAAAAF6J19Db25jYXRlbmF0ZUFsaWFzQmFzZS5fX2luc3RhbmNlY2hlY2tfX2MCAAAAAAAAAAIAAAACAAAAQwAAAHMMAAAAdABkAYMBggFkAFMAKQJOei1Db25jYXRlbmF0ZSBjYW5ub3QgYmUgdXNlZCB3aXRoIGlzc3ViY2xhc3MoKS4pAXJHAAAAKQJyYwAAAHJMAAAAcjsAAAByOwAAAHI8AAAAcmYAAADOBwAAcwIAAAAAAXonX0NvbmNhdGVuYXRlQWxpYXNCYXNlLl9fc3ViY2xhc3NjaGVja19fYwEAAAAAAAAAAQAAAAEAAABDAAAAcwQAAABkAVMAKQJOeh10eXBpbmdfZXh0ZW5zaW9ucy5Db25jYXRlbmF0ZXI7AAAAKQFyYwAAAHI7AAAAcjsAAAByPAAAAHJ2AAAA0QcAAHMCAAAAAAF6Hl9Db25jYXRlbmF0ZUFsaWFzQmFzZS5fX3JlcHJfX2MCAAAAAAAAAAIAAAADAAAAQwAAAHMKAAAAdAB8AHwBgwJTACkBTikBcmMBAAApAnJjAAAAck0AAAByOwAAAHI7AAAAcjwAAAByeQAAANQHAABzAgAAAAABeiFfQ29uY2F0ZW5hdGVBbGlhc0Jhc2UuX19nZXRpdGVtX19OKQlyZwAAAHJoAAAAcmkAAAByagAAAHI1AAAAcmUAAAByZgAAAHJ2AAAAcnkAAAByOwAAAHI7AAAAcjsAAAByPAAAAHJmAQAAvAcAAHMMAAAACAwEAQQCCAMIAwgDcmYBAABjAAAAAAAAAAAAAAAAAgAAAEAAAABzFAAAAGUAWgFkAFoCZAFkAoQAWgNkA1MAKQTaDl9UeXBlR3VhcmRGb3JtYwEAAAAAAAAAAQAAAAIAAABDAAAAcwoAAABkAXwAagAXAFMAKQJOehJ0eXBpbmdfZXh0ZW5zaW9ucy4pAXJ1AAAAKQFyYwAAAHI7AAAAcjsAAAByPAAAAHJ2AAAA3wcAAHMCAAAAAAF6F19UeXBlR3VhcmRGb3JtLl9fcmVwcl9fTikEcmcAAAByaAAAAHJpAAAAcnYAAAByOwAAAHI7AAAAcjsAAAByPAAAAHJnAQAA3gcAAHMCAAAACAFyZwEAAGMCAAAAAAAAAAMAAAAEAAAAQwAAAHMgAAAAdABqAXwBfACbAGQBnQKDAn0CdABqAnwAfAJmAYMCUwApAmEJCAAAU3BlY2lhbCB0eXBpbmcgZm9ybSB1c2VkIHRvIGFubm90YXRlIHRoZSByZXR1cm4gdHlwZSBvZiBhIHVzZXItZGVmaW5lZAogICAgICAgIHR5cGUgZ3VhcmQgZnVuY3Rpb24uICBgYFR5cGVHdWFyZGBgIG9ubHkgYWNjZXB0cyBhIHNpbmdsZSB0eXBlIGFyZ3VtZW50LgogICAgICAgIEF0IHJ1bnRpbWUsIGZ1bmN0aW9ucyBtYXJrZWQgdGhpcyB3YXkgc2hvdWxkIHJldHVybiBhIGJvb2xlYW4uCgogICAgICAgIGBgVHlwZUd1YXJkYGAgYWltcyB0byBiZW5lZml0ICp0eXBlIG5hcnJvd2luZyogLS0gYSB0ZWNobmlxdWUgdXNlZCBieSBzdGF0aWMKICAgICAgICB0eXBlIGNoZWNrZXJzIHRvIGRldGVybWluZSBhIG1vcmUgcHJlY2lzZSB0eXBlIG9mIGFuIGV4cHJlc3Npb24gd2l0aGluIGEKICAgICAgICBwcm9ncmFtJ3MgY29kZSBmbG93LiAgVXN1YWxseSB0eXBlIG5hcnJvd2luZyBpcyBkb25lIGJ5IGFuYWx5emluZwogICAgICAgIGNvbmRpdGlvbmFsIGNvZGUgZmxvdyBhbmQgYXBwbHlpbmcgdGhlIG5hcnJvd2luZyB0byBhIGJsb2NrIG9mIGNvZGUuICBUaGUKICAgICAgICBjb25kaXRpb25hbCBleHByZXNzaW9uIGhlcmUgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIGEgInR5cGUgZ3VhcmQiLgoKICAgICAgICBTb21ldGltZXMgaXQgd291bGQgYmUgY29udmVuaWVudCB0byB1c2UgYSB1c2VyLWRlZmluZWQgYm9vbGVhbiBmdW5jdGlvbgogICAgICAgIGFzIGEgdHlwZSBndWFyZC4gIFN1Y2ggYSBmdW5jdGlvbiBzaG91bGQgdXNlIGBgVHlwZUd1YXJkWy4uLl1gYCBhcyBpdHMKICAgICAgICByZXR1cm4gdHlwZSB0byBhbGVydCBzdGF0aWMgdHlwZSBjaGVja2VycyB0byB0aGlzIGludGVudGlvbi4KCiAgICAgICAgVXNpbmcgIGBgLT4gVHlwZUd1YXJkYGAgdGVsbHMgdGhlIHN0YXRpYyB0eXBlIGNoZWNrZXIgdGhhdCBmb3IgYSBnaXZlbgogICAgICAgIGZ1bmN0aW9uOgoKICAgICAgICAxLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYm9vbGVhbi4KICAgICAgICAyLiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGBgVHJ1ZWBgLCB0aGUgdHlwZSBvZiBpdHMgYXJndW1lbnQKICAgICAgICBpcyB0aGUgdHlwZSBpbnNpZGUgYGBUeXBlR3VhcmRgYC4KCiAgICAgICAgRm9yIGV4YW1wbGU6OgoKICAgICAgICAgICAgZGVmIGlzX3N0cih2YWw6IFVuaW9uW3N0ciwgZmxvYXRdKToKICAgICAgICAgICAgICAgICMgImlzaW5zdGFuY2UiIHR5cGUgZ3VhcmQKICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBzdHIpOgogICAgICAgICAgICAgICAgICAgICMgVHlwZSBvZiBgYHZhbGBgIGlzIG5hcnJvd2VkIHRvIGBgc3RyYGAKICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIyBFbHNlLCB0eXBlIG9mIGBgdmFsYGAgaXMgbmFycm93ZWQgdG8gYGBmbG9hdGBgLgogICAgICAgICAgICAgICAgICAgIC4uLgoKICAgICAgICBTdHJpY3QgdHlwZSBuYXJyb3dpbmcgaXMgbm90IGVuZm9yY2VkIC0tIGBgVHlwZUJgYCBuZWVkIG5vdCBiZSBhIG5hcnJvd2VyCiAgICAgICAgZm9ybSBvZiBgYFR5cGVBYGAgKGl0IGNhbiBldmVuIGJlIGEgd2lkZXIgZm9ybSkgYW5kIHRoaXMgbWF5IGxlYWQgdG8KICAgICAgICB0eXBlLXVuc2FmZSByZXN1bHRzLiAgVGhlIG1haW4gcmVhc29uIGlzIHRvIGFsbG93IGZvciB0aGluZ3MgbGlrZQogICAgICAgIG5hcnJvd2luZyBgYExpc3Rbb2JqZWN0XWBgIHRvIGBgTGlzdFtzdHJdYGAgZXZlbiB0aG91Z2ggdGhlIGxhdHRlciBpcyBub3QKICAgICAgICBhIHN1YnR5cGUgb2YgdGhlIGZvcm1lciwgc2luY2UgYGBMaXN0YGAgaXMgaW52YXJpYW50LiAgVGhlIHJlc3BvbnNpYmlsaXR5IG9mCiAgICAgICAgd3JpdGluZyB0eXBlLXNhZmUgdHlwZSBndWFyZHMgaXMgbGVmdCB0byB0aGUgdXNlci4KCiAgICAgICAgYGBUeXBlR3VhcmRgYCBhbHNvIHdvcmtzIHdpdGggdHlwZSB2YXJpYWJsZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCiAgICAgICAgUEVQIDY0NyAoVXNlci1EZWZpbmVkIFR5cGUgR3VhcmRzKS4KICAgICAgICB6GiBhY2NlcHRzIG9ubHkgc2luZ2xlIHR5cGUuKQNyUgAAAHJ3AAAAclMAAAApA3JjAAAAck0AAAByeAAAAHI7AAAAcjsAAAByPAAAAHIsAAAA4gcAAHMEAAAAACwSAWMAAAAAAAAAAAAAAAACAAAAQAAAAHMcAAAAZQBaAWQAWgJkAWQChABaA2QDZASEAFoEZAVTACkGcmcBAABjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAGQBfABqABcAUwApAk56EnR5cGluZ19leHRlbnNpb25zLikBcnUAAAApAXJjAAAAcjsAAAByOwAAAHI8AAAAcnYAAAAUCAAAcwIAAAAAAXoXX1R5cGVHdWFyZEZvcm0uX19yZXByX19jAgAAAAAAAAADAAAABAAAAEMAAABzIgAAAHQAagF8AXwAagKbAGQBnQKDAn0CdABqA3wAfAJmAYMCUwApAk56GyBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgdHlwZSkEclIAAABydwAAAHJ1AAAAclMAAAApA3JjAAAAck0AAAByeAAAAHI7AAAAcjsAAAByPAAAAHJ5AAAAFwgAAHMGAAAAAAEGAQ4BehpfVHlwZUd1YXJkRm9ybS5fX2dldGl0ZW1fX04pBXJnAAAAcmgAAAByaQAAAHJ2AAAAcnkAAAByOwAAAHI7AAAAcjsAAAByPAAAAHJnAQAAEggAAHMEAAAACAIIA2EJCAAAU3BlY2lhbCB0eXBpbmcgZm9ybSB1c2VkIHRvIGFubm90YXRlIHRoZSByZXR1cm4gdHlwZSBvZiBhIHVzZXItZGVmaW5lZAogICAgICAgIHR5cGUgZ3VhcmQgZnVuY3Rpb24uICBgYFR5cGVHdWFyZGBgIG9ubHkgYWNjZXB0cyBhIHNpbmdsZSB0eXBlIGFyZ3VtZW50LgogICAgICAgIEF0IHJ1bnRpbWUsIGZ1bmN0aW9ucyBtYXJrZWQgdGhpcyB3YXkgc2hvdWxkIHJldHVybiBhIGJvb2xlYW4uCgogICAgICAgIGBgVHlwZUd1YXJkYGAgYWltcyB0byBiZW5lZml0ICp0eXBlIG5hcnJvd2luZyogLS0gYSB0ZWNobmlxdWUgdXNlZCBieSBzdGF0aWMKICAgICAgICB0eXBlIGNoZWNrZXJzIHRvIGRldGVybWluZSBhIG1vcmUgcHJlY2lzZSB0eXBlIG9mIGFuIGV4cHJlc3Npb24gd2l0aGluIGEKICAgICAgICBwcm9ncmFtJ3MgY29kZSBmbG93LiAgVXN1YWxseSB0eXBlIG5hcnJvd2luZyBpcyBkb25lIGJ5IGFuYWx5emluZwogICAgICAgIGNvbmRpdGlvbmFsIGNvZGUgZmxvdyBhbmQgYXBwbHlpbmcgdGhlIG5hcnJvd2luZyB0byBhIGJsb2NrIG9mIGNvZGUuICBUaGUKICAgICAgICBjb25kaXRpb25hbCBleHByZXNzaW9uIGhlcmUgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIGEgInR5cGUgZ3VhcmQiLgoKICAgICAgICBTb21ldGltZXMgaXQgd291bGQgYmUgY29udmVuaWVudCB0byB1c2UgYSB1c2VyLWRlZmluZWQgYm9vbGVhbiBmdW5jdGlvbgogICAgICAgIGFzIGEgdHlwZSBndWFyZC4gIFN1Y2ggYSBmdW5jdGlvbiBzaG91bGQgdXNlIGBgVHlwZUd1YXJkWy4uLl1gYCBhcyBpdHMKICAgICAgICByZXR1cm4gdHlwZSB0byBhbGVydCBzdGF0aWMgdHlwZSBjaGVja2VycyB0byB0aGlzIGludGVudGlvbi4KCiAgICAgICAgVXNpbmcgIGBgLT4gVHlwZUd1YXJkYGAgdGVsbHMgdGhlIHN0YXRpYyB0eXBlIGNoZWNrZXIgdGhhdCBmb3IgYSBnaXZlbgogICAgICAgIGZ1bmN0aW9uOgoKICAgICAgICAxLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYm9vbGVhbi4KICAgICAgICAyLiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGBgVHJ1ZWBgLCB0aGUgdHlwZSBvZiBpdHMgYXJndW1lbnQKICAgICAgICBpcyB0aGUgdHlwZSBpbnNpZGUgYGBUeXBlR3VhcmRgYC4KCiAgICAgICAgRm9yIGV4YW1wbGU6OgoKICAgICAgICAgICAgZGVmIGlzX3N0cih2YWw6IFVuaW9uW3N0ciwgZmxvYXRdKToKICAgICAgICAgICAgICAgICMgImlzaW5zdGFuY2UiIHR5cGUgZ3VhcmQKICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBzdHIpOgogICAgICAgICAgICAgICAgICAgICMgVHlwZSBvZiBgYHZhbGBgIGlzIG5hcnJvd2VkIHRvIGBgc3RyYGAKICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIyBFbHNlLCB0eXBlIG9mIGBgdmFsYGAgaXMgbmFycm93ZWQgdG8gYGBmbG9hdGBgLgogICAgICAgICAgICAgICAgICAgIC4uLgoKICAgICAgICBTdHJpY3QgdHlwZSBuYXJyb3dpbmcgaXMgbm90IGVuZm9yY2VkIC0tIGBgVHlwZUJgYCBuZWVkIG5vdCBiZSBhIG5hcnJvd2VyCiAgICAgICAgZm9ybSBvZiBgYFR5cGVBYGAgKGl0IGNhbiBldmVuIGJlIGEgd2lkZXIgZm9ybSkgYW5kIHRoaXMgbWF5IGxlYWQgdG8KICAgICAgICB0eXBlLXVuc2FmZSByZXN1bHRzLiAgVGhlIG1haW4gcmVhc29uIGlzIHRvIGFsbG93IGZvciB0aGluZ3MgbGlrZQogICAgICAgIG5hcnJvd2luZyBgYExpc3Rbb2JqZWN0XWBgIHRvIGBgTGlzdFtzdHJdYGAgZXZlbiB0aG91Z2ggdGhlIGxhdHRlciBpcyBub3QKICAgICAgICBhIHN1YnR5cGUgb2YgdGhlIGZvcm1lciwgc2luY2UgYGBMaXN0YGAgaXMgaW52YXJpYW50LiAgVGhlIHJlc3BvbnNpYmlsaXR5IG9mCiAgICAgICAgd3JpdGluZyB0eXBlLXNhZmUgdHlwZSBndWFyZHMgaXMgbGVmdCB0byB0aGUgdXNlci4KCiAgICAgICAgYGBUeXBlR3VhcmRgYCBhbHNvIHdvcmtzIHdpdGggdHlwZSB2YXJpYWJsZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCiAgICAgICAgUEVQIDY0NyAoVXNlci1EZWZpbmVkIFR5cGUgR3VhcmRzKS4KICAgICAgICBjAAAAAAAAAAAAAAAAAwAAAAAAAABzTgAAAGUAWgFkAFoCZAFaA2QQWgRkEWQEZAWEAVoFZAZkB4QAWgZkCGQJhABaB4cAZgFkCmQLhAhaCGQMZA2EAFoJZA5kD4QAWgqHAAQAWgtTACkS2gpfVHlwZUd1YXJkYQkIAABTcGVjaWFsIHR5cGluZyBmb3JtIHVzZWQgdG8gYW5ub3RhdGUgdGhlIHJldHVybiB0eXBlIG9mIGEgdXNlci1kZWZpbmVkCiAgICAgICAgdHlwZSBndWFyZCBmdW5jdGlvbi4gIGBgVHlwZUd1YXJkYGAgb25seSBhY2NlcHRzIGEgc2luZ2xlIHR5cGUgYXJndW1lbnQuCiAgICAgICAgQXQgcnVudGltZSwgZnVuY3Rpb25zIG1hcmtlZCB0aGlzIHdheSBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbi4KCiAgICAgICAgYGBUeXBlR3VhcmRgYCBhaW1zIHRvIGJlbmVmaXQgKnR5cGUgbmFycm93aW5nKiAtLSBhIHRlY2huaXF1ZSB1c2VkIGJ5IHN0YXRpYwogICAgICAgIHR5cGUgY2hlY2tlcnMgdG8gZGV0ZXJtaW5lIGEgbW9yZSBwcmVjaXNlIHR5cGUgb2YgYW4gZXhwcmVzc2lvbiB3aXRoaW4gYQogICAgICAgIHByb2dyYW0ncyBjb2RlIGZsb3cuICBVc3VhbGx5IHR5cGUgbmFycm93aW5nIGlzIGRvbmUgYnkgYW5hbHl6aW5nCiAgICAgICAgY29uZGl0aW9uYWwgY29kZSBmbG93IGFuZCBhcHBseWluZyB0aGUgbmFycm93aW5nIHRvIGEgYmxvY2sgb2YgY29kZS4gIFRoZQogICAgICAgIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaGVyZSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgYSAidHlwZSBndWFyZCIuCgogICAgICAgIFNvbWV0aW1lcyBpdCB3b3VsZCBiZSBjb252ZW5pZW50IHRvIHVzZSBhIHVzZXItZGVmaW5lZCBib29sZWFuIGZ1bmN0aW9uCiAgICAgICAgYXMgYSB0eXBlIGd1YXJkLiAgU3VjaCBhIGZ1bmN0aW9uIHNob3VsZCB1c2UgYGBUeXBlR3VhcmRbLi4uXWBgIGFzIGl0cwogICAgICAgIHJldHVybiB0eXBlIHRvIGFsZXJ0IHN0YXRpYyB0eXBlIGNoZWNrZXJzIHRvIHRoaXMgaW50ZW50aW9uLgoKICAgICAgICBVc2luZyAgYGAtPiBUeXBlR3VhcmRgYCB0ZWxscyB0aGUgc3RhdGljIHR5cGUgY2hlY2tlciB0aGF0IGZvciBhIGdpdmVuCiAgICAgICAgZnVuY3Rpb246CgogICAgICAgIDEuIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBib29sZWFuLgogICAgICAgIDIuIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYGBUcnVlYGAsIHRoZSB0eXBlIG9mIGl0cyBhcmd1bWVudAogICAgICAgIGlzIHRoZSB0eXBlIGluc2lkZSBgYFR5cGVHdWFyZGBgLgoKICAgICAgICBGb3IgZXhhbXBsZTo6CgogICAgICAgICAgICBkZWYgaXNfc3RyKHZhbDogVW5pb25bc3RyLCBmbG9hdF0pOgogICAgICAgICAgICAgICAgIyAiaXNpbnN0YW5jZSIgdHlwZSBndWFyZAogICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIHN0cik6CiAgICAgICAgICAgICAgICAgICAgIyBUeXBlIG9mIGBgdmFsYGAgaXMgbmFycm93ZWQgdG8gYGBzdHJgYAogICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAjIEVsc2UsIHR5cGUgb2YgYGB2YWxgYCBpcyBuYXJyb3dlZCB0byBgYGZsb2F0YGAuCiAgICAgICAgICAgICAgICAgICAgLi4uCgogICAgICAgIFN0cmljdCB0eXBlIG5hcnJvd2luZyBpcyBub3QgZW5mb3JjZWQgLS0gYGBUeXBlQmBgIG5lZWQgbm90IGJlIGEgbmFycm93ZXIKICAgICAgICBmb3JtIG9mIGBgVHlwZUFgYCAoaXQgY2FuIGV2ZW4gYmUgYSB3aWRlciBmb3JtKSBhbmQgdGhpcyBtYXkgbGVhZCB0bwogICAgICAgIHR5cGUtdW5zYWZlIHJl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ZSBjaGVja2VyIGVycm9yCiAgICAgICAgICAgICAgICBtYXRjaCBhcmc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnQoKToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkl0J3MgYW4gaW50IikKICAgICAgICAgICAgICAgICAgICBjYXNlIHN0cigpOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiSXQncyBhIHN0ciIpCiAgICAgICAgICAgICAgICAgICAgY2FzZSBfOgogICAgICAgICAgICAgICAgICAgICAgICBuZXZlcl9jYWxsX21lKGFyZykgICMgb2ssIGFyZyBpcyBvZiB0eXBlIE5ldmVyCgogICAgICAgIHoVIGlzIG5vdCBzdWJzY3JpcHRhYmxlTikBckcAAAApAnJjAAAAcugAAAByOwAAAHI7AAAAcjwAAAByLgAAACsJAABzAgAAAAAYYwAAAAAAAAAAAAAAAAIAAABAAAAAcyQAAABlAFoBZABaAmQBWgNmAFoEZAJkA4QAWgVkBGQFhABaBmQGUwApB9oGX05ldmVyYawCAABUaGUgYm90dG9tIHR5cGUsIGEgdHlwZSB0aGF0IGhhcyBubyBtZW1iZXJzLgoKICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlCiAgICAgICAgY2FsbGVkLCBvciBhIGZ1bmN0aW9uIHRoYXQgbmV2ZXIgcmV0dXJuczo6CgogICAgICAgICAgICBmcm9tIHR5cGluZ19leHRlbnNpb25zIGltcG9ydCBOZXZlcgoKICAgICAgICAgICAgZGVmIG5ldmVyX2NhbGxfbWUoYXJnOiBOZXZlcikgLT4gTm9uZToKICAgICAgICAgICAgICAgIHBhc3MKCiAgICAgICAgICAgIGRlZiBpbnRfb3Jfc3RyKGFyZzogaW50IHwgc3RyKSAtPiBOb25lOgogICAgICAgICAgICAgICAgbmV2ZXJfY2FsbF9tZShhcmcpICAjIHR5cGUgY2hlY2tlciBlcnJvcgogICAgICAgICAgICAgICAgbWF0Y2ggYXJnOgogICAgICAgICAgICAgICAgICAgIGNh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dCwgdG90YWw9RmFsc2UpOgogICAgICAgICAgICAgICAgdGl0bGU6IFJlcXVpcmVkW3N0cl0KICAgICAgICAgICAgICAgIHllYXI6IGludAoKICAgICAgICAgICAgbSA9IE1vdmllKAogICAgICAgICAgICAgICAgdGl0bGU9J1RoZSBNYXRyaXgnLCAgIyB0eXBlY2hlY2tlciBlcnJvciBpZiBrZXkgaXMgb21pdHRlZAogICAgICAgICAgICAgICAgeWVhcj0xOTk5LAogICAgICAgICAgICApCgogICAgICAgIFRoZXJlIGlzIG5vIHJ1bnRpbWUgY2hlY2tpbmcgdGhhdCBhIHJlcXVpcmVkIGtleSBpcyBhY3R1YWxseSBwcm92aWRlZAogICAgICAgIHdoZW4gaW5zdGFudGlhdGluZyBhIHJlbGF0ZWQgVHlwZWREaWN0LgogICAgICAgIGFgAQAAQSBzcGVjaWFsIHR5cGluZyBjb25zdHJ1Y3QgdG8gbWFyayBhIGtleSBvZiBhIFR5cGVkRGljdCBhcwogICAgICAgIHBvdGVudGlhbGx5IG1pc3NpbmcuIEZvciBleGFtcGxlOgoKICAgICAgICAgICAgY2xhc3MgTW92aWUoVHlwZWREaWN0KToKICAgICAgICAgICAgICAgIHRpdGxlOiBzdHIKICAgICAgICAgICAgICAgIHllYXI6IE5vdFJlcXVpcmVkW2ludF0KCiAgICAgICAgICAgIG0gPSBNb3ZpZSgKICAgICAgICAgICAgICAgIHRpdGxlPSdUaGUgTWF0cml4JywgICMgdHlwZWNoZWNrZXIgZXJyb3IgaWYga2V5IGlzIG9taXR0ZWQKICAgICAgICAgICAgICAgIHllYXI9MTk5OSwKICAgICAgICAgICAgKQogICAgICAgIGMAAAAAAAAAAAAAAAADAAAAAAAAAHNKAAAAZQBaAWQAWgJkD1oDZBBkA2QEhAFaBGQFZAaEAFoFZAdkCIQAWgaHAGYBZAlkCoQIWgdkC2QMhABaCGQNZA6EAFoJhwAEAFoKUwApEdoOX01heWJlUmVxdWlyZWRyfAAAAE5jAgAAAAAAAAADAAAAAgAAAEsAAABzCgAAAHwBfABfAGQAUwApAU4pAXJ8AAAAKQNyYwAAAHJ9AAAAcn4AAABy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cGxlKiBpcyBhIHN0YW5kLWluIGZvciBhICp0dXBsZSogdHlwZSBzdWNoIGFzCiAgICBgYFR1cGxlW2ludCwgc3RyXWBgLgoKICAgIFR5cGUgdmFyaWFibGUgdHVwbGVzIGNhbiBiZSB1c2VkIGluIGBgR2VuZXJpY2BgIGRlY2xhcmF0aW9ucy4KICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTo6CgogICAgICAgIGNsYXNzIEFycmF5KEdlbmVyaWNbKlRzXSk6IC4uLgoKICAgIFRoZSBgYFRzYGAgdHlwZSB2YXJpYWJsZSB0dXBsZSBoZXJlIGJlaGF2ZXMgbGlrZSBgYHR1cGxlW1QxLCBUMl1gYCwKICAgIHdoZXJlIGBgVDFgYCBhbmQgYGBUMmBgIGFyZSB0eXBlIHZhcmlhYmxlcy4gVG8gdXNlIHRoZXNlIHR5cGUgdmFyaWFibGVzCiAgICBhcyB0eXBlIHBhcmFtZXRlcnMgb2YgYGBBcnJheWBgLCB3ZSBtdXN0ICp1bnBhY2sqIHRoZSB0eXBlIHZhcmlhYmxlIHR1cGxlIHVzaW5nCiAgICB0aGUgc3RhciBvcGVyYXRvcjogYGAqVHNgYC4gVGhlIHNpZ25hdHVyZSBvZiBgYEFycmF5YGAgdGhlbiBiZWhhdmVzCiAgICBhcyBpZiB3ZSBoYWQgc2ltcGx5IHdyaXR0ZW4gYGBjbGFzcyBBcnJheShHZW5lcmljW1QxLCBUMl0pOiAuLi5gYC4KICAgIEluIGNvbnRyYXN0IHRvIGBgR2VuZXJpY1tUMSwgVDJdYGAsIGhvd2V2ZXIsIGBgR2VuZXJpY1sqU2hhcGVdYGAgYWxsb3dzCiAgICB1cyB0byBwYXJhbWV0ZXJpc2UgdGhlIGNsYXNzIHdpdGggYW4gKmFyYml0cmFyeSogbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycy4KCiAgICBUeXBlIHZhcmlhYmxlIHR1cGxlcyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBhIG5vcm1hbCBgYFR5cGVWYXJgYCBjYW4uCiAgICBUaGlzIGluY2x1ZGVzIGNsYXNzIGRlZmluaXRpb25zLCBhcyBzaG93biBhYm92ZSwgYXMgd2VsbCBhcyBmdW5jdGlvbgogICAgc2ln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b3JtKCkKICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2RlbChjbHM6IHR5cGVbX1RdKSAtPiB0eXBlW19UXToKICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgcmV0dXJuIGNscwoKICAgICAgICAgICAgQGNyZWF0ZV9tb2RlbAogICAgICAgICAgICBjbGFzcyBDdXN0b21lck1vZGVsOgogICAgICAgICAgICAgICAgaWQ6IGludAogICAgICAgICAgICAgICAgbmFtZTogc3RyCgogICAgICAgICAgICAjIFVzZWQgb24gYSBiYXNlIGNsYXNzCiAgICAgICAgICAgIEBkYXRhY2xhc3NfdHJhbnNmb3JtKCkKICAgICAgICAgICAgY2xhc3MgTW9kZWxCYXNlOiAuLi4KCiAgICAgICAgICAgIGNsYXNzIEN1c3RvbWVyTW9kZWwoTW9kZWxCYXNlKToKICAgICAgICAgICAgICAgIGlkOiBpbnQKICAgICAgICAgICAgICAgIG5hbWU6IHN0cgoKICAgICAgICAgICAgIyBVc2VkIG9uIGEgbWV0YWNsYXNzCiAgICAgICAgICAgIEBkYXRhY2xhc3NfdHJhbnNmb3JtKCkKICAgICAgICAgICAgY2xhc3MgTW9kZWxNZXRhKHR5cGUpOiAuLi4KCiAgICAgICAgICAgIGNsYXNzIE1vZGVsQmFzZShtZXRhY2xhc3M9TW9kZWxNZXRhKTogLi4uCgogICAgICAgICAgICBjbGFzcyBDdXN0b21lck1vZGVsKE1vZGVsQmFzZSk6CiAgICAgICAgICAgICAgICBpZDogaW50CiAgICAgICAgICAgICAgICBuYW1lOiBzdHIKCiAgICAgICAgRWFjaCBvZiB0aGUgYGBDdXN0b21lck1vZGVsYGAgY2xhc3NlcyBkZWZpbmVkIGluIHRoaXMgZXhhbXBsZSB3aWxsIG5vdwogICAgICAgIGJlaGF2ZSBzaW1pbGFybHkgdG8gYSBkYXRhY2xhc3MgY3JlYXRlZCB3aXRoIHRoZSBgYEBkYXRhY2xhc3Nlcy5kYXRhY2xhc3NgYAogICAgICAgIGRlY29yYXRvci4gRm9yIGV4YW1wbGUsIHRoZSB0eXBlIGNoZWNrZXIgd2lsbCBzeW50aGVzaXplIGFuIGBgX19pbml0X19gYAogICAgICAgIG1ldGhvZC4KCiAgICAgICAgVGhlIGFyZ3VtZW50cyB0byB0aGlzIGRlY29yYXRvciBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhpcyBiZWhhdmlvcjoKICAgICAgICAtIGBgZXFfZGVmYXVsdGBgIGluZGljYXRlcyB3aGV0aGVyIHRoZSBgYGVxYGAgcGFyYW1ldGVyIGlzIGFzc3VtZWQgdG8gYmUKICAgICAgICAgIFRydWUgb3IgRmFsc2UgaWYgaXQgaXMgb21pdHRlZCBieSB0aGUgY2FsbGVyLgogICAgICAgIC0gYGBvcmRlcl9kZWZhdWx0YGAgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGBgb3JkZXJgYCBwYXJhbWV0ZXIgaXMKICAgICAgICAgIGFzc3VtZWQgdG8gYmUgVHJ1ZSBvciBGYWxzZSBpZiBpdCBpcyBvbWl0dGVkIGJ5IHRoZSBjYWxsZXIuCiAgICAgICAgLSBgYGt3X29ubHlfZGVmYXVsdGBgIGluZGljYXRlcyB3aGV0aGVyIHRoZSBgYGt3X29ubHlgYCBwYXJhbWV0ZXIgaXMKICAgICAgICAgIGFzc3VtZWQgdG8gYmUgVHJ1ZSBvciBGYWxzZSBpZiBpdCBpcyBvbWl0dGVkIGJ5IHRoZSBjYWxsZXIuCiAgICAgICAgLSBgYGZpZWxkX2Rlc2NyaXB0b3JzYGAgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2Ygc3VwcG9ydGVkIGNsYXNzZXMKICAgICAgICAgIG9yIGZ1bmN0aW9ucywgdGhhdCBkZXNjcmliZSBmaWVsZHMsIHNpbWlsYXIgdG8gYGBkYXRhY2xhc3Nlcy5maWVsZCgpYGAuCgogICAgICAgIEF0IHJ1bnRpbWUsIHRoaXMgZGVjb3JhdG9yIHJlY29yZHMgaXRzIGFyZ3VtZW50cyBpbiB0aGUKICAgICAgICBgYF9fZGF0YWNsYXNzX3RyYW5zZm9ybV9fYGAgYXR0cmlidXRlIG9uIHRoZSBkZWNvcmF0ZWQgb2JqZWN0LgoKICAgICAgICBTZWUgUEVQIDY4MSBmb3IgZGV0YWlscy4KCiAgICAgICAgYwEAAAAAAAAAAQAAAAUAAAATAAAAcxQAAACIAIgDiAKIAWQBnAR8AF8AfABTACkCTikEcoMBAAByhAEAAHKFAQAAcoYBAAApAVoXX19kYXRhY2xhc3NfdHJhbnNmb3JtX18pAVoJY2xzX29yX2ZuKQRygwEAAHKGAQAAcoUBAAByhAEAAHI7AAAAcjwAAADaCWRlY29yYXRvckgLAABzCgAAAAACAgECAQIBCgJ6JmRhdGFjbGFzc190cmFuc2Zvcm0uPGxvY2Fscz4uZGVjb3JhdG9ycjsAAAApBXKDAQAAcoQBAAByhQEAAHKGAQAAcocBAAByOwAAACkEcoMBAAByhgEAAHKFAQAAcoQBAAByPAAAAHIfAAAAAwsAAHMEAAAAAEUSCCkDcgIAAAByAwAAAHIBAAAAKQJyAgAAAHJRAAAAKQJyAgAAAHJZAAAAKQFOKQJyAgAAAHIDAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHKSAAAAKQJyAgAAAHIDAAAAKQNyAgAAAHIDAAAAcgEAAAApA3ICAAAAcgMAAABycwAAACkDTk5GKQJyAgAAAHJRAAAAKQJyAgAAAHJZAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHJZAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHJZAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHJZAAAAKQJyAgAAAHIDAAAAKQJyAgAAAHJZAAAAKQJyAgAAAHIDAAAAKZxynQAAAHKsAAAA2g9jb2xsZWN0aW9ucy5hYmNyLwEAAHKgAAAAcmAAAAByVAAAAHJSAAAA2gx2ZXJzaW9uX2luZm9yKAEAAHKBAAAAcgQAAAByBQAAANoHX19hbGxfX3JeAAAAcj0AAABy9AAAAHJIAAAAclAAAAByWAAAAHJhAAAAckkAAAByLwAAANoQX0ZpbmFsVHlwaW5nQmFzZXJiAAAAclwAAABybAAAAHJtAAAAcm4AAABybwAAAHJxAAAAcgYAAAByCAAAAHJpAQAAcnQAAAByewAAAHIgAAAAciEAAAByIwAAAHKWAAAAcpcAAADaD19vdmVybG9hZF9kdW1teXIlAAAAcgwAAABynAAAAHIPAAAAchIAAAByEQAAAHIQAAAAchgAAAByrQAAANoPTXV0YWJsZVNlcXVlbmNlchYAAAByFAAAANoQX2NvbGxlY3Rpb25zX2FiY3KzAAAAcrkAAAByxgAAAHIZAAAAchoAAABaBl9hbGlhc9oOTXV0YWJsZU1hcHBpbmdyFwAAANoERGljdHIRAQAAchUAAAByEwAAAHIkAAAAcioAAAByLQAAAHKrAAAAcvUAAABy3gAAAHLhAAAAciYAAABy4wAAAHIDAQAAcuQAAABy/gAAAHJ3AAAAcikAAAByKAAAAHIcAAAAchsAAAByHQEAAHIiAAAAchMBAAByFQEAANoSX190ZXh0X3NpZ25hdHVyZV9fciEBAAByNgAAAHJnAAAAcmgAAAByagAAAHIqAQAAcjQAAAByngAAAHIrAQAAch0AAAByLAEAAHJTAAAAcjwBAAByPQEAAHIzAAAAcjIAAABySwEAANoLSW1wb3J0RXJyb3JyVQAAAHIrAAAAck8BAAByDQEAAHJQAQAAclEBAAByTAEAAHJNAQAAclIBAAByCgAAAHLWAAAAcmIBAABy/QAAAHJjAQAAcgcAAAByZAEAAHJlAQAAcmYBAAByLAAAAHJnAQAAcmgBAAByCQAAAHJvAQAAcgsAAABycAEAAHIuAAAAcnEBAAByMAAAAHIxAAAAcnIBAABycwEAAHJ1AQAAcnYBAABydwEAAHJ4AQAAcnkBAAByDgAAAHI/AAAAcnoBAAByewEAAHINAAAAcicAAAByHgAAAHIfAAAAclgBAABy5wAAAHJsAQAA2gNBbnlyvgAAAHI7AAAAcjsAAAByOwAAAHI8AAAA2gg8bW9kdWxlPgEAAABzogIAAAgBCAEIAQgBCAEIAQgFEgIEAQYDEAYCAQIBAgECAQIBAgECAQIBAgMCAQIBAgECAQIBAgECAwIBAgECAQIBAgECAwIDAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQYDBAEQBggIBgMMFQwBCgQMAQoDCAQKFgwBCAMWFAoECgEKAQoBDgEOAgYEIAEIAhQBFgoEDQoDFjMKAwwBCAUIIAgFDAEIAhQBFggEDAoDFi4KAwYBBgQGBhAbBgEGAQYBBgMMAQgDFgECAQoIBgIMAQgDDAIWEAYDDAEIAiYBFAMaAQIBCgoMAQgDDgEMAQwKDAEIAQwBGgECAQoKDAEIAxwBAgEMAwYBBgEGAwgKBAEIAQoBCAMIEwgFDAEIAgYCCAQSEhR/ACEQAggEEH8AQhIoDAEIAwgQBAQMAQgDDAEICAwHBgEGAQgCCAsIBgYCDiwGAxA+DgEGHQYCDAEMAgYCCA0MAQgBBgEIAQgDCBgKLAwBBgMIAgYBFicQPAgIEmgSIxQBBgEIAgYBAgIQARABDAECAhABEAEMAggYCBgMAQgCFAEWBA4OFAEWBAQKCgMSBhgWCgQMAQYBCAMOChAXEBgMAQgFEGoMAhAsDg8MAQYBCAIUAQ4OFAEWBwIBAgoKAxIGDgECAQgZCgMMAQgCFgEWBA4vFgEWCgIBAioKAxZPCgMWAhYrDAEIARYBDhMWGQoDDAEIARYBDhEWFgoDDAEIARYBDhoWHwoDDAEGAQgBFgEWBAwUDhEWARYJAgECDwgBAgECDAoDFiUUERQOCgEKAxYBFgQWAwwPCgMWARYDFgkCAQIKCAIKBRYzCgIIBA5WDAEIAhAUDAEIAhAXDAEIBAIBAgECBDYBGk4MAQYB