ICA8c2VjdDEgaWQ9InJlZ2lzdHJ5Ij4KICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgd3JpdHRlbiBieSBPdmUgS+V2ZW4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vcmVnaXN0cnk8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgoKICAgIDxwYXJhPgogICAgICBBZnRlciBXaW4zLngsIHRoZSByZWdpc3RyeSBiZWNhbWUgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIFdpbmRvd3MuCiAgICAgIEl0IGlzIHRoZSBwbGFjZSB3aGVyZSBib3RoIFdpbmRvd3MgaXRzZWxmLCBhbmQgYWxsCiAgICAgIFdpbjk1Lzk4L05ULzIwMDAvd2hhdGV2ZXItY29tcGxpYW50IGFwcGxpY2F0aW9ucywgc3RvcmUKICAgICAgY29uZmlndXJhdGlvbiBhbmQgc3RhdGUgZGF0YS4gV2hpbGUgbW9zdCBzYW5lIHN5c3RlbQogICAgICBhZG1pbmlzdHJhdG9ycyAoYW5kIFdpbmUgZGV2ZWxvcGVycykgY3Vyc2UgYmFkbHkgYXQgdGhlIHR3aXN0ZWQKICAgICAgbmF0dXJlIG9mIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgZm9yIFdpbmUKICAgICAgdG8gc3VwcG9ydCBpdCBzb21laG93LgogICAgPC9wYXJhPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlJlZ2lzdHJ5IHN0cnVjdHVyZTwvdGl0bGU+CiAgCiAgICAgIDxwYXJhPgogICAgICAgIFRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGlzIGFuIGVsYWJvcmF0ZSB0cmVlIHN0cnVjdHVyZSwgYW5kIG5vdAogICAgICAgIGV2ZW4gbW9zdCBXaW5kb3dzIHByb2dyYW1tZXJzIGFyZSBmdWxseSBhd2FyZSBvZiBob3cgdGhlCiAgICAgICAgcmVnaXN0cnkgaXMgbGFpZCBvdXQsIHdpdGggaXRzIGRpZmZlcmVudCAiaGl2ZXMiIGFuZCBudW1lcm91cwogICAgICAgIGxpbmtzIGJldHdlZW4gdGhlbTsgYSBmdWxsIGNvdmVyYWdlIGlzIG91dCBvZiB0aGUgc2NvcGUgb2YKICAgICAgICB0aGlzIGRvY3VtZW50LiBCdXQgaGVyZSBhcmUgdGhlIGJhc2ljIHJlZ2lzdHJ5IGtleXMgeW91IG1pZ2h0CiAgICAgICAgbmVlZCB0byBrbm93IGFib3V0IGZvciBub3cuCiAgICAgIDwvcGFyYT4KCgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0xPQ0FMX01BQ0hJTkU8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4LCBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgaGlkZGVuIGZpbGUgPGZpbGVuYW1lPnN5c3RlbS5kYXQ8L2ZpbGVuYW1lPikgY29udGFpbnMKICAgICAgICAgICAgICBldmVyeXRoaW5nIHBlcnRhaW5pbmcgdG8gdGhlIGN1cnJlbnQgV2luZG93cwogICAgICAgICAgICAgIGluc3RhbGxhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkhLRVlfVVNFUlM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4LCBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgaGlkZGVuIGZpbGUgPGZpbGVuYW1lPnVzZXIuZGF0PC9maWxlbmFtZT4pIGNvbnRhaW5zCiAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIGZvciBldmVyeSB1c2VyIG9mIHRoZSBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0NMQVNTRVNfUk9PVDwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBpcyBhIGxpbmsgdG8gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXENsYXNzZXMuCiAgICAgICAgICAgICAgSXQgY29udGFpbnMgZGF0YSBkZXNjcmliaW5nIHRoaW5ncyBsaWtlIGZpbGUKICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMsIE9MRSBkb2N1bWVudCBoYW5kbGVycywgYW5kIENPTSBjbGFzc2VzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9DVVJSRU5UX1VTRVI8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfVVNFUlNceW91cl91c2VybmFtZSwgaS5lLiwgeW91cgogICAgICAgICAgICAgIHBlcnNvbmFsIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5Vc2luZyBhIFdpbmRvd3MgcmVnaXN0cnk8L3RpdGxlPgogIAogICAgICA8cGFyYT4KICAgICAgICBJZiB5b3UgcG9pbnQgV2luZSBhdCBhbiBleGlzdGluZyBNUyBXaW5kb3dzIGluc3RhbGxhdGlvbiAoYnkKICAgICAgICBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcmllcyBpbgogICAgICAgIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LCB0aGVuIFdpbmUgaXMgYWJsZSB0byBsb2FkCiAgICAgICAgcmVnaXN0cnkgZGF0YSBmcm9tIGl0LiBIb3dldmVyLCBXaW5lIHdpbGwgbm90IHNhdmUgYW55dGhpbmcgdG8KICAgICAgICB0aGUgcmVhbCBXaW5kb3dzIHJlZ2lzdHJ5LCBidXQgcmF0aGVyIHRvIGl0cyBvd24gcmVnaXN0cnkKICAgICAgICBmaWxlcyAoc2VlIGJlbG93KS4gT2YgY291cnNlLCBpZiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkgdmFsdWUKICAgICAgICBleGlzdHMgaW4gYm90aCB0aGUgV2luZG93cyByZWdpc3RyeSBhbmQgaW4gdGhlIFdpbmUgcmVnaXN0cnksCiAgICAgICAgdGhlbiBXaW5lIHdpbGwgdXNlIHRoZSBsYXR0ZXIuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT2NjYXNpb25hbGx5LCBXaW5lIG1heSBoYXZlIHRyb3VibGUgbG9hZGluZyB0aGUgV2luZG93cwogICAgICAgIHJlZ2lzdHJ5LiBVc3VhbGx5LCB0aGlzIGlzIGJlY2F1c2UgdGhlIHJlZ2lzdHJ5IGlzCiAgICAgICAgaW5jb25zaXN0ZW50IG9yIGRhbWFnZWQgaW4gc29tZSB3YXkuIElmIHRoYXQgYmVjb21lcyBhCiAgICAgICAgcHJvYmxlbSwgeW91IG1heSB3YW50IHRvIGRvd25sb2FkIHRoZQogICAgICAgIDxmaWxlbmFtZT5yZWdjbGVhbi5leGU8L2ZpbGVuYW1lPiBmcm9tIHRoZSBNUyB3ZWJzaXRlIGFuZCB1c2UKICAgICAgICBpdCB0byBjbGVhbiB1cCB0aGUgcmVnaXN0cnkuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWx3YXlzIHVzZQogICAgICAgIDxmaWxlbmFtZT5yZWdlZGl0LmV4ZTwvZmlsZW5hbWU+IHRvIGV4cG9ydCB0aGUgcmVnaXN0cnkgZGF0YQogICAgICAgIHlvdSB3YW50IGludG8gYSB0ZXh0IGZpbGUsIGFuZCB0aGVuIGltcG9ydCBpdCBpbiBXaW5lLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPldpbmUgcmVnaXN0cnkgZGF0YSBmaWxlczwvdGl0bGU+CiAgCiAgICAgIDxwYXJhPgogICAgICAgIEluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIHRoZXJlIGlzIGEgc3ViZGlyZWN0b3J5IG5hbWVkCiAgICAgICAgPGZpbGVuYW1lPi53aW5lPC9maWxlbmFtZT4sIHdoZXJlIFdpbmUgd2lsbCB0cnkgdG8gc2F2ZSBpdHMKICAgICAgICByZWdpc3RyeSBieSBkZWZhdWx0LiBJdCBzYXZlcyBpbnRvIGZvdXIgZmlsZXMsIHdoaWNoIGFyZToKICAgICAgPC9wYXJhPgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPnN5c3RlbS5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfTE9DQUxfTUFDSElORS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT51c2VyLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9DVVJSRU5UX1VTRVIuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+dXNlcmRlZi5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfVVNFUlNcLkRlZmF1bHQgKGkuZS4gdGhlIGRlZmF1bHQKICAgICAgICAgICAgICB1c2VyIHNldHRpbmdzKS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgV2luZSBzYXZlcyBIS0VZX1VTRVJTIHRvIHRoaXMgZmlsZSAoYm90aCBjdXJyZW50IGFuZAogICAgICAgICAgICAgIGRlZmF1bHQgdXNlciksIGJ1dCBkb2VzIG5vdCBsb2FkIGZyb20gaXQsIHVubGVzcwogICAgICAgICAgICAgIDxmaWxlbmFtZT51c2VyZGVmLnJlZzwvZmlsZW5hbWU+IGlzIG1pc3NpbmcuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICA8cGFyYT4KICAgICAgICBBbGwgb2YgdGhlc2UgZmlsZXMgYXJlIGh1bWFuLXJlYWRhYmxlIHRleHQgZmlsZXMsIHNvIHVubGlrZQogICAgICAgIFdpbmRvd3MsIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGFuIG9yZGluYXJ5IHRleHQgZWRpdG9yIG9uIHRoZW0KICAgICAgICBpZiB5b3UgbXVzdC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGVzZSBmaWxlcywgV2luZSBjYW4gYWxzbyBvcHRpb25hbGx5IGxvYWQgZnJvbQogICAgICAgIGdsb2JhbCByZWdpc3RyeSBmaWxlcyByZXNpZGluZyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCiAgICAgICAgZ2xvYmFsIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiAoaS5lLgogICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0YzwvZmlsZW5hbWU+IGlmIHlvdSBjb21waWxlZCBmcm9tCiAgICAgICAgc291cmNlKS4gVGhlc2UgYXJlOgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS5zeXN0ZW1yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+Q29udGFpbnMgSEtFWV9MT0NBTF9NQUNISU5FLjwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+Q29udGFpbnMgSEtFWV9VU0VSUy48L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+U3lzdGVtIGFkbWluaXN0cmF0aW9uPC90aXRsZT4KICAKICAgICAgPHBhcmE+CiAgICAgICAgV2l0aCB0aGUgYWJvdmUgZmlsZSBzdHJ1Y3R1cmUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHN5c3RlbQogICAgICAgIGFkbWluaXN0cmF0b3IgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gc28gdGhhdCBhIHN5c3RlbSBXaW5lCiAgICAgICAgaW5zdGFsbGF0aW9uIChhbmQgYXBwbGljYXRpb25zKSBjYW4gYmUgc2hhcmVkIGJ5IGFsbCB0aGUKICAgICAgICB1c2VycywgYW5kIHN0aWxsIGxldCB0aGUgdXNlcnMgYWxsIGhhdmUgdGhlaXIgb3duIHBlcnNvbmFsaXplZAogICAgICAgIGNvbmZpZ3VyYXRpb24uIEFuIGFkbWluaXN0cmF0b3IgY2FuLCBhZnRlciBoYXZpbmcgaW5zdGFsbGVkCiAgICAgICAgV2luZSBhbmQgYW55IFdpbmRvd3MgYXBwbGljYXRpb24gc29mdHdhcmUgaGUgd2FudHMgdGhlIHVzZXJzCiAgICAgICAgdG8gaGF2ZSBhY2Nlc3MgdG8sIGNvcHkgdGhlIHJlc3VsdGluZwogICAgICAgIDxmaWxlbmFtZT5zeXN0ZW0ucmVnPC9maWxlbmFtZT4gYW5kCiAgICAgICAgPGZpbGVuYW1lPndpbmUudXNlcnJlZzwvZmlsZW5hbWU+IG92ZXIgdG8gdGhlIGdsb2JhbCByZWdpc3RyeQogICAgICAgIGZpbGVzICh3aGljaCB3ZSBhc3N1bWUgd2lsbCByZXNpZGUgaW4KICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGM8L2ZpbGVuYW1lPiBoZXJlKSwgd2l0aDoKICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpjZCB+Ly53aW5lCmNwIHN5c3RlbS5yZWcgL3Vzci9sb2NhbC9ldGMvd2luZS5zeXN0ZW1yZWcKY3Agd2luZS51c2VycmVnIC91c3IvbG9jYWwvZXRjL3dpbmUudXNlcnJlZwogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgYW5kIHBlcmhhcHMgZXZlbiBzeW1saW5rIHRoZXNlIGJhY2sgdG8gdGhlIGFkbWluaXN0cmF0b3IncwogICAgICAgIGFjY291bnQsIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGluc3RhbGwgYXBwcyBzeXN0ZW0td2lkZSBsYXRlcjoKICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpsbiAtc2YgL3Vzci9sb2NhbC9ldGMvd2luZS5zeXN0ZW1yZWcgc3lzdGVtLnJlZwpsbiAtc2YgL3Vzci9sb2NhbC9ldGMvd2luZS51c2VycmVnIHdpbmUudXNlcnJlZwogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgTm90ZSB0aGF0IHRoZSA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBzY3JpcHQKICAgICAgICBhbHJlYWR5IGRvZXMgYWxsIG9mIHRoaXMgZm9yIHlvdSwgaWYgeW91IGluc3RhbGwgV2luZSBzb3VyY2UgYXMgcm9vdC4KICAgICAgICBJZiB5b3UgdGhlbiBpbnN0YWxsIFdpbmRvd3MgYXBwbGljYXRpb25zIHdoaWxlIGxvZ2dlZCBpbiBhcwogICAgICAgIHJvb3QsIGFsbCB5b3VyIHVzZXJzIHdpbGwgYXV0b21hdGljYWxseSBiZSBhYmxlIHRvIHVzZSB0aGVtLgogICAgICAgIFdoaWxlIHRoZSBhcHBsaWNhdGlvbiBzZXR1cCB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGdsb2JhbAogICAgICAgIHJlZ2lzdHJ5LCB0aGUgdXNlcnMnIHBlcnNvbmFsaXplZCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIHNhdmVkCiAgICAgICAgaW4gdGhlaXIgb3duIGhvbWUgZGlyZWN0b3JpZXMuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgQnV0IGJlIGNhcmVmdWwgd2l0aCB3aGF0IHlvdSBkbyB3aXRoIHRoZSBhZG1pbmlzdHJhdG9yIGFjY291bnQKICAgICAgICAtIGlmIHlvdSBkbyBjb3B5IG9yIGxpbmsgdGhlIGFkbWluaXN0cmF0b3IncyByZWdpc3RyeSB0byB0aGUKICAgICAgICBnbG9iYWwgcmVnaXN0cnksIGFueSB1c2VyIG1pZ2h0IGJlIGFibGUgdG8gcmVhZCB0aGUKICAgICAgICBhZG1pbmlzdHJhdG9yJ3MgcHJlZmVyZW5jZXMsIHdoaWNoIG1pZ2h0IG5vdCBiZSBnb29kIGlmCiAgICAgICAgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIChwYXNzd29yZHMsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBldGMpCiAgICAgICAgaXMgc3RvcmVkIHRoZXJlLiBPbmx5IHVzZSB0aGUgYWRtaW5pc3RyYXRvciBhY2NvdW50IHRvIGluc3RhbGwKICAgICAgICBzb2Z0d2FyZSwgbm90IGZvciBkYWlseSB3b3JrOyB1c2UgYW4gb3JkaW5hcnkgdXNlciBhY2NvdW50IGZvcgogICAgICAgIHRoYXQuCiAgICAgIDwvcGFyYT4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+VGhlIGRlZmF1bHQgcmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgQSBXaW5kb3dzIHJlZ2lzdHJ5IGNvbnRhaW5zIG1hbnkga2V5cyBieSBkZWZhdWx0LCBhbmQgc29tZSBvZgogICAgICAgIHRoZW0gYXJlIG5lY2Vzc2FyeSBmb3IgZXZlbiBpbnN0YWxsZXJzIHRvIG9wZXJhdGUgY29ycmVjdGx5LgogICAgICAgIFRoZSBrZXlzIHRoYXQgdGhlIFdpbmUgZGV2ZWxvcGVycyBoYXZlIGZvdW5kIG5lY2Vzc2FyeSB0bwogICAgICAgIGluc3RhbGwgYXBwbGljYXRpb25zIGFyZSBkaXN0cmlidXRlZCBpbiBhIGZpbGUgY2FsbGVkCiAgICAgICAgPGZpbGVuYW1lPndpbmVkZWZhdWx0LnJlZzwvZmlsZW5hbWU+LiBJdCBpcyBhdXRvbWF0aWNhbGx5CiAgICAgICAgaW5zdGFsbGVkIGZvciB5b3UgaWYgeW91IHVzZSB0aGUKICAgICAgICA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIFdpbmUgc291cmNlLAoJYnV0IGlmIHlvdSB3YW50IHRvIGluc3RhbGwgaXQgbWFudWFsbHksIHlvdSBjYW4gZG8gc28gYnkgdXNpbmcgdGhlCiAgICAgICAgPGNvbW1hbmQ+cmVnYXBpPC9jb21tYW5kPiB0b29sIHRvIGJlIGZvdW5kIGluIHRoZQoJPGZpbGVuYW1lPnByb2dyYW1zL3JlZ2FwaS88L2ZpbGVuYW1lPgoJZGlyZWN0b3J5IGluIFdpbmUgc291cmNlLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlRoZSBbcmVnaXN0cnldIHNlY3Rpb248L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgV2l0aCB0aGUgYWJvdmUgaW5mb3JtYXRpb24gZnJlc2ggaW4gbWluZCwgbGV0J3MgbG9vayBhdCB0aGUgCgk8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4vPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4KICAgICAgICBvcHRpb25zIGZvciBoYW5kbGluZyB0aGUgcmVnaXN0cnkuCiAgICAgIDwvcGFyYT4KCiAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkxvYWRHbG9iYWxSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRvIHRyeSB0byBsb2FkIHRoZSBnbG9iYWwgcmVnaXN0cnkKICAgICAgICAgICAgICBmaWxlcywgaWYgdGhleSBleGlzdC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+TG9hZEhvbWVSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRvIHRyeSB0byBsb2FkIHRoZSB1c2VyJ3MgcmVnaXN0cnkKICAgICAgICAgICAgICBmaWxlcyAoaW4gdGhlIDxmaWxlbmFtZT4ud2luZTwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZgogICAgICAgICAgICAgIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkpLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Mb2FkV2luZG93c1JlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgV2luZSB3aWxsIGF0dGVtcHQgdG8gbG9hZCByZWdpc3RyeSBkYXRhCiAgICAgICAgICAgICAgZnJvbSBhIHJlYWwgV2luZG93cyByZWdpc3RyeSBpbiBhbiBleGlzdGluZyBNUyBXaW5kb3dzCiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Xcml0ZXRvSG9tZVJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgcmVnaXN0cnkgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlCiAgICAgICAgICAgICAgdXNlcidzIHJlZ2lzdHJ5IGZpbGVzLiAoQ3VycmVudGx5LCB0aGVyZSBpcyBubwogICAgICAgICAgICAgIGFsdGVybmF0aXZlLCBzbyBpZiB5b3UgdHVybiB0aGlzIG9mZiwgV2luZSBjYW5ub3Qgc2F2ZQogICAgICAgICAgICAgIHRoZSByZWdpc3RyeSBvbiBkaXNrIGF0IGFsbDsgYWZ0ZXIgeW91IGV4aXQgV2luZSwgeW91cgogICAgICAgICAgICAgIGNoYW5nZXMgd2lsbCBiZSBsb3N0LikKICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+VXNlTmV3Rm9ybWF0PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBvYnNvbGV0ZS4gV2luZSBub3cgYWx3YXlzIHVzZXMgdGhlIG5ldwogICAgICAgICAgICAgIGZvcm1hdDsgc3VwcG9ydCBmb3IgdGhlIG9sZCBmb3JtYXQgd2FzIHJlbW92ZWQgYSB3aGlsZQogICAgICAgICAgICAgIGFnby4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+UGVyaW9kaWNTYXZlPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlLCBpdCBzcGVjaWZpZXMKICAgICAgICAgICAgICB0aGF0IHlvdSB3YW50IHRoZSByZWdpc3RyeSB0byBiZSBzYXZlZCB0byBkaXNrIGF0IHRoZQogICAgICAgICAgICAgIGdpdmVuIGludGVydmFsLiBJZiBpdCBpcyBub3Qgc2V0LCB0aGUgcmVnaXN0cnkgd2lsbCBvbmx5CiAgICAgICAgICAgICAgYmUgc2F2ZWQgdG8gZGlzayB3aGVuIHRoZSB3aW5lc2VydmVyIHRlcm1pbmF0ZXMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPlNhdmVPbmx5VXBkYXRlZEtleXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdGhlIGVudGlyZSByZWdpc3RyeSBpcyBzYXZlZCB0byB0aGUKICAgICAgICAgICAgICB1c2VyJ3MgcmVnaXN0cnkgZmlsZXMsIG9yIG9ubHkgc3Via2V5cyB0aGUgdXNlciBoYXZlCiAgICAgICAgICAgICAgYWN0dWFsbHkgY2hhbmdlZC4gQ29uc2lkZXJpbmcgdGhhdCB0aGUgdXNlcidzIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHJlZ2lzdHJ5IGZpbGVzIGFuZCBXaW5kb3dzCiAgICAgICAgICAgICAgcmVnaXN0cnkgZmlsZXMsIGl0IHVzdWFsbHkgbWFrZXMgc2Vuc2UgdG8gb25seSBzYXZlCiAgICAgICAgICAgICAgdXNlci1tb2RpZmllZCBzdWJrZXlzOyB0aGF0IHdheSwgY2hhbmdlcyB0byB0aGUgcmVzdCBvZgogICAgICAgICAgICAgIHRoZSBnbG9iYWwgb3IgV2luZG93cyByZWdpc3RyaWVzIHdpbGwgc3RpbGwgYWZmZWN0IHRoZQogICAgICAgICAgICAgIHVzZXIuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KICA8L3NlY3QxPgoKPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCkxvY2FsIHZhcmlhYmxlczoKbW9kZTogc2dtbApzZ21sLXBhcmVudC1kb2N1bWVudDooImNvbmZpZ3VyaW5nLnNnbWwiICJjaGFwdGVyIiAic2VjdDEiICIiKQpFbmQ6Ci0tPgo=