YQ0NCgAAAABKGnxjpe8AAOMAAAAAAAAAAAAAAAAAAAAABgAAAEAAAABzmAMAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwCWgNkAWQCbARaBGQBZANsBW0GWgYBAGQBZARsB20IWggBAGQBZAVsB20JWgkBAGQBZAZsB20KWgoBAGQBZAdsC20MWgwBAGQBZAhsDW0OWg4BAGQJZApsD20QWhABAGQJZAtsEW0SWhIBAGQJZAxsEW0TWhMBAGQJZA1sFG0VWhUBAGQJZA5sFG0WWhYBAGQJZA9sFG0XWhcBAGQJZBBsFG0YWhgBAGQJZBFsFG0ZWhkBAGQJZBJsFG0aWhoBAGQJZBNsFG0bWhsBAGQJZBRsFG0cWhwBAGQJZBVsFG0dWh0BAGQJZBZsFG0eWh4BAGQJZBdsFG0fWh8BAGQJZBhsFG0gWiABAGQJZBlsFG0hWiEBAGQJZBpsFG0iWiIBAGQJZBtsFG0jWiMBAGQJZBxsFG0kWiQBAGQJZB1sJW0mWiYBAGQJZB5sJW0nWicBAGQJZB9sJW0oWigBAGQJZCBsJW0pWikBAGQJZCFsJW0qWioBAGQJZCJsK20sWiwBAGQJZCNsK20tWi0BAGQJZCRsK20uWi4BAGQJZCVsEG0vWi8BAGQJZCZsMG0xWjEBAGQJZCdsMm0zWjMBAGQJZChsMm00WjQBAGQJZClsMm01WjUBAGQJZCpsNm03WjcBAGQJZCtsNm04WjgBAGQJZCxsNm05WjkBAGQJZC1sNm06WjoBAGQJZC5sNm07WjsBAGQJZC9sNm08WjwBAGQJZDBsNm09Wj0BAGUDaj6QAnJ0ZAFkAmw/WkBkCWQxbEFtQlpCAQBkCWQybENtRFpEAQBkCWQzbEVtRlpGAQBlA2pHZDRkNWQ2jQJaSGUIZDdkOI0BZQNqSWVIGQBlA2pKZUhkOZwDZDpkO4QEgwFaS2VMZQNqTWUDak5lA2pPZQRqUGVRZgIZAGQ8ZgIZABkAZD2cAmQ+ZD+EBFpSZQNqTWUDak4ZAGUDak1lA2pOZQNqT2UEalBlUWYCGQBkPGYCGQAZAGRAnAJkQWRChARaU2Q1ZQNqVGUDalVlUWUDaklkQxkAZgIZABkAZQNqVmVRZENmAhkAZEScA2RFZEaEBFpXZDVkNWRHnAJkSGRJhARaWEcAZEpkNYQAZDWDAlpZRwBkS2Q8hABkPIMCWlpHAGRMZE2EAGRNgwJaW0cAZE5kT4QAZE+DAlpcRwBkUGRRhABkUYMCWl1lWmVZX15kAlMAKVJ6S0NsYXNzZXMgZm9yIG1hbmFnaW5nIHRlbXBsYXRlcyBhbmQgdGhlaXIgcnVudGltZSBhbmQgY29tcGlsZSB0aW1lCm9wdGlvbnMuCukAAAAATikB2ghDaGFpbk1hcCkB2glscnVfY2FjaGUpAdoHcGFydGlhbCkB2gZyZWR1Y2UpAdoIQ29kZVR5cGUpAdoGTWFya3Vw6QEAAAApAdoFbm9kZXMpAdoNQ29kZUdlbmVyYXRvcikB2ghnZW5lcmF0ZSkB2hBCTE9DS19FTkRfU1RSSU5HKQHaEkJMT0NLX1NUQVJUX1NUUklORykB2hJDT01NRU5UX0VORF9TVFJJTkcpAdoUQ09NTUVOVF9TVEFSVF9TVFJJTkcpAdoPREVGQVVMVF9GSUxURVJTKQHaEURFRkFVTFRfTkFNRVNQQUNFKQHaEERFRkFVTFRfUE9MSUNJRVMpAdoNREVGQVVMVF9URVNUUykB2hVLRUVQX1RSQUlMSU5HX05FV0xJTkUpAdoTTElORV9DT01NRU5UX1BSRUZJWCkB2hVMSU5FX1NUQVRFTUVOVF9QUkVGSVgpAdoNTFNUUklQX0JMT0NLUykB2hBORVdMSU5FX1NFUVVFTkNFKQHaC1RSSU1fQkxPQ0tTKQHaE1ZBUklBQkxFX0VORF9TVFJJTkcpAdoVVkFSSUFCTEVfU1RBUlRfU1RSSU5HKQHaEFRlbXBsYXRlTm90Rm91bmQpAdoUVGVtcGxhdGVSdW50aW1lRXJyb3IpAdoRVGVtcGxhdGVzTm90Rm91bmQpAdoTVGVtcGxhdGVTeW50YXhFcnJvcikB2g5VbmRlZmluZWRFcnJvcqkB2glnZXRfbGV4ZXIpAdoFTGV4ZXIpAdoLVG9rZW5TdHJlYW0pAdoLRXZhbENvbnRleHQpAdoGUGFyc2VyKQHaB0NvbnRleHQpAdoLbmV3X2NvbnRleHQpAdoJVW5kZWZpbmVkKQHaCF9QYXNzQXJnKQHaBmNvbmNhdCkB2gdjb25zdW1lKQHaDWltcG9ydF9zdHJpbmcpAdoMaW50ZXJuYWxjb2RlqQHaCExSVUNhY2hlKQHaB21pc3NpbmcpAdoN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ICAgICAgICAgVGhlIHN0cmluZyBtYXJraW5nIHRoZSBlbmQgb2YgYSBibG9jay4gIERlZmF1bHRzIHRvIGBgJyV9J2BgLgoKICAgICAgICBgdmFyaWFibGVfc3RhcnRfc3RyaW5nYAogICAgICAgICAgICBUaGUgc3RyaW5nIG1hcmtpbmcgdGhlIGJlZ2lubmluZyBvZiBhIHByaW50IHN0YXRlbWVudC4KICAgICAgICAgICAgRGVmYXVsdHMgdG8gYGAne3snYGAuCgogICAgICAgIGB2YXJpYWJsZV9lbmRfc3RyaW5nYAogICAgICAgICAgICBUaGUgc3RyaW5nIG1hcmtpbmcgdGhlIGVuZCBvZiBhIHByaW50IHN0YXRlbWVudC4gIERlZmF1bHRzIHRvCiAgICAgICAgICAgIGBgJ319J2BgLgoKICAgICAgICBgY29tbWVudF9zdGFydF9zdHJpbmdgCiAgICAgICAgICAgIFRoZSBzdHJpbmcgbWFya2luZyB0aGUgYmVnaW5uaW5nIG9mIGEgY29tbWVudC4gIERlZmF1bHRzIHRvIGBgJ3sjJ2BgLgoKICAgICAgICBgY29tbWVudF9lbmRfc3RyaW5nYAogICAgICAgICAgICBUaGUgc3RyaW5nIG1hcmtpbmcgdGhlIGVuZCBvZiBhIGNvbW1lbnQuICBEZWZhdWx0cyB0byBgYCcjfSdgYC4KCiAgICAgICAgYGxpbmVfc3RhdGVtZW50X3ByZWZpeGAKICAgICAgICAgICAgSWYgZ2l2ZW4gYW5kIGEgc3RyaW5nLCB0aGlzIHdpbGwgYmUgdXNlZCBhcyBwcmVmaXggZm9yIGxpbmUgYmFzZWQKICAgICAgICAgICAgc3RhdGVtZW50cy4gIFNlZSBhbHNvIDpyZWY6YGxpbmUtc3RhdGVtZW50c2AuCgogICAgICAgIGBsaW5lX2NvbW1lbnRfcHJlZml4YAogICAgICAgICAgICBJZiBnaXZlbiBhbmQgYSBzdHJpbmcsIHRoaXMgd2lsbCBiZSB1c2VkIGFzIHByZWZpeCBmb3IgbGluZSBiYXNlZAogICAgICAgICAgICBjb21tZW50cy4gIFNlZSBhbHNvIDpyZWY6YGxpbmUtc3RhdGVtZW50c2AuCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjIKCiAgICAgICAgYHRyaW1fYmxvY2tzYAogICAgICAgICAgICBJZiB0aGlzIGlzIHNldCB0byBgYFRydWVgYCB0aGUgZmlyc3QgbmV3bGluZSBhZnRlciBhIGJsb2NrIGlzCiAgICAgICAgICAgIHJlbW92ZWQgKGJsb2NrLCBub3QgdmFyaWFibGUgdGFnISkuICBEZWZhdWx0cyB0byBgRmFsc2VgLgoKICAgICAgICBgbHN0cmlwX2Jsb2Nrc2AKICAgICAgICAgICAgSWYgdGhpcyBpcyBzZXQgdG8gYGBUcnVlYGAgbGVhZGluZyBzcGFjZXMgYW5kIHRhYnMgYXJlIHN0cmlwcGVkCiAgICAgICAgICAgIGZyb20gdGhlIHN0YXJ0IG9mIGEgbGluZSB0byBhIGJsb2NrLiAgRGVmYXVsdHMgdG8gYEZhbHNlYC4KCiAgICAgICAgYG5ld2xpbmVfc2VxdWVuY2VgCiAgICAgICAgICAgIFRoZSBzZXF1ZW5jZSB0aGF0IHN0YXJ0cyBhIG5ld2xpbmUuICBNdXN0IGJlIG9uZSBvZiBgYCdccidgYCwKICAgICAgICAgICAgYGAnXG4nYGAgb3IgYGAnXHJcbidgYC4gIFRoZSBkZWZhdWx0IGlzIGBgJ1xuJ2BgIHdoaWNoIGlzIGEKICAgICAgICAgICAgdXNlZnVsIGRlZmF1bHQgZm9yIExpbnV4IGFuZCBPUyBYIHN5c3RlbXMgYXMgd2VsbCBhcyB3ZWIKICAgICAgICAgICAgYXBwbGljYXRpb25zLgoKICAgICAgICBga2VlcF90cmFpbGluZ19uZXdsaW5lYAogICAgICAgICAgICBQcmVzZXJ2ZSB0aGUgdHJhaWxpbmcgbmV3bGluZSB3aGVuIHJlbmRlcmluZyB0ZW1wbGF0ZXMuCiAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIGBgRmFsc2VgYCwgd2hpY2ggY2F1c2VzIGEgc2luZ2xlIG5ld2xpbmUsCiAgICAgICAgICAgIGlmIHByZXNlbnQsIHRvIGJlIHN0cmlwcGVkIGZyb20gdGhlIGVuZCBvZiB0aGUgdGVtcGxhdGUuCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKCiAgICAgICAgYGV4dGVuc2lvbnNgCiAgICAgICAgICAgIExpc3Qgb2YgSmluamEgZXh0ZW5zaW9ucyB0byB1c2UuICBUaGlzIGNhbiBlaXRoZXIgYmUgaW1wb3J0IHBhdGhzCiAgICAgICAgICAgIGFzIHN0cmluZ3Mgb3IgZXh0ZW5zaW9uIGNsYXNzZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBoYXZlIGEKICAgICAgICAgICAgbG9vayBhdCA6cmVmOmB0aGUgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uIDxqaW5qYS1leHRlbnNpb25zPmAuCgogICAgICAgIGBvcHRpbWl6ZWRgCiAgICAgICAgICAgIHNob3VsZCB0aGUgb3B0aW1pemVyIGJlIGVuYWJsZWQ/ICBEZWZhdWx0IGlzIGBgVHJ1ZWBgLgoKICAgICAgICBgdW5kZWZpbmVkYAogICAgICAgICAgICA6Y2xhc3M6YFVuZGVmaW5lZGAgb3IgYSBzdWJjbGFzcyBvZiBpdCB0aGF0IGlzIHVzZWQgdG8gcmVwcmVzZW50CiAgICAgICAgICAgIHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhlIHRlbXBsYXRlLgoKICAgICAgICBgZmluYWxpemVgCiAgICAgICAgICAgIEEgY2FsbGFibGUgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9jZXNzIHRoZSByZXN1bHQgb2YgYSB2YXJpYWJsZQogICAgICAgICAgICBleHByZXNzaW9uIGJlZm9yZSBpdCBpcyBvdXRwdXQuICBGb3IgZXhhbXBsZSBvbmUgY2FuIGNvbnZlcnQKICAgICAgICAgICAgYGBOb25lYGAgaW1wbGljaXRseSBpbnRvIGFuIGVtcHR5IHN0cmluZyBoZXJlLgoKICAgICAgICBgYXV0b2VzY2FwZWAKICAgICAgICAgICAgSWYgc2V0IHRvIGBgVHJ1ZWBgIHRoZSBYTUwvSFRNTCBhdXRvZXNjYXBpbmcgZmVhdHVyZSBpcyBlbmFibGVkIGJ5CiAgICAgICAgICAgIGRlZmF1bHQuICBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IGF1dG9lc2NhcGluZyBzZWUKICAgICAgICAgICAgOmNsYXNzOmB+bWFya3Vwc2FmZS5NYXJrdXBgLiAgQXMgb2YgSmluamEgMi40IHRoaXMgY2FuIGFsc28KICAgICAgICAgICAgYmUgYSBjYWxsYWJsZSB0aGF0IGlzIHBhc3NlZCB0aGUgdGVtcGxhdGUgbmFtZSBhbmQgaGFzIHRvCiAgICAgICAgICAgIHJldHVybiBgYFRydWVgYCBvciBgYEZhbHNlYGAgZGVwZW5kaW5nIG9uIGF1dG9lc2NhcGUgc2hvdWxkIGJlCiAgICAgICAgICAgIGVuYWJsZWQgYnkgZGVmYXVsdC4KCiAgICAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi40CiAgICAgICAgICAgICAgIGBhdXRvZXNjYXBlYCBjYW4gbm93IGJlIGEgZnVuY3Rpb24KCiAgICAgICAgYGxvYWRlcmAKICAgICAgICAgICAgVGhlIHRlbXBsYXRlIGxvYWRlciBmb3IgdGhpcyBlbnZpcm9ubWVudC4KCiAgICAgICAgYGNhY2hlX3NpemVgCiAgICAgICAgICAgIFRoZSBzaXplIG9mIHRoZSBjYWNoZS4gIFBlciBkZWZhdWx0IHRoaXMgaXMgYGA0MDBgYCB3aGljaCBtZWFucwogICAgICAgICAgICB0aGF0IGlmIG1vcmUgdGhhbiA0MDAgdGVtcGxhdGVzIGFyZSBsb2FkZWQgdGhlIGxvYWRlciB3aWxsIGNsZWFuCiAgICAgICAgICAgIG91dCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCB0ZW1wbGF0ZS4gIElmIHRoZSBjYWNoZSBzaXplIGlzIHNldCB0bwogICAgICAgICAgICBgYDBgYCB0ZW1wbGF0ZXMgYXJlIHJlY29tcGlsZWQgYWxsIHRoZSB0aW1lLCBpZiB0aGUgY2FjaGUgc2l6ZSBpcwogICAgICAgICAgICBgYC0xYGAgdGhlIGNhY2hlIHdpbGwgbm90IGJlIGNsZWFuZWQuCgogICAgICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuOAogICAgICAgICAgICAgICBUaGUgY2FjaGUgc2l6ZSB3YXMgaW5jcmVhc2VkIHRvIDQwMCBmcm9tIGEgbG93IDUwLgoKICAgICAgICBgYXV0b19yZWxvYWRgCiAgICAgICAgICAgIFNvbWUgbG9hZGVycyBsb2FkIHRlbXBsYXRlcyBmcm9tIGxvY2F0aW9ucyB3aGVyZSB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgc291cmNlcyBtYXkgY2hhbmdlIChpZTogZmlsZSBzeXN0ZW0gb3IgZGF0YWJhc2UpLiAgSWYKICAgICAgICAgICAgYGBhdXRvX3JlbG9hZGBgIGlzIHNldCB0byBgYFRydWVgYCAoZGVmYXVsdCkgZXZlcnkgdGltZSBhIHRlbXBsYXRlIGlzCiAgICAgICAgICAgIHJlcXVlc3RlZCB0aGUgbG9hZGVyIGNoZWNrcyBpZiB0aGUgc291cmNlIGNoYW5nZWQgYW5kIGlmIHllcywgaXQKICAgICAgICAgICAgd2lsbCByZWxvYWQgdGhlIHRlbXBsYXRlLiAgRm9yIGhpZ2hlciBwZXJmb3JtYW5jZSBpdCdzIHBvc3NpYmxlIHRvCiAgICAgICAgICAgIGRpc2FibGUgdGhhdC4KCiAgICAgICAgYGJ5dGVjb2RlX2NhY2hlYAogICAgICAgICAgICBJZiBzZXQgdG8gYSBieXRlY29kZSBjYWNoZSBvYmplY3QsIHRoaXMgb2JqZWN0IHdpbGwgcHJvdmlkZSBhCiAgICAgICAgICAgIGNhY2hlIGZvciB0aGUgaW50ZXJuYWwgSmluamEgYnl0ZWNvZGUgc28gdGhhdCB0ZW1wbGF0ZXMgZG9uJ3QKICAgICAgICAgICAgaGF2ZSB0byBiZSBwYXJzZWQgaWYgdGhleSB3ZXJlIG5vdCBjaGFuZ2VkLgoKICAgICAgICAgICAgU2VlIDpyZWY6YGJ5dGVjb2RlLWNhY2hlYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAgICAgYGVuYWJsZV9hc3luY2AKICAgICAgICAgICAgSWYgc2V0IHRvIHRydWUgdGhpcyBlbmFibGVzIGFzeW5jIHRlbXBsYXRlIGV4ZWN1dGlvbiB3aGljaAogICAgICAgICAgICBhbGxvd3MgdXNpbmcgYXN5bmMgZnVuY3Rpb25zIGFuZCBnZW5lcmF0b3JzLgogICAgRk7aCWxpbmtlZF90b3IKAAAA2hRjb2RlX2dlbmVyYXRvcl9jbGFzc9oA2g1jb250ZXh0X2NsYXNz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ZSBzYW1lIHJ1bGVzIGFzIEppbmphCiAgICAgICAgaW4gdGVtcGxhdGUgImNvbmZpZ3VyYXRpb24gZmlsZXMiIG9yIHNpbWlsYXIgc2l0dWF0aW9ucy4KCiAgICAgICAgRXhhbXBsZSB1c2FnZToKCiAgICAgICAgPj4+IGVudiA9IEVudmlyb25tZW50KCkKICAgICAgICA+Pj4gZXhwciA9IGVudi5jb21waWxlX2V4cHJlc3Npb24oJ2ZvbyA9PSA0MicpCiAgICAgICAgPj4+IGV4cHIoZm9vPTIzKQogICAgICAgIEZhbHNlCiAgICAgICAgPj4+IGV4cHIoZm9vPTQyKQogICAgICAgIFRydWUKCiAgICAgICAgUGVyIGRlZmF1bHQgdGhlIHJldHVybiB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gYE5vbmVgIGlmIHRoZQogICAgICAgIGV4cHJlc3Npb24gcmV0dXJucyBhbiB1bmRlZmluZWQgdmFsdWUuICBUaGlzIGNhbiBiZSBjaGFuZ2VkCiAgICAgICAgYnkgc2V0dGluZyBgdW5kZWZpbmVkX3RvX25vbmVgIHRvIGBGYWxzZWAuCgogICAgICAgID4+PiBlbnYuY29tcGlsZV9leHByZXNzaW9uKCd2YXInKSgpIGlzIE5vbmUKICAgICAgICBUcnVlCiAgICAgICAgPj4+IGVudi5jb21waWxlX2V4cHJlc3Npb24oJ3ZhcicsIHVuZGVmaW5lZF90b19ub25lPUZhbHNlKSgpCiAgICAgICAgVW5kZWZpbmVkCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMQogICAgICAgINoIdmFyaWFibGUpAXLFAAAAehZjaHVuayBhZnRlciBleHByZXNzaW9uTnK8AAAAclMAAADaBXN0b3JlcggAAAApAdoGbGluZW5vKQ9yJgAAAFoQcGFyc2VfZXhwcmVzc2lvbnLHAAAAWgNlb3NyHwAAANoHY3VycmVudHLVAAAAWg9zZXRfZW52aXJvbm1lbnRyvgAAAHIJAAAA2gZBc3NpZ27aBE5hbWXaC2Zyb21fc3RyaW5nckIAAABy0QAAACkHcnsAAAByugAAAHLSAAAA2gZwYXJzZXLaBGV4cHLaBGJvZHnaCHRlbXBsYXRlcj8AAAByPwAAAHJAAAAA2hJjb21waWxlX2V4cHJlc3Npb24CAwAAcxoAAAAAHg4BAgEIAQgBAgEO/wQDDgEMARICGgEUAXoeRW52aXJvbm1lbnQuY29tcGlsZV9leHByZXNzaW9u2ghkZWZsYXRlZCkH2gZ0YXJnZXRyTAAAANoLZmlsdGVyX2Z1bmPaA3ppcNoMbG9nX2Z1bmN0aW9u2g1pZ25vcmVfZXJyb3JzcjwAAABjBwAAAAAAAAAAAAAAEgAAAAsAAAADAAAAc64BAABkAWQCbABtAX0HAQB8BWQDdQByJHQCZANkBJwCZAVkBoQEfQV8BWQDdQFzMEoAggF8AGoDZAN1AXNCSgBkB4MBggF0AnQCZANkCJwDhwCHAYcChwNmBGQJZAqEDH0IiAJkA3UBcqZkC2QMbARtBX0JbQaJAG0HfQptCH0LAQB8CYgBZA10CXwKfAtkDo0CiAIZAIMDiQN8BWQPiAGbAp0CgwEBAG4kdApqC6AMiAGhAXO8dAqgDYgBoQEBAHwFZBCIAZsCnQKDAQEAesZ8AKAOfAJ8A6ECRABdpn0MfABqA6APfAB8DKECXAN9DX0OfQ96FnwAoBB8DXwMfA5kEWQRoQV9EFcAbk4EAHQRkAF5VAEAfREBAHo0fAaQAXMgggB8BWQSfAybAGQTfBGbAJ0EgwEBAFcAWQBkA30RfhFx2FcAWQBkA30RfhFuCmQDfRF+ETAAMAB8B6ASfAyhAX0OfAh8DnwQgwIBAHwFZBR8DJsAZBV8DpsAnQSDAQEAcdhXAIgCkAFyoogDoBOhAAEAbhCIApABcqCIA6AToQABADAAfAVkFoMBAQBkA1MAKRdhMwMAAEZpbmRzIGFsbCB0aGUgdGVtcGxhdGVzIHRoZSBsb2FkZXIgY2FuIGZpbmQsIGNvbXBpbGVzIHRoZW0KICAgICAgICBhbmQgc3RvcmVzIHRoZW0gaW4gYHRhcmdldGAuICBJZiBgemlwYCBpcyBgTm9uZWAsIGluc3RlYWQgb2YgaW4gYQogICAgICAgIHppcGZpbGUsIHRoZSB0ZW1wbGF0ZXMgd2lsbCBiZSBzdG9yZWQgaW4gYSBkaXJlY3RvcnkuCiAgICAgICAgQnkgZGVmYXVsdCBhIGRlZmxhdGUgemlwIGFsZ29yaXRobSBpcyB1c2VkLiBUbyBzd2l0Y2ggdG8KICAgICAgICB0aGUgc3RvcmVkIGFsZ29yaXRobSwgYHppcGAgY2FuIGJlIHNldCB0byBgYCdzdG9yZWQnYGAuCgogICAgICAgIGBleHRlbnNpb25zYCBhbmQgYGZpbHRlcl9mdW5jYCBhcmUgcGFzc2VkIHRvIDptZXRoOmBsaXN0X3RlbXBsYXRlc2AuCiAgICAgICAgRWFjaCB0ZW1wbGF0ZSByZXR1cm5lZCB3aWxsIGJlIGNvbXBpbGVkIHRvIHRoZSB0YXJnZXQgZm9sZGVyIG9yCiAgICAgICAgemlwZmlsZS4KCiAgICAgICAgQnkgZGVmYXVsdCB0ZW1wbGF0ZSBjb21waWxhdGlvbiBlcnJvcnMgYXJlIGlnbm9yZWQuICBJbiBjYXNlIGEKICAgICAgICBsb2cgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGVycm9ycyBhcmUgbG9nZ2VkLiAgSWYgeW91IHdhbnQgdGVtcGxhdGUKICAgICAgICBzeW50YXggZXJyb3JzIHRvIGFib3J0IHRoZSBjb21waWxhdGlvbiB5b3UgY2FuIHNldCBgaWdub3JlX2Vycm9yc2AKICAgICAgICB0byBgRmFsc2VgIGFuZCB5b3Ugd2lsbCBnZXQgYW4gZXhjZXB0aW9uIG9uIHN5bnRheCBlcnJvcnMuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAogICAgICAgIHIIAAAAKQHaDE1vZHVsZUxvYWRlck6pAnKUAAAAcjwAAABjAQAAAAAAAAAAAAAAAQAAAAEAAABTAAAAcwQAAABkAFMAcnUAAAByPwAAAHKTAAAAcj8AAAByPwAAAHJAAAAAcuMAAABNAwAAcwIAAAAAAXozRW52aXJvbm1lbnQuY29tcGlsZV90ZW1wbGF0ZXMuPGxvY2Fscz4ubG9nX2Z1bmN0aW9u+hVObyBsb2FkZXIgY29uZmlndXJlZC4pA3K7AAAA2gRkYXRhcjwAAABjAgAAAAAAAAAAAAAABAAAAAgAAAATAAAAc2gAAACIAnIgiAB8AIMBfQJkAXwCXwCIA6ABfAJ8AaECAQBuRHQCdANqBKAFiAF8AKECZAKDAo8gfQN8A6AGfAGgB2QDoQGhAQEAVwBkAAQABACDAwEAbhAxAHNaMAABAAEAAQBZAAEAZABTACkETmkAAO0B2gJ3YtoEdXRmOCkI2g1leHRlcm5hbF9hdHRy2gh3cml0ZXN0ctoEb3BlbtoCb3PaBHBhdGjaBGpvaW7aBXdyaXRl2gZlbmNvZGUpBHK7AAAAcugAAADaBGluZm/aAWapBNoHWmlwSW5mb3LgAAAAcuIAAADaCHppcF9maWxlcj8AAAByQAAAANoKd3JpdGVfZmlsZVMDAABzDAAAAAABBAEIAQYBDgIWAXoxRW52aXJvbm1lbnQuY29tcGlsZV90ZW1wbGF0ZXMuPGxvY2Fscz4ud3JpdGVfZmlsZXIBAAAAKQTaB1ppcEZpbGVy9gAAANoMWklQX0RFRkxBVEVE2gpaSVBfU1RPUkVE2gF3KQJy3wAAAFoGc3RvcmVkehtDb21waWxpbmcgaW50byBaaXAgYXJjaGl2ZSB6FkNvbXBpbGluZyBpbnRvIGZvbGRlciBUehNDb3VsZCBub3QgY29tcGlsZSAiegMiOiB6CkNvbXBpbGVkICJ6BSIgYXMgehxGaW5pc2hlZCBjb21waWxpbmcgdGVtcGxhdGVzKRTaB2xvYWRlcnNy5QAAAHJOAAAAcnAAAADaB3ppcGZpbGVy+QAAAHL2AAAAcvoAAABy+wAAAHJIAAAAcu4AAABy7wAAANoFaXNkaXLaCG1ha2VkaXJz2g5saXN0X3RlbXBsYXRlc9oKZ2V0X3NvdXJjZXLNAAAAch8AAABaE2dldF9tb2R1bGVfZmlsZW5hbWXaBWNsb3NlKRJyewAAAHLgAAAAckwAAABy4QAAAHLiAAAAcuMAAABy5AAAAHLlAAAAcvgAAABy+QAAAHL6AAAAcvsAAAByngAAAHK6AAAAcrsAAADaAV/aBGNvZGVytAAAAHI/AAAAcvUAAAByQAAAANoRY29tcGlsZV90ZW1wbGF0ZXMvAwAAc0IAAAAAGgwCCAIQAwwBEgIcCQgBGAICARL/BAMQAgwBCgEOAgIBEAEUAQIBFgEQAQYBAgEUASICCgIKARgCBgEK/wYBCgJ6HUVudmlyb25tZW50LmNvbXBpbGVfdGVtcGxhdGVzKQNyTAAAAHLhAAAAcjwAAABjAwAAAAAAAAAAAAAABAAAAAQAAAADAAAAc2YAAAB8AGoAZAF1AXMSSgBkAoMBggF8AGoAoAGhAH0DiABkAXUBckiIAWQBdQFyNHQCZAODAYIBdAN0BGQEnAKHAGYBZAVkBoQMiQGIAWQBdQFyYocBZgFkB2QIhAh8A0QAgwF9A3wDUwApCWGqAgAAUmV0dXJucyBhIGxpc3Qgb2YgdGVtcGxhdGVzIGZvciB0aGlzIGVudmlyb25tZW50LiAgVGhpcyByZXF1aXJlcwogICAgICAgIHRoYXQgdGhlIGxvYWRlciBzdXBwb3J0cyB0aGUgbG9hZGVyJ3MKICAgICAgICA6bWV0aDpgfkJhc2VMb2FkZXIubGlzdF90ZW1wbGF0ZXNgIG1ldGhvZC4KCiAgICAgICAgSWYgdGhlcmUgYXJlIG90aGVyIGZpbGVzIGluIHRoZSB0ZW1wbGF0ZSBmb2xkZXIgYmVzaWRlcyB0aGUKICAgICAgICBhY3R1YWwgdGVtcGxhdGVzLCB0aGUgcmV0dXJuZWQgbGlzdCBjYW4gYmUgZmlsdGVyZWQuICBUaGVyZSBhcmUgdHdvCiAgICAgICAgd2F5czogZWl0aGVyIGBleHRlbnNpb25zYCBpcyBzZXQgdG8gYSBsaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucyBmb3IKICAgICAgICB0ZW1wbGF0ZXMsIG9yIGEgYGZpbHRlcl9mdW5jYCBjYW4gYmUgcHJvdmlkZWQgd2hpY2ggaXMgYSBjYWxsYWJsZSB0aGF0CiAgICAgICAgaXMgcGFzc2VkIGEgdGVtcGxhdGUgbmFtZSBhbmQgc2hvdWxkIHJldHVybiBgVHJ1ZWAgaWYgaXQgc2hvdWxkIGVuZCB1cAogICAgICAgIGluIHRoZSByZXN1bHQgbGlzdC4KCiAgICAgICAgSWYgdGhlIGxvYWRlciBkb2VzIG5vdCBzdXBwb3J0IHRoYXQsIGEgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAogICAgICAgIE5y5wAAAHo8ZWl0aGVyIGV4dGVuc2lvbnMgb3IgZmlsdGVyX2Z1bmMgY2FuIGJlIHBhc3NlZCwgYnV0IG5vdCBib3RocuYAAABjAQAAAAAAAAAAAAAAAQAAAAQAAAATAAAAcxwAAABkAXwAdgBvGnwAoABkAWQCoQJkAhkAiAB2AFMAKQNOcq0AAAByCAAAACkB2gZyc3BsaXRykwAAACkBckwAAAByPwAAAHJAAAAAcuEAAACaAwAAcwIAAAAAAXovRW52aXJvbm1lbnQubGlzdF90ZW1wbGF0ZXMuPGxvY2Fscz4uZmlsdGVyX2Z1bmNjAQAAAAAAAAAAAAAAAgAAAAQAAAATAAAAcxgAAABnAHwAXRB9AYgAfAGDAXIEfAGRAnEEUwByPwAAAHI/AAAAKQLaAi4wcp4AAAApAXLhAAAAcj8AAAByQAAAANoKPGxpc3Rjb21wPp4DAABylgAAAHouRW52aXJvbm1lbnQubGlzdF90ZW1wbGF0ZXMuPGxvY2Fscz4uPGxpc3Rjb21wPikFcnAAAAByAQEAAHKgAAAAck4AAADaBGJvb2wpBHJ7AAAAckwAAABy4QAAANoFbmFtZXNyPwAAACkCckwAAABy4QAAAHJAAAAAcgEBAAB9AwAAcxYAAAAAFBIBCgIIAQgBAgEC/wQEFAMIARICehpFbnZpcm9ubWVudC5saXN0X3RlbXBsYXRlc3oLdGUuTm9SZXR1cm4pAnK6AAAAcjwAAABjAgAAAAAAAAAAAAAAAwAAAAMAAABDAAAAcxoAAABkAWQCbABtAX0CAQB8AnwBZAONAYIBZARTACkFeppFeGNlcHRpb24gaGFuZGxpbmcgaGVscGVyLiAgVGhpcyBpcyB1c2VkIGludGVybmFsbHkgdG8gZWl0aGVyIHJhaXNlCiAgICAgICAgcmV3cml0dGVuIGV4Y2VwdGlvbnMgb3IgcmV0dXJuIGEgcmVuZGVyZWQgdHJhY2ViYWNrIGZvciB0aGUgdGVtcGxhdGUuCiAgICAgICAgcggAAAApAdoXcmV3cml0ZV90cmFjZWJhY2tfc3RhY2tyvAAAAE4pAtoFZGVidWdyDAEAACkDcnsAAAByugAAAHIMAQAAcj8AAAByPwAAAHJAAAAAcr4AAACiAwAAcwQAAAAABAwCehxFbnZpcm9ubWVudC5oYW5kbGVfZXhjZXB0aW9uKQNy3QAAANoGcGFyZW50cjwAAABjAwAAAAAAAAAAAAAAAwAAAAEAAABDAAAAcwQAAAB8AVMAKQFhmgEAAEpvaW4gYSB0ZW1wbGF0ZSB3aXRoIHRoZSBwYXJlbnQuICBCeSBkZWZhdWx0IGFsbCB0aGUgbG9va3VwcyBhcmUKICAgICAgICByZWxhdGl2ZSB0byB0aGUgbG9hZGVyIHJvb3Qgc28gdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYHRlbXBsYXRlYAogICAgICAgIHBhcmFtZXRlciB1bmNoYW5nZWQsIGJ1dCBpZiB0aGUgcGF0aHMgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZQogICAgICAgIHBhcmVudCB0ZW1wbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHJlYWwKICAgICAgICB0ZW1wbGF0ZSBuYW1lLgoKICAgICAgICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCBhbmQgaW1wbGVtZW50IHRlbXBsYXRlIHBhdGgKICAgICAgICBqb2luaW5nIGhlcmUuCiAgICAgICAgcj8AAAApA3J7AAAAct0AAAByDgEAAHI/AAAAcj8AAAByQAAAANoJam9pbl9wYXRoqgMAAHMCAAAAAAp6FUVudmlyb25tZW50LmpvaW5fcGF0aCkDcp4AAAByeQAAAHI8AAAAYwMAAAAAAAAAAAAAAAUAAAAHAAAAQwAAAHOOAAAAfABqAGQAdQByEnQBZAGDAYIBdAKgA3wAagChAXwBZgJ9A3wAagRkAHUBcmB8AGoEoAV8A6EBfQR8BGQAdQFyYHwAagZyTHwEagdyYHwCclx8BGoIoAl8AqEBAQB8BFMAfABqAKAKfAB8AXwAoAt8AqEBoQN9BHwAagRkAHUBcop8BHwAagR8AzwAfARTACkCTnoobm8gbG9hZGVyIGZvciB0aGlzIGVudmlyb25tZW50IHNwZWNpZmllZCkMcnAAAAByoAAAANoHd2Vha3JlZtoDcmVmckYAAAByrgAAAHJyAAAA2g1pc191cF90b19kYXRlcnkAAAByfQAAANoEbG9hZNoMbWFrZV9nbG9iYWxzKQVyewAAAHKeAAAAcnkAAADaCWNhY2hlX2tleXLdAAAAcj8AAAByPwAAAHJAAAAA2g5fbG9hZF90ZW1wbGF0ZbYDAABzIgAAAAAECgEIARABCgEMAQgBBP8CAQT/AgUEAQwCBAIWAgoBCgF6GkVudmlyb25tZW50Ll9sb2FkX3RlbXBsYXRlKQRyngAAAHIOAQAAcnkAAAByPAAAAGMEAAAAAAAAAAAAAAAEAAAABAAAAEMAAABzLgAAAHQAfAF0AYMCcg58AVMAfAJkAXUBciJ8AKACfAF8AqECfQF8AKADfAF8A6ECUwApAmFIBAAATG9hZCBhIHRlbXBsYXRlIGJ5IG5hbWUgd2l0aCA6YXR0cjpgbG9hZGVyYCBhbmQgcmV0dXJuIGEKICAgICAgICA6Y2xhc3M6YFRlbXBsYXRlYC4gSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGV4aXN0IGEKICAgICAgICA6ZXhjOmBUZW1wbGF0ZU5vdEZvdW5kYCBleGNlcHRpb24gaXMgcmFpc2VkLgoKICAgICAgICA6cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgdGVtcGxhdGUgdG8gbG9hZC4gV2hlbiBsb2FkaW5nCiAgICAgICAgICAgIHRlbXBsYXRlcyBmcm9tIHRoZSBmaWxlc3lzdGVtLCAiLyIgaXMgdXNlZCBhcyB0aGUgcGF0aAogICAgICAgICAgICBzZXBhcmF0b3IsIGV2ZW4gb24gV2luZG93cy4KICAgICAgICA6cGFyYW0gcGFyZW50OiBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IHRlbXBsYXRlIGltcG9ydGluZyB0aGlzCiAgICAgICAgICAgIHRlbXBsYXRlLiA6bWV0aDpgam9pbl9wYXRoYCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgbmFtZQogICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbnMgd2l0aCB0aGlzLgogICAgICAgIDpwYXJhbSBnbG9iYWxzOiBFeHRlbmQgdGhlIGVudmlyb25tZW50IDphdHRyOmBnbG9iYWxzYCB3aXRoCiAgICAgICAgICAgIHRoZXNlIGV4dHJhIHZhcmlhYmxlcyBhdmFpbGFibGUgZm9yIGFsbCByZW5kZXJzIG9mIHRoaXMKICAgICAgICAgICAgdGVtcGxhdGUuIElmIHRoZSB0ZW1wbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCBhbmQKICAgICAgICAgICAgY2FjaGVkLCBpdHMgZ2xvYmFscyBhcmUgdXBkYXRlZCB3aXRoIGFueSBuZXcgaXRlbXMuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4wCiAgICAgICAgICAgIElmIGEgdGVtcGxhdGUgaXMgbG9hZGVkIGZyb20gY2FjaGUsIGBgZ2xvYmFsc2BgIHdpbGwgdXBkYXRlCiAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSdzIGdsb2JhbHMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGUgbmV3IHZhbHVlcy4KCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjQKICAgICAgICAgICAgSWYgYGBuYW1lYGAgaXMgYSA6Y2xhc3M6YFRlbXBsYXRlYCBvYmplY3QgaXQgaXMgcmV0dXJuZWQKICAgICAgICAgICAgdW5jaGFuZ2VkLgogICAgICAgIE4pBHJNAAAAckIAAAByDwEAAHIWAQAAKQRyewAAAHKeAAAAcg4BAAByeQAAAHI/AAAAcj8AAAByQAAAANoMZ2V0X3RlbXBsYXRlzwMAAHMKAAAAAB4KAQQBCAEMAnoYRW52aXJvbm1lbnQuZ2V0X3RlbXBsYXRlKQRyCwEAAHIOAQAAcnkAAAByPAAAAGMEAAAAAAAAAAAAAAAFAAAACgAAAEMAAABzhgAAAHQAfAF0AYMCchJ8AaACoQABAHwBcyB0A2QBZAKNAYIBfAFEAF1UfQR0AHwEdASDAnI6fAQCAAEAUwB8AmQDdQFyTnwAoAV8BHwCoQJ9BHoSfACgBnwEfAOhAlcAAgABAFMABAB0B3QIZgJ5dgEAAQABAFkAcSQwAHEkdAN8AYMBggFkA1MAKQRh+AQAAExpa2UgOm1ldGg6YGdldF90ZW1wbGF0ZWAsIGJ1dCB0cmllcyBsb2FkaW5nIG11bHRpcGxlIG5hbWVzLgogICAgICAgIElmIG5vbmUgb2YgdGhlIG5hbWVzIGNhbiBiZSBsb2FkZWQgYSA6ZXhjOmBUZW1wbGF0ZXNOb3RGb3VuZGAKICAgICAgICBleGNlcHRpb24gaXMgcmFpc2VkLgoKICAgICAgICA6cGFyYW0gbmFtZXM6IExpc3Qgb2YgdGVtcGxhdGUgbmFtZXMgdG8gdHJ5IGxvYWRpbmcgaW4gb3JkZXIuCiAgICAgICAgOnBhcmFtIHBhcmVudDogVGhlIG5hbWUgb2YgdGhlIHBhcmVudCB0ZW1wbGF0ZSBpbXBvcnRpbmcgdGhpcwogICAgICAgICAgICB0ZW1wbGF0ZS4gOm1ldGg6YGpvaW5fcGF0aGAgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IG5hbWUKICAgICAgICAgICAgdHJhbnNmb3JtYXRpb25zIHdpdGggdGhpcy4KICAgICAgICA6cGFyYW0gZ2xvYmFsczogRXh0ZW5kIHRoZSBlbnZpcm9ubWVudCA6YXR0cjpgZ2xvYmFsc2Agd2l0aAogICAgICAgICAgICB0aGVzZSBleHRyYSB2YXJpYWJsZXMgYXZhaWxhYmxlIGZvciBhbGwgcmVuZGVycyBvZiB0aGlzCiAgICAgICAgICAgIHRlbXBsYXRlLiBJZiB0aGUgdGVtcGxhdGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQgYW5kCiAgICAgICAgICAgIGNhY2hlZCwgaXRzIGdsb2JhbHMgYXJlIHVwZGF0ZWQgd2l0aCBhbnkgbmV3IGl0ZW1zLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMAogICAgICAgICAgICBJZiBhIHRlbXBsYXRlIGlzIGxvYWRlZCBmcm9tIGNhY2hlLCBgYGdsb2JhbHNgYCB3aWxsIHVwZGF0ZQogICAgICAgICAgICB0aGUgdGVtcGxhdGUncyBnbG9iYWxzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlIG5ldyB2YWx1ZXMuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4xMQogICAgICAgICAgICBJZiBgYG5hbWVzYGAgaXMgOmNsYXNzOmBVbmRlZmluZWRgLCBhbiA6ZXhjOmBVbmRlZmluZWRFcnJvcmAKICAgICAgICAgICAgaXMgcmFpc2VkIGluc3RlYWQuIElmIG5vIHRlbXBsYXRlcyB3ZXJlIGZvdW5kIGFuZCBgYG5hbWVzYGAKICAgICAgICAgICAgY29udGFpbnMgOmNsYXNzOmBVbmRlZmluZWRgLCB0aGUgbWVzc2FnZSBpcyBtb3JlIGhlbHBmdWwuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi40CiAgICAgICAgICAgIElmIGBgbmFtZXNgYCBjb250YWlucyBhIDpjbGFzczpgVGVtcGxhdGVgIG9iamVjdCBpdCBpcwogICAgICAgICAgICByZXR1cm5lZCB1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ZEJkQ4QEWj5kD1MAKUpyQgAAAGFvAgAAQSBjb21waWxlZCB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSByZW5kZXJlZC4KCiAgICBVc2UgdGhlIG1ldGhvZHMgb24gOmNsYXNzOmBFbnZpcm9ubWVudGAgdG8gY3JlYXRlIG9yIGxvYWQgdGVtcGxhdGVzLgogICAgVGhlIGVudmlyb25tZW50IGlzIHVzZWQgdG8gY29uZmlndXJlIGhvdyB0ZW1wbGF0ZXMgYXJlIGNvbXBpbGVkIGFuZAogICAgYmVoYXZlLgoKICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGEgdGVtcGxhdGUgb2JqZWN0IGRpcmVjdGx5LiBUaGlzIGlzCiAgICBub3QgdXN1YWxseSByZWNvbW1lbmRlZC4gVGhlIGNvbnN0cnVjdG9yIHRha2VzIG1vc3Qgb2YgdGhlIHNhbWUKICAgIGFyZ3VtZW50cyBhcyA6Y2xhc3M6YEVudmlyb25tZW50YC4gQWxsIHRlbXBsYXRlcyBjcmVhdGVkIHdpdGggdGhlCiAgICBzYW1lIGVudmlyb25tZW50IGFyZ3VtZW50cyBzaGFyZSB0aGUgc2FtZSBlcGhlbWVyYWwgYGBFbnZpcm9ubWVudGBgCiAgICBpbnN0YW5jZSBiZWhpbmQgdGhlIHNjZW5lcy4KCiAgICBBIHRlbXBsYXRlIG9iamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBpbW11dGFibGUuIE1vZGlmaWNhdGlvbnMgb24KICAgIHRoZSBvYmplY3QgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgICDaEWVudmlyb25tZW50X2NsYXNzcksAAAByeQAAAHKeAAAAcrsAAADaBmJsb2Nrc9oQcm9vdF9yZW5kZXJfZnVuY9oOVGVtcGxhdGVNb2R1bGXaB19tb2R1bGXaC19kZWJ1Z19pbmZv2glfdXB0b2RhdGVyPwAAAFRORnJkAAAAcjMAAAAuKRRyugAAAHJaAAAAcmUAAAByWwAAAHJmAAAAclwAAAByZwAAAHJoAAAAcmkAAAByagAAAHJrAAAAcl0AAABybAAAAHJMAAAAcm0AAAByWQAAAHJuAAAAcm8AAABydAAAAHI8AAAAYxQAAAAAAAAAAAAAABUAAAAY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