Mw0NChZae2M37gAA4wAAAAAAAAAAAAAAAAYAAABAAAAAc6ADAABkAFoAZAFkAmwBWgFkAWQCbAJaAmQBZAJsA1oDZAFkAmwDWgRkAWQCbAVaBWQBZANsBm0HWgcBAGQBZARsCG0JWgkBAGQBZAVsCG0KWgoBAGQBZAZsCG0LWgsBAGQBZAdsDG0NWg0BAGQBZAhsDm0PWg8BAGQJZApsEG0RWhEBAGQJZAtsEm0TWhMBAGQJZAxsEm0UWhQBAGQJZA1sFW0WWhYBAGQJZA5sFW0XWhcBAGQJZA9sFW0YWhgBAGQJZBBsFW0ZWhkBAGQJZBFsFW0aWhoBAGQJZBJsFW0bWhsBAGQJZBNsFW0cWhwBAGQJZBRsFW0dWh0BAGQJZBVsFW0eWh4BAGQJZBZsFW0fWh8BAGQJZBdsFW0gWiABAGQJZBhsFW0hWiEBAGQJZBlsFW0iWiIBAGQJZBpsFW0jWiMBAGQJZBtsFW0kWiQBAGQJZBxsFW0lWiUBAGQJZB1sJm0nWicBAGQJZB5sJm0oWigBAGQJZB9sJm0pWikBAGQJZCBsJm0qWioBAGQJZCFsJm0rWisBAGQJZCJsLG0tWi0BAGQJZCNsLG0uWi4BAGQJZCRsLG0vWi8BAGQJZCVsEW0wWjABAGQJZCZsMW0yWjIBAGQJZCdsM200WjQBAGQJZChsM201WjUBAGQJZClsM202WjYBAGQJZCpsN204WjgBAGQJZCtsN205WjkBAGQJZCxsN206WjoBAGQJZC1sN207WjsBAGQJZC5sN208WjwBAGQJZC9sN209Wj0BAGQJZDBsN20+Wj4BAGUEaj+QAnJ8ZAFkAmxAWkFkCWQxbEJtQ1pDAQBkCWQybERtRVpFAQBkCWQzbEZtR1pHAQBlBGpIZDRkNWQ2jQJaSWUJZDdkOI0BZQRqSmVJGQBlBGpLZUlkOZwDZDpkO4QEgwFaTGVNZQRqTmUEak9lBGpQZQVqUWVSZgIZAGQ8ZgIZABkAZD2cAmQ+ZD+EBFpTZQRqTmUEak8ZAGUEak5lBGpPZQRqUGUFalFlUmYCGQBkPGYCGQAZAGRAnAJkQWRChARaVGQ1ZQRqVWUEalZlUmUEakpkQxkAZgIZABkAZQRqV2VSZENmAhkAZEScA2RFZEaEBFpYZDVkNWRHnAJkSGRJhARaWUcAZEpkNYQAZDWDAlpaRwBkS2Q8hABkPIMCWltHAGRMZE2EAGRNgwJaXEcAZE5kT4QAZE+DAlpdRwBkUGRRhABkUYMCWl5lW2VaX19kAlMAKVJ6S0NsYXNzZXMgZm9yIG1hbmFnaW5nIHRlbXBsYXRlcyBhbmQgdGhlaXIgcnVudGltZSBhbmQgY29tcGlsZSB0aW1lCm9wdGlvbnMuCukAAAAATikB2ghDaGFpbk1hcCkB2glscnVfY2FjaGUpAdoHcGFydGlhbCkB2gZyZWR1Y2UpAdoIQ29kZVR5cGUpAdoGTWFya3Vw6QEAAAApAdoFbm9kZXMpAdoNQ29kZUdlbmVyYXRvcikB2ghnZW5lcmF0ZSkB2hBCTE9DS19FTkRfU1RSSU5HKQHaEkJMT0NLX1NUQVJUX1NUUklORykB2hJDT01NRU5UX0VORF9TVFJJTkcpAdoUQ09NTUVOVF9TVEFSVF9TVFJJTkcpAdoPREVGQVVMVF9GSUxURVJTKQHaEURFRkFVTFRfTkFNRVNQQUNFKQHaEERFRkFVTFRfUE9MSUNJRVMpAdoNREVGQVVMVF9URVNUUykB2hVLRUVQX1RSQUlMSU5HX05FV0xJTkUpAdoTTElORV9DT01NRU5UX1BSRUZJWCkB2hVMSU5FX1NUQVRFTUVOVF9QUkVGSVgpAdoNTFNUUklQX0JMT0NLUykB2hBORVdMSU5FX1NFUVVFTkNFKQHaC1RSSU1fQkxPQ0tTKQHaE1ZBUklBQkxFX0VORF9TVFJJTkcpAdoVVkFSSUFCTEVfU1RBUlRfU1RSSU5HKQHaEFRlbXBsYXRlTm90Rm91bmQpAdoUVGVtcGxhdGVSdW50aW1lRXJyb3IpAdoRVGVtcGxhdGVzTm90Rm91bmQpAdoTVGVtcGxhdGVTeW50YXhFcnJvcikB2g5VbmRlZmluZWRFcnJvcikB2glnZXRfbGV4ZXIpAdoFTGV4ZXIpAdoLVG9rZW5TdHJlYW0pAdoLRXZhbENvbnRleHQpAdoGUGFyc2VyKQHaB0NvbnRleHQpAdoLbmV3X2NvbnRleHQpAdoJVW5kZWZpbmVkKQHaCF9QYXNzQXJnKQHaBmNvbmNhdCkB2gdjb25zdW1lKQHaDWltcG9ydF9zdHJpbmcpAdoMaW50ZXJuYWxjb2RlKQHaCExSVUNhY2hlKQHaB21pc3NpbmcpAdoNQnl0ZWNvZGVDYWNoZSkB2glFeHRlbnNpb24pAdoKQmFzZUxvYWRlctoKX2Vudl9ib3VuZNoLRW52aXJvbm1lbnQpAdoFYm91bmTpCgAAACkB2gdtYXhzaXplKQPaA2Nsc9oEYXJnc9oGcmV0dXJuYwEAAAAAAAAAAwAAAAIAAABHAAAAcxIAAAB8AHwBjgB9AmQBfAJfAHwCUwApAmELAQAAUmV0dXJuIGEgbmV3IHNwb250YW5lb3VzIGVudmlyb25tZW50LiBBIHNwb250YW5lb3VzIGVudmlyb25tZW50CiAgICBpcyB1c2VkIGZvciB0ZW1wbGF0ZXMgY3JlYXRlZCBkaXJlY3RseSByYXRoZXIgdGhhbiB0aHJvdWdoIGFuCiAgICBleGlzdGluZyBlbnZpcm9ubWVudC4KCiAgICA6cGFyYW0gY2xzOiBFbnZpcm9ubWVudCBjbGFzcyB0byBjcmVhdGUuCiAgICA6cGFyYW0gYXJnczogUG9zaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIGVudmlyb25tZW50LgogICAgVCkB2gZzaGFyZWQpA3I4AAAAcjkAAADaA2VudqkAcj0AAAD6gy9ob21lL3VldGxoci9Eb2N1bWVudHMvU2VybW9QbG90X2JhY2tlbmQvZHJhZnRfU1JBTV9ibGFja2JveC9VRVRSVl9FU29DX21wdzgvdmVudi9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvamluamEyL2Vudmlyb25tZW50LnB52htnZXRfc3BvbnRhbmVvdXNfZW52aXJvbm1lbnRDAAAAcwYAAAAACQgBBgFyPwAAANoIVGVtcGxhdGUpAtoEc2l6ZXI6AAAAYwEAAAAAAAAAAQAAAAIAAABDAAAAcyAAAAB8AGQBawJyDGQCUwB8AGQBawByGGkAUwB0AHwAgwFTACkDeipSZXR1cm4gdGhlIGNhY2hlIGNsYXNzIGZvciB0aGUgZ2l2ZW4gc2l6ZS5yAQAAAE4pAXIuAAAAKQFyQQAAAHI9AAAAcj0AAAByPgAAANoMY3JlYXRlX2NhY2hlUQAAAHMKAAAAAAQIAQQCCAEEAnJCAAAAKQLaBWNhY2hlcjoAAABjAQAAAAAAAAABAAAAAgAAAEMAAABzJgAAAHwAZAFrCHIMZAFTAHQA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ICAgICBgYmxvY2tfZW5kX3N0cmluZ2AKICAgICAgICAgICAgVGhlIHN0cmluZyBtYXJraW5nIHRoZSBlbmQgb2YgYSBibG9jay4gIERlZmF1bHRzIHRvIGBgJyV9J2BgLgoKICAgICAgICBgdmFyaWFibGVfc3RhcnRfc3RyaW5nYAogICAgICAgICAgICBUaGUgc3RyaW5nIG1hcmtpbmcgdGhlIGJlZ2lubmluZyBvZiBhIHByaW50IHN0YXRlbWVudC4KICAgICAgICAgICAgRGVmYXVsdHMgdG8gYGAne3snYGAuCgogICAgICAgIGB2YXJpYWJsZV9lbmRfc3RyaW5nYAogICAgICAgICAgICBUaGUgc3RyaW5nIG1hcmtpbmcgdGhlIGVuZCBvZiBhIHByaW50IHN0YXRlbWVudC4gIERlZmF1bHRzIHRvCiAgICAgICAgICAgIGBgJ319J2BgLgoKICAgICAgICBgY29tbWVudF9zdGFydF9zdHJpbmdgCiAgICAgICAgICAgIFRoZSBzdHJpbmcgbWFya2luZyB0aGUgYmVnaW5uaW5nIG9mIGEgY29tbWVudC4gIERlZmF1bHRzIHRvIGBgJ3sjJ2BgLgoKICAgICAgICBgY29tbWVudF9lbmRfc3RyaW5nYAogICAgICAgICAgICBUaGUgc3RyaW5nIG1hcmtpbmcgdGhlIGVuZCBvZiBhIGNvbW1lbnQuICBEZWZhdWx0cyB0byBgYCcjfSdgYC4KCiAgICAgICAgYGxpbmVfc3RhdGVtZW50X3ByZWZpeGAKICAgICAgICAgICAgSWYgZ2l2ZW4gYW5kIGEgc3RyaW5nLCB0aGlzIHdpbGwgYmUgdXNlZCBhcyBwcmVmaXggZm9yIGxpbmUgYmFzZWQKICAgICAgICAgICAgc3RhdGVtZW50cy4gIFNlZSBhbHNvIDpyZWY6YGxpbmUtc3RhdGVtZW50c2AuCgogICAgICAgIGBsaW5lX2NvbW1lbnRfcHJlZml4YAogICAgICAgICAgICBJZiBnaXZlbiBhbmQgYSBzdHJpbmcsIHRoaXMgd2lsbCBiZSB1c2VkIGFzIHByZWZpeCBmb3IgbGluZSBiYXNlZAogICAgICAgICAgICBjb21tZW50cy4gIFNlZSBhbHNvIDpyZWY6YGxpbmUtc3RhdGVtZW50c2AuCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjIKCiAgICAgICAgYHRyaW1fYmxvY2tzYAogICAgICAgICAgICBJZiB0aGlzIGlzIHNldCB0byBgYFRydWVgYCB0aGUgZmlyc3QgbmV3bGluZSBhZnRlciBhIGJsb2NrIGlzCiAgICAgICAgICAgIHJlbW92ZWQgKGJsb2NrLCBub3QgdmFyaWFibGUgdGFnISkuICBEZWZhdWx0cyB0byBgRmFsc2VgLgoKICAgICAgICBgbHN0cmlwX2Jsb2Nrc2AKICAgICAgICAgICAgSWYgdGhpcyBpcyBzZXQgdG8gYGBUcnVlYGAgbGVhZGluZyBzcGFjZXMgYW5kIHRhYnMgYXJlIHN0cmlwcGVkCiAgICAgICAgICAgIGZyb20gdGhlIHN0YXJ0IG9mIGEgbGluZSB0byBhIGJsb2NrLiAgRGVmYXVsdHMgdG8gYEZhbHNlYC4KCiAgICAgICAgYG5ld2xpbmVfc2VxdWVuY2VgCiAgICAgICAgICAgIFRoZSBzZXF1ZW5jZSB0aGF0IHN0YXJ0cyBhIG5ld2xpbmUuICBNdXN0IGJlIG9uZSBvZiBgYCdccidgYCwKICAgICAgICAgICAgYGAnXG4nYGAgb3IgYGAnXHJcbidgYC4gIFRoZSBkZWZhdWx0IGlzIGBgJ1xuJ2BgIHdoaWNoIGlzIGEKICAgICAgICAgICAgdXNlZnVsIGRlZmF1bHQgZm9yIExpbnV4IGFuZCBPUyBYIHN5c3RlbXMgYXMgd2VsbCBhcyB3ZWIKICAgICAgICAgICAgYXBwbGljYXRpb25zLgoKICAgICAgICBga2VlcF90cmFpbGluZ19uZXdsaW5lYAogICAgICAgICAgICBQcmVzZXJ2ZSB0aGUgdHJhaWxpbmcgbmV3bGluZSB3aGVuIHJlbmRlcmluZyB0ZW1wbGF0ZXMuCiAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIGBgRmFsc2VgYCwgd2hpY2ggY2F1c2VzIGEgc2luZ2xlIG5ld2xpbmUsCiAgICAgICAgICAgIGlmIHByZXNlbnQsIHRvIGJlIHN0cmlwcGVkIGZyb20gdGhlIGVuZCBvZiB0aGUgdGVtcGxhdGUuCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKCiAgICAgICAgYGV4dGVuc2lvbnNgCiAgICAgICAgICAgIExpc3Qgb2YgSmluamEgZXh0ZW5zaW9ucyB0byB1c2UuICBUaGlzIGNhbiBlaXRoZXIgYmUgaW1wb3J0IHBhdGhzCiAgICAgICAgICAgIGFzIHN0cmluZ3Mgb3IgZXh0ZW5zaW9uIGNsYXNzZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBoYXZlIGEKICAgICAgICAgICAgbG9vayBhdCA6cmVmOmB0aGUgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uIDxqaW5qYS1leHRlbnNpb25zPmAuCgogICAgICAgIGBvcHRpbWl6ZWRgCiAgICAgICAgICAgIHNob3VsZCB0aGUgb3B0aW1pemVyIGJlIGVuYWJsZWQ/ICBEZWZhdWx0IGlzIGBgVHJ1ZWBgLgoKICAgICAgICBgdW5kZWZpbmVkYAogICAgICAgICAgICA6Y2xhc3M6YFVuZGVmaW5lZGAgb3IgYSBzdWJjbGFzcyBvZiBpdCB0aGF0IGlzIHVzZWQgdG8gcmVwcmVzZW50CiAgICAgICAgICAgIHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhlIHRlbXBsYXRlLgoKICAgICAgICBgZmluYWxpemVgCiAgICAgICAgICAgIEEgY2FsbGFibGUgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9jZXNzIHRoZSByZXN1bHQgb2YgYSB2YXJpYWJsZQogICAgICAgICAgICBleHByZXNzaW9uIGJlZm9yZSBpdCBpcyBvdXRwdXQuICBGb3IgZXhhbXBsZSBvbmUgY2FuIGNvbnZlcnQKICAgICAgICAgICAgYGBOb25lYGAgaW1wbGljaXRseSBpbnRvIGFuIGVtcHR5IHN0cmluZyBoZXJlLgoKICAgICAgICBgYXV0b2VzY2FwZWAKICAgICAgICAgICAgSWYgc2V0IHRvIGBgVHJ1ZWBgIHRoZSBYTUwvSFRNTCBhdXRvZXNjYXBpbmcgZmVhdHVyZSBpcyBlbmFibGVkIGJ5CiAgICAgICAgICAgIGRlZmF1bHQuICBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IGF1dG9lc2NhcGluZyBzZWUKICAgICAgICAgICAgOmNsYXNzOmB+bWFya3Vwc2FmZS5NYXJrdXBgLiAgQXMgb2YgSmluamEgMi40IHRoaXMgY2FuIGFsc28KICAgICAgICAgICAgYmUgYSBjYWxsYWJsZSB0aGF0IGlzIHBhc3NlZCB0aGUgdGVtcGxhdGUgbmFtZSBhbmQgaGFzIHRvCiAgICAgICAgICAgIHJldHVybiBgYFRydWVgYCBvciBgYEZhbHNlYGAgZGVwZW5kaW5nIG9uIGF1dG9lc2NhcGUgc2hvdWxkIGJlCiAgICAgICAgICAgIGVuYWJsZWQgYnkgZGVmYXVsdC4KCiAgICAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi40CiAgICAgICAgICAgICAgIGBhdXRvZXNjYXBlYCBjYW4gbm93IGJlIGEgZnVuY3Rpb24KCiAgICAgICAgYGxvYWRlcmAKICAgICAgICAgICAgVGhlIHRlbXBsYXRlIGxvYWRlciBmb3IgdGhpcyBlbnZpcm9ubWVudC4KCiAgICAgICAgYGNhY2hlX3NpemVgCiAgICAgICAgICAgIFRoZSBzaXplIG9mIHRoZSBjYWNoZS4gIFBlciBkZWZhdWx0IHRoaXMgaXMgYGA0MDBgYCB3aGljaCBtZWFucwogICAgICAgICAgICB0aGF0IGlmIG1vcmUgdGhhbiA0MDAgdGVtcGxhdGVzIGFyZSBsb2FkZWQgdGhlIGxvYWRlciB3aWxsIGNsZWFuCiAgICAgICAgICAgIG91dCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCB0ZW1wbGF0ZS4gIElmIHRoZSBjYWNoZSBzaXplIGlzIHNldCB0bwogICAgICAgICAgICBgYDBgYCB0ZW1wbGF0ZXMgYXJlIHJlY29tcGlsZWQgYWxsIHRoZSB0aW1lLCBpZiB0aGUgY2FjaGUgc2l6ZSBpcwogICAgICAgICAgICBgYC0xYGAgdGhlIGNhY2hlIHdpbGwgbm90IGJlIGNsZWFuZWQuCgogICAgICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuOAogICAgICAgICAgICAgICBUaGUgY2FjaGUgc2l6ZSB3YXMgaW5jcmVhc2VkIHRvIDQwMCBmcm9tIGEgbG93IDUwLgoKICAgICAgICBgYXV0b19yZWxvYWRgCiAgICAgICAgICAgIFNvbWUgbG9hZGVycyBsb2FkIHRlbXBsYXRlcyBmcm9tIGxvY2F0aW9ucyB3aGVyZSB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgc291cmNlcyBtYXkgY2hhbmdlIChpZTogZmlsZSBzeXN0ZW0gb3IgZGF0YWJhc2UpLiAgSWYKICAgICAgICAgICAgYGBhdXRvX3JlbG9hZGBgIGlzIHNldCB0byBgYFRydWVgYCAoZGVmYXVsdCkgZXZlcnkgdGltZSBhIHRlbXBsYXRlIGlzCiAgICAgICAgICAgIHJlcXVlc3RlZCB0aGUgbG9hZGVyIGNoZWNrcyBpZiB0aGUgc291cmNlIGNoYW5nZWQgYW5kIGlmIHllcywgaXQKICAgICAgICAgICAgd2lsbCByZWxvYWQgdGhlIHRlbXBsYXRlLiAgRm9yIGhpZ2hlciBwZXJmb3JtYW5jZSBpdCdzIHBvc3NpYmxlIHRvCiAgICAgICAgICAgIGRpc2FibGUgdGhhdC4KCiAgICAgICAgYGJ5dGVjb2RlX2NhY2hlYAogICAgICAgICAgICBJZiBzZXQgdG8gYSBieXRlY29kZSBjYWNoZSBvYmplY3QsIHRoaXMgb2JqZWN0IHdpbGwgcHJvdmlkZSBhCiAgICAgICAgICAgIGNhY2hlIGZvciB0aGUgaW50ZXJuYWwgSmluamEgYnl0ZWNvZGUgc28gdGhhdCB0ZW1wbGF0ZXMgZG9uJ3QKICAgICAgICAgICAgaGF2ZSB0byBiZSBwYXJzZWQgaWYgdGhleSB3ZXJlIG5vdCBjaGFuZ2VkLgoKICAgICAgICAgICAgU2VlIDpyZWY6YGJ5dGVjb2RlLWNhY2hlYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAgICAgYGVuYWJsZV9hc3luY2AKICAgICAgICAgICAgSWYgc2V0IHRvIHRydWUgdGhpcyBlbmFibGVzIGFzeW5jIHRlbXBsYXRlIGV4ZWN1dGlvbiB3aGljaAogICAgICAgICAgICBhbGxvd3MgdXNpbmcgYXN5bmMgZnVuY3Rpb25zIGFuZCBnZW5lcmF0b3JzLgogICAgRk5yCgAAAHJAAAAAVGmQAQAAeh50ZS5MaXRlcmFs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ZAE9AHwUZAI9AHwUZAM9AHQCagN8AGoEgwF9FXwVagVqBnwAagWDAQEAZAR8FV8HfAB8FV8IeCh8FGoJgwBEAF0cXAJ9Fn0XfBd0CmsJckx0C3wVfBZ8F4MDAQBxTFcAfBF0CmsJcoB0DHwRgwF8FV8Nbgx0DnwAag2DAXwVXw1pAHwVXw94JnwAag9qCYMARABdGFwCfRZ9F3wXahB8FYMBfBVqD3wWPABxnlcAfAt0CmsJctR8FWoPagZ0EXwVfAuDAoMBAQB0EnwVgwFTACkFYWcCAABDcmVhdGUgYSBuZXcgb3ZlcmxheSBlbnZpcm9ubWVudCB0aGF0IHNoYXJlcyBhbGwgdGhlIGRhdGEgd2l0aCB0aGUKICAgICAgICBjdXJyZW50IGVudmlyb25tZW50IGV4Y2VwdCBmb3IgY2FjaGUgYW5kIHRoZSBvdmVycmlkZGVuIGF0dHJpYnV0ZXMuCiAgICAgICAgRXh0ZW5zaW9ucyBjYW5ub3QgYmUgcmVtb3ZlZCBmb3IgYW4gb3ZlcmxheWVkIGVudmlyb25tZW50LiAgQW4gb3ZlcmxheWVkCiAgICAgICAgZW52aXJvbm1lbnQgYXV0b21hdGljYWxseSBnZXRzIGFsbCB0aGUgZXh0ZW5zaW9ucyBvZiB0aGUgZW52aXJvbm1lbnQgaXQKICAgICAgICBpcyBsaW5rZWQgdG8gcGx1cyBvcHRpb25hbCBleHRyYSBleHRlbnNpb25zLgoKICAgICAgICBDcmVhdGluZyBvdmVybGF5cyBzaG91bGQgaGFwcGVuIGFmdGVyIHRoZSBpbml0aWFsIGVudmlyb25tZW50IHdhcyBzZXQKICAgICAgICB1cCBjb21wbGV0ZWx5LiAgTm90IGFsbCBhdHRyaWJ1dGVzIGFyZSB0cnVseSBsaW5rZWQsIHNvbWUgYXJlIGp1c3QKICAgICAgICBjb3BpZWQgb3ZlciBzbyBtb2RpZmljYXRpb25zIG9uIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCBtYXkgbm90IHNoaW5lCiAgICAgICAgdGhyb3VnaC4KICAgICAgICBycwAAAHJqAAAAckkAAABUKRNyRQAAANoGbG9jYWxz2gZvYmplY3TaB19fbmV3X1/aCV9fY2xhc3NfX9oIX19kaWN0X19y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b3VyY2UgY29kZS4gIFRoZSBgbmFtZWAgcGFyYW1ldGVyIGlzCiAgICAgICAgdGhlIGxvYWQgbmFtZSBvZiB0aGUgdGVtcGxhdGUgYWZ0ZXIgaXQgd2FzIGpvaW5lZCB1c2luZwogICAgICAgIDptZXRoOmBqb2luX3BhdGhgIGlmIG5lY2Vzc2FyeSwgbm90IHRoZSBmaWxlbmFtZSBvbiB0aGUgZmlsZSBzeXN0ZW0uCiAgICAgICAgdGhlIGBmaWxlbmFtZWAgcGFyYW1ldGVyIGlzIHRoZSBlc3RpbWF0ZWQgZmlsZW5hbWUgb2YgdGhlIHRlbXBsYXRlIG9uCiAgICAgICAgdGhlIGZpbGUgc3lzdGVtLiAgSWYgdGhlIHRlbXBsYXRlIGNhbWUgZnJvbSBhIGRhdGFiYXNlIG9yIG1lbW9yeSB0aGlzCiAgICAgICAgY2FuIGJlIG9taXR0ZWQuCgogICAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QgaXMgYSBweXRob24gY29kZSBvYmplY3QuICBJZiB0aGUgYHJhd2AKICAgICAgICBwYXJhbWV0ZXIgaXMgYFRydWVgIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhIHN0cmluZyB3aXRoIHB5dGhvbgogICAgICAgIGNvZGUgZXF1aXZhbGVudCB0byB0aGUgYnl0ZWNvZGUgcmV0dXJuZWQgb3RoZXJ3aXNlLiAgVGhpcyBtZXRob2QgaXMKICAgICAgICBtYWlubHkgdXNlZCBpbnRlcm5hbGx5LgoKICAgICAgICBgZGVmZXJfaW5pdGAgaXMgdXNlIGludGVybmFsbHkgdG8gYWlkIHRoZSBtb2R1bGUgY29kZSBnZW5lcmF0b3IuICBUaGlzCiAgICAgICAgY2F1c2VzIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBiZSBhYmxlIHRvIGltcG9ydCB3aXRob3V0IHRoZSBnbG9iYWwKICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBiZSBzZXQuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAogICAgICAgICAgIGBkZWZlcl9pbml0YCBwYXJhbWV0ZXIgYWRkZWQuCiAgICAgICAgTikBcrkA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gwGCAXQCdAJkA2QInAOHAIcBhwKHA2YEZAlkCoQMfQiIAmQDawlypmQLZAxsBW0GfQltB4kAbQh9Cm0JfQsBAHwJiAFkDXQKfAp8C2QOjQKIAhkAgwOJA3wFZA+IAZsCnQKDAQEAbiR0C2oMag2IAYMBc7x0C2oOiAGDAQEAfAVkEIgBmwKdAoMBAQB6sHiqfABqD3wCfAODAkQAXZp9DHwAagRqEHwAfAyDAlwDfQ19Dn0PeRZ8AGoRfA18DHwOZBFkEYMFfRBXAG5CBAB0EmsKkAFySgEAfREBAHokfAaQAXMkggB8BWQSfAybAGQTfBGbAJ0EgwEBAHfaVwBZAGQDZAN9EX4RWABuAlgAfAdqE3wMgwF9DnwIfA58EIMCAQB8BWQUfAybAGQVfA6bAJ0EgwEBAHHaVwBXAGQDiAKQAXKKiANqFIMAAQBYAHwFZBaDAQEAZANTACkXYTMDAABGaW5kcyBhbGwgdGhlIHRlbXBsYXRlcyB0aGUgbG9hZGVyIGNhbiBmaW5kLCBjb21waWxlcyB0aGVtCiAgICAgICAgYW5kIHN0b3JlcyB0aGVtIGluIGB0YXJnZXRgLiAgSWYgYHppcGAgaXMgYE5vbmVgLCBpbnN0ZWFkIG9mIGluIGEKICAgICAgICB6aXBmaWxlLCB0aGUgdGVtcGxhdGVzIHdpbGwgYmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5LgogICAgICAgIEJ5IGRlZmF1bHQgYSBkZWZsYXRlIHppcCBhbGdvcml0aG0gaXMgdXNlZC4gVG8gc3dpdGNoIHRvCiAgICAgICAgdGhlIHN0b3JlZCBhbGdvcml0aG0sIGB6aXBgIGNhbiBiZSBzZXQgdG8gYGAnc3RvcmVkJ2BgLgoKICAgICAgICBgZXh0ZW5zaW9uc2AgYW5kIGBmaWx0ZXJfZnVuY2AgYXJlIHBhc3NlZCB0byA6bWV0aDpgbGlzdF90ZW1wbGF0ZXNgLgogICAgICAgIEVhY2ggdGVtcGxhdGUgcmV0dXJuZWQgd2lsbCBiZSBjb21waWxlZCB0byB0aGUgdGFyZ2V0IGZvbGRlciBvcgogICAgICAgIHppcGZpbGUuCgogICAgICAgIEJ5IGRlZmF1bHQgdGVtcGxhdGUgY29tcGlsYXRpb24gZXJyb3JzIGFyZSBpZ25v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BAAAAAAAAAAFAAAADQAAAEMAAABzggAAAHQAfAF0AYMCchJ8AWoCgwABAHwBcyB0A2QBZAKNAYIBeFR8AUQAXUx9BHQAfAR0BIMCcjh8BFMAfAJkA2sJckx8AGoFfAR8AoMCfQR5DHwAagZ8BHwDgwJTAAQAdAd0CGYCawpycAEAAQABAFkAcSZYAHEmVwB0A3wBgwGCAWQDUwApBGH4BAAATGlrZSA6bWV0aDpgZ2V0X3RlbXBsYXRlYCwgYnV0IHRyaWVzIGxvYWRpbmcgbXVsdGlwbGUgbmFtZXMuCiAgICAgICAgSWYgbm9uZSBvZiB0aGUgbmFtZXMgY2FuIGJlIGxvYWRlZCBhIDpleGM6YFRlbXBsYXRlc05vdEZvdW5kYAogICAgICAgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCgogICAgICAgIDpwYXJhbSBuYW1lczogTGlzdCBvZiB0ZW1wbGF0ZSBuYW1lcyB0byB0cnkgbG9hZGluZyBpbiBvcmRlci4KICAgICAgICA6cGFyYW0gcGFyZW50OiBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IHRlbXBsYXRlIGltcG9ydGluZyB0aGlzCiAgICAgICAgICAgIHRlbXBsYXRlLiA6bWV0aDpgam9pbl9wYXRoYCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgbmFtZQogICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbnMgd2l0aCB0aGlzLgogICAgICAgIDpwYXJhbSBnbG9iYWxzOiBFeHRlbmQgdGhlIGVudmlyb25tZW50IDphdHRyOmBnbG9iYWxzYCB3aXRoCiAgICAgICAgICAgIHRoZXNlIGV4dHJhIHZhcmlhYmxlcyBhdmFpbGFibGUgZm9yIGFsbCByZW5kZXJzIG9mIHRoaXMKICAgICAgICAgICAgdGVtcGxhdGUuIElmIHRoZSB0ZW1wbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCBhbmQKICAgICAgICAgICAgY2FjaGVkLCBpdHMgZ2xvYmFscyBhcmUgdXBkYXRlZCB3aXRoIGFueSBuZXcgaXRlbXMuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4wCiAgICAgICAgICAgIElmIGEgdGVtcGxhdGUgaXMg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