ICA8c2VjdDEgaWQ9InJlZ2lzdHJ5Ij4KICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgd3JpdHRlbiBieSBPdmUgS+V2ZW4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vcmVnaXN0cnk8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgoKICAgIDxwYXJhPgogICAgICBBZnRlciBXaW4zLngsIHRoZSByZWdpc3RyeSBiZWNhbWUgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIFdpbmRvd3MuCiAgICAgIEl0IGlzIHRoZSBwbGFjZSB3aGVyZSBib3RoIFdpbmRvd3MgaXRzZWxmLCBhbmQgYWxsCiAgICAgIFdpbjk1Lzk4L05ULzIwMDAvd2hhdGV2ZXItY29tcGxpYW50IGFwcGxpY2F0aW9ucywgc3RvcmUKICAgICAgY29uZmlndXJhdGlvbiBhbmQgc3RhdGUgZGF0YS4gV2hpbGUgbW9zdCBzYW5lIHN5c3RlbQogICAgICBhZG1pbmlzdHJhdG9ycyAoYW5kIFdpbmUgZGV2ZWxvcGVycykgY3Vyc2UgYmFkbHkgYXQgdGhlIHR3aXN0ZWQKICAgICAgbmF0dXJlIG9mIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgZm9yIFdpbmUKICAgICAgdG8gc3VwcG9ydCBpdCBzb21laG93LgogICAgPC9wYXJhPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlJlZ2lzdHJ5IHN0cnVjdHVyZTwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBUaGUgV2luZG93cyByZWdpc3RyeSBpcyBhbiBlbGFib3JhdGUgdHJlZSBzdHJ1Y3R1cmUsIGFuZCBub3QKICAgICAgICBldmVuIG1vc3QgV2luZG93cyBwcm9ncmFtbWVycyBhcmUgZnVsbHkgYXdhcmUgb2YgaG93IHRoZQogICAgICAgIHJlZ2lzdHJ5IGlzIGxhaWQgb3V0LCB3aXRoIGl0cyBkaWZmZXJlbnQgImhpdmVzIiBhbmQgbnVtZXJvdXMKICAgICAgICBsaW5rcyBiZXR3ZWVuIHRoZW07IGEgZnVsbCBjb3ZlcmFnZSBpcyBvdXQgb2YgdGhlIHNjb3BlIG9mCiAgICAgICAgdGhpcyBkb2N1bWVudC4gQnV0IGhlcmUgYXJlIHRoZSBiYXNpYyByZWdpc3RyeSBrZXlzIHlvdSBtaWdodAogICAgICAgIG5lZWQgdG8ga25vdyBhYm91dCBmb3Igbm93LgogICAgICA8L3BhcmE+CgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9MT0NBTF9NQUNISU5FPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZ1bmRhbWVudGFsIHJvb3Qga2V5IChpbiB3aW45eCBpdCdzIHN0b3JlZCBpbiB0aGUKICAgICAgICAgICAgICBoaWRkZW4gZmlsZSA8ZmlsZW5hbWU+c3lzdGVtLmRhdDwvZmlsZW5hbWU+KSBjb250YWlucwogICAgICAgICAgICAgIGV2ZXJ5dGhpbmcgcGVydGFpbmluZyB0byB0aGUgY3VycmVudCBXaW5kb3dzCiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX1VTRVJTPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZ1bmRhbWVudGFsIHJvb3Qga2V5IChpbiB3aW45eCBpdCdzIHN0b3JlZCBpbiB0aGUKICAgICAgICAgICAgICBoaWRkZW4gZmlsZSA8ZmlsZW5hbWU+dXNlci5kYXQ8L2ZpbGVuYW1lPikgY29udGFpbnMKICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRhdGEgZm9yIGV2ZXJ5IHVzZXIgb2YgdGhlIGluc3RhbGxhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9DTEFTU0VTX1JPT1Q8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxDbGFzc2VzLgogICAgICAgICAgICAgIEl0IGNvbnRhaW5zIGRhdGEgZGVzY3JpYmluZyB0aGluZ3MgbGlrZSBmaWxlCiAgICAgICAgICAgICAgYXNzb2NpYXRpb25zLCBPTEUgZG9jdW1lbnQgaGFuZGxlcnMsIGFuZCBDT00gY2xhc3Nlcy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9DVVJSRU5UX1VTRVI8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfVVNFUlNceW91cl91c2VybmFtZSwgaS5lLiwgeW91cgogICAgICAgICAgICAgIHBlcnNvbmFsIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5Vc2luZyBhIFdpbmRvd3MgcmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgSWYgeW91IHBvaW50IFdpbmUgYXQgYW4gZXhpc3RpbmcgTVMgV2luZG93cyBpbnN0YWxsYXRpb24gKGJ5CiAgICAgICAgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3JpZXMgaW4KICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiwgdGhlbiBXaW5lIGlzIGFibGUgdG8gbG9hZAogICAgICAgIHJlZ2lzdHJ5IGRhdGEgZnJvbSBpdC4gSG93ZXZlciwgV2luZSB3aWxsIG5vdCBzYXZlIGFueXRoaW5nIHRvCiAgICAgICAgdGhlIHJlYWwgV2luZG93cyByZWdpc3RyeSwgYnV0IHJhdGhlciB0byBpdHMgb3duIHJlZ2lzdHJ5CiAgICAgICAgZmlsZXMgKHNlZSBiZWxvdykuIE9mIGNvdXJzZSwgaWYgYSBwYXJ0aWN1bGFyIHJlZ2lzdHJ5IHZhbHVlCiAgICAgICAgZXhpc3RzIGluIGJvdGggdGhlIFdpbmRvd3MgcmVnaXN0cnkgYW5kIGluIHRoZSBXaW5lIHJlZ2lzdHJ5LAogICAgICAgIHRoZW4gV2luZSB3aWxsIHVzZSB0aGUgbGF0dGVyLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIE9jY2FzaW9uYWxseSwgV2luZSBtYXkgaGF2ZSB0cm91YmxlIGxvYWRpbmcgdGhlIFdpbmRvd3MKICAgICAgICByZWdpc3RyeS4gVXN1YWxseSwgdGhpcyBpcyBiZWNhdXNlIHRoZSByZWdpc3RyeSBpcwogICAgICAgIGluY29uc2lzdGVudCBvciBkYW1hZ2VkIGluIHNvbWUgd2F5LiBJZiB0aGF0IGJlY29tZXMgYQogICAgICAgIHByb2JsZW0sIHlvdSBtYXkgd2FudCB0byBkb3dubG9hZCB0aGUKICAgICAgICA8ZmlsZW5hbWU+cmVnY2xlYW4uZXhlPC9maWxlbmFtZT4gZnJvbSB0aGUgTVMgd2Vic2l0ZSBhbmQgdXNlCiAgICAgICAgaXQgdG8gY2xlYW4gdXAgdGhlIHJlZ2lzdHJ5LiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsd2F5cyB1c2UKICAgICAgICA8ZmlsZW5hbWU+cmVnZWRpdC5leGU8L2ZpbGVuYW1lPiB0byBleHBvcnQgdGhlIHJlZ2lzdHJ5IGRhdGEKICAgICAgICB5b3Ugd2FudCBpbnRvIGEgdGV4dCBmaWxlLCBhbmQgdGhlbiBpbXBvcnQgaXQgaW4gV2luZS4KICAgICAgPC9wYXJhPgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5XaW5lIHJlZ2lzdHJ5IGRhdGEgZmlsZXM8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgSW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSBzdWJkaXJlY3RvcnkgbmFtZWQKICAgICAgICA8ZmlsZW5hbWU+LndpbmU8L2ZpbGVuYW1lPiwgd2hlcmUgV2luZSB3aWxsIHRyeSB0byBzYXZlIGl0cwogICAgICAgIHJlZ2lzdHJ5IGJ5IGRlZmF1bHQuIEl0IHNhdmVzIGludG8gZm91ciBmaWxlcywgd2hpY2ggYXJlOgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+c3lzdGVtLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9MT0NBTF9NQUNISU5FLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+dXNlci5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfQ1VSUkVOVF9VU0VSLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+dXNlcmRlZi5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfVVNFUlNcLkRlZmF1bHQgKGkuZS4gdGhlIGRlZmF1bHQKICAgICAgICAgICAgICB1c2VyIHNldHRpbmdzKS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPndpbmUudXNlcnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBXaW5lIHNhdmVzIEhLRVlfVVNFUlMgdG8gdGhpcyBmaWxlIChib3RoIGN1cnJlbnQgYW5kCiAgICAgICAgICAgICAgZGVmYXVsdCB1c2VyKSwgYnV0IGRvZXMgbm90IGxvYWQgZnJvbSBpdCwgdW5sZXNzCiAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJkZWYucmVnPC9maWxlbmFtZT4gaXMgbWlzc2luZy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgIDxwYXJhPgogICAgICAgIEFsbCBvZiB0aGVzZSBmaWxlcyBhcmUgaHVtYW4tcmVhZGFibGUgdGV4dCBmaWxlcywgc28gdW5saWtlCiAgICAgICAgV2luZG93cywgeW91IGNhbiBhY3R1YWxseSB1c2UgYW4gb3JkaW5hcnkgdGV4dCBlZGl0b3Igb24gdGhlbQogICAgICAgIGlmIHlvdSB3YW50IChtYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgV2luZSBydW5uaW5nIHdoZW4gbW9kaWZ5aW5nCgl0aGVtLCBvdGhlcndpc2UgeW91ciBjaGFuZ2VzIHdpbGwgYmUgZGlzY2FyZGVkKS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBGSVhNRTogZ2xvYmFsIGNvbmZpZyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkLgoKICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGVzZSBmaWxlcywgV2luZSBjYW4gYWxzbyBvcHRpb25hbGx5IGxvYWQgZnJvbQogICAgICAgIGdsb2JhbCByZWdpc3RyeSBmaWxlcyByZXNpZGluZyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCiAgICAgICAgZ2xvYmFsIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiAoaS5lLgogICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0YzwvZmlsZW5hbWU+IGlmIHlvdSBjb21waWxlZCBmcm9tCiAgICAgICAgc291cmNlKS4gVGhlc2UgYXJlOgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS5zeXN0ZW1yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+Q29udGFpbnMgSEtFWV9MT0NBTF9NQUNISU5FLjwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+Q29udGFpbnMgSEtFWV9VU0VSUy48L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+U3lzdGVtIGFkbWluaXN0cmF0aW9uPC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIFdpdGggdGhlIGFib3ZlIGZpbGUgc3RydWN0dXJlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBzeXN0ZW0KICAgICAgICBhZG1pbmlzdHJhdG9yIHRvIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIHNvIHRoYXQgYSBzeXN0ZW0gV2luZQogICAgICAgIGluc3RhbGxhdGlvbiAoYW5kIGFwcGxpY2F0aW9ucykgY2FuIGJlIHNoYXJlZCBieSBhbGwgdGhlCiAgICAgICAgdXNlcnMsIGFuZCBzdGlsbCBsZXQgdGhlIHVzZXJzIGFsbCBoYXZlIHRoZWlyIG93biBwZXJzb25hbGl6ZWQKICAgICAgICBjb25maWd1cmF0aW9uLiBBbiBhZG1pbmlzdHJhdG9yIGNhbiwgYWZ0ZXIgaGF2aW5nIGluc3RhbGxlZAogICAgICAgIFdpbmUgYW5kIGFueSBXaW5kb3dzIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhlIHdhbnRzIHRoZSB1c2VycwogICAgICAgIHRvIGhhdmUgYWNjZXNzIHRvLCBjb3B5IHRoZSByZXN1bHRpbmcKICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtLnJlZzwvZmlsZW5hbWU+IGFuZAogICAgICAgIDxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPiBvdmVyIHRvIHRoZSBnbG9iYWwgcmVnaXN0cnkKICAgICAgICBmaWxlcyAod2hpY2ggd2UgYXNzdW1lIHdpbGwgcmVzaWRlIGluCiAgICAgICAgPGZpbGVuYW1lPi91c3IvbG9jYWwvZXRjPC9maWxlbmFtZT4gaGVyZSksIHdpdGg6CiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4KY2Qgfi8ud2luZQpjcCBzeXN0ZW0ucmVnIC91c3IvbG9jYWwvZXRjL3dpbmUuc3lzdGVtcmVnCmNwIHdpbmUudXNlcnJlZyAvdXNyL2xvY2FsL2V0Yy93aW5lLnVzZXJyZWcKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGFuZCBwZXJoYXBzIGV2ZW4gc3ltbGluayB0aGVzZSBiYWNrIHRvIHRoZSBhZG1pbmlzdHJhdG9yJ3MKICAgICAgICBhY2NvdW50LCB0byBtYWtlIGl0IGVhc2llciB0byBpbnN0YWxsIGFwcHMgc3lzdGVtLXdpZGUgbGF0ZXI6CiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4KbG4gLXNmIC91c3IvbG9jYWwvZXRjL3dpbmUuc3lzdGVtcmVnIHN5c3RlbS5yZWcKbG4gLXNmIC91c3IvbG9jYWwvZXRjL3dpbmUudXNlcnJlZyB3aW5lLnVzZXJyZWcKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIE5vdGUgdGhhdCB0aGUgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4gc2NyaXB0CiAgICAgICAgYWxyZWFkeSBkb2VzIGFsbCBvZiB0aGlzIGZvciB5b3UsIGlmIHlvdSBpbnN0YWxsIFdpbmUgc291cmNlIGFzIHJvb3QuCiAgICAgICAgSWYgeW91IHRoZW4gaW5zdGFsbCBXaW5kb3dzIGFwcGxpY2F0aW9ucyB3aGlsZSBsb2dnZWQgaW4gYXMKICAgICAgICByb290LCBhbGwgeW91ciB1c2VycyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWJsZSB0byB1c2UgdGhlbS4KICAgICAgICBXaGlsZSB0aGUgYXBwbGljYXRpb24gc2V0dXAgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBnbG9iYWwKICAgICAgICByZWdpc3RyeSwgdGhlIHVzZXJzJyBwZXJzb25hbGl6ZWQgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBzYXZlZAogICAgICAgIGluIHRoZWlyIG93biBob21lIGRpcmVjdG9yaWVzLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEJ1dCBiZSBjYXJlZnVsIHdpdGggd2hhdCB5b3UgZG8gd2l0aCB0aGUgYWRtaW5pc3RyYXRvciBhY2NvdW50CiAgICAgICAgLSBpZiB5b3UgZG8gY29weSBvciBsaW5rIHRoZSBhZG1pbmlzdHJhdG9yJ3MgcmVnaXN0cnkgdG8gdGhlCiAgICAgICAgZ2xvYmFsIHJlZ2lzdHJ5LCBhbnkgdXNlciBtaWdodCBiZSBhYmxlIHRvIHJlYWQgdGhlCiAgICAgICAgYWRtaW5pc3RyYXRvcidzIHByZWZlcmVuY2VzLCB3aGljaCBtaWdodCBub3QgYmUgZ29vZCBpZgogICAgICAgIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiAocGFzc3dvcmRzLCBwZXJzb25hbCBpbmZvcm1hdGlvbiwgZXRjKQogICAgICAgIGlzIHN0b3JlZCB0aGVyZS4gT25seSB1c2UgdGhlIGFkbWluaXN0cmF0b3IgYWNjb3VudCB0byBpbnN0YWxsCiAgICAgICAgc29mdHdhcmUsIG5vdCBmb3IgZGFpbHkgd29yazsgdXNlIGFuIG9yZGluYXJ5IHVzZXIgYWNjb3VudCBmb3IKICAgICAgICB0aGF0LgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlRoZSBkZWZhdWx0IHJlZ2lzdHJ5PC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIEEgV2luZG93cyByZWdpc3RyeSBjb250YWlucyBtYW55IGtleXMgYnkgZGVmYXVsdCwgYW5kIHNvbWUgb2YKICAgICAgICB0aGVtIGFyZSBuZWNlc3NhcnkgZm9yIGV2ZW4gaW5zdGFsbGVycyB0byBvcGVyYXRlIGNvcnJlY3RseS4KICAgICAgICBUaGUga2V5cyB0aGF0IHRoZSBXaW5lIGRldmVsb3BlcnMgaGF2ZSBmb3VuZCBuZWNlc3NhcnkgdG8KICAgICAgICBpbnN0YWxsIGFwcGxpY2F0aW9ucyBhcmUgZGlzdHJpYnV0ZWQgaW4gYSBmaWxlIGNhbGxlZAogICAgICAgIDxmaWxlbmFtZT53aW5lZGVmYXVsdC5yZWc8L2ZpbGVuYW1lPi4gSXQgaXMgYXV0b21hdGljYWxseQogICAgICAgIGluc3RhbGxlZCBmb3IgeW91IGlmIHlvdSB1c2UgdGhlCiAgICAgICAgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4gc2NyaXB0IGluIHRoZSBXaW5lIHNvdXJjZSwKCWJ1dCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIGl0IG1hbnVhbGx5LCB5b3UgY2FuIGRvIHNvIGJ5IHVzaW5nIHRoZQogICAgICAgIDxjb21tYW5kPnJlZ2FwaTwvY29tbWFuZD4gdG9vbCB0byBiZSBmb3VuZCBpbiB0aGUKCTxmaWxlbmFtZT5wcm9ncmFtcy9yZWdhcGkvPC9maWxlbmFtZT4KCWRpcmVjdG9yeSBpbiBXaW5lIHNvdXJjZS4KICAgICAgPC9wYXJhPgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5UaGUgW3JlZ2lzdHJ5XSBzZWN0aW9uPC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIFdpdGggdGhlIGFib3ZlIGluZm9ybWF0aW9uIGZyZXNoIGluIG1pbmQsIGxldCdzIGxvb2sgYXQgdGhlCgk8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gLyA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPgogICAgICAgIG9wdGlvbnMgZm9yIGhhbmRsaW5nIHRoZSByZWdpc3RyeS4KICAgICAgPC9wYXJhPgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgoJICA8dGVybT5HbG9iYWxSZWdpc3RyeURpcjwvdGVybT4KCSAgPGxpc3RpdGVtPgoJICAgIDxwYXJhPgoJICAgICAgT3B0aW9uYWwuICBTZXRzIHRoZSBwYXRoIHRvIGxvb2sgZm9yIHRoZSBHbG9iYWwKCSAgICAgIFJlZ2lzdHJ5LgoJICAgIDwvcGFyYT4KCSAgPC9saXN0aXRlbT4KCTwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Mb2FkR2xvYmFsUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0byB0cnkgdG8gbG9hZCB0aGUgZ2xvYmFsIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgZmlsZXMsIGlmIHRoZXkgZXhpc3QuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkxvYWRIb21lUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0byB0cnkgdG8gbG9hZCB0aGUgdXNlcidzIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgZmlsZXMgKGluIHRoZSA8ZmlsZW5hbWU+LndpbmU8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YKICAgICAgICAgICAgICB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5KS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+TG9hZFdpbmRvd3NSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIFdpbmUgd2lsbCBhdHRlbXB0IHRvIGxvYWQgcmVnaXN0cnkgZGF0YQogICAgICAgICAgICAgIGZyb20gYSByZWFsIFdpbmRvd3MgcmVnaXN0cnkgaW4gYW4gZXhpc3RpbmcgTVMgV2luZG93cwogICAgICAgICAgICAgIGluc3RhbGxhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+V3JpdGV0b0hvbWVSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHJlZ2lzdHJ5IGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIHRoZQogICAgICAgICAgICAgIHVzZXIncyByZWdpc3RyeSBmaWxlcy4gKEN1cnJlbnRseSwgdGhlcmUgaXMgbm8KICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSwgc28gaWYgeW91IHR1cm4gdGhpcyBvZmYsIFdpbmUgY2Fubm90IHNhdmUKICAgICAgICAgICAgICB0aGUgcmVnaXN0cnkgb24gZGlzayBhdCBhbGw7IGFmdGVyIHlvdSBleGl0IFdpbmUsIHlvdXIKICAgICAgICAgICAgICBjaGFuZ2VzIHdpbGwgYmUgbG9zdC4pCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPlNhdmVPbmx5VXBkYXRlZEtleXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdGhlIGVudGlyZSByZWdpc3RyeSBpcyBzYXZlZCB0byB0aGUKICAgICAgICAgICAgICB1c2VyJ3MgcmVnaXN0cnkgZmlsZXMsIG9yIG9ubHkgc3Via2V5cyB0aGUgdXNlciBoYXZlCiAgICAgICAgICAgICAgYWN0dWFsbHkgY2hhbmdlZC4gQ29uc2lkZXJpbmcgdGhhdCB0aGUgdXNlcidzIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHJlZ2lzdHJ5IGZpbGVzIGFuZCBXaW5kb3dzCiAgICAgICAgICAgICAgcmVnaXN0cnkgZmlsZXMsIGl0IHVzdWFsbHkgbWFrZXMgc2Vuc2UgdG8gb25seSBzYXZlCiAgICAgICAgICAgICAgdXNlci1tb2RpZmllZCBzdWJrZXlzOyB0aGF0IHdheSwgY2hhbmdlcyB0byB0aGUgcmVzdCBvZgogICAgICAgICAgICAgIHRoZSBnbG9iYWwgb3IgV2luZG93cyByZWdpc3RyaWVzIHdpbGwgc3RpbGwgYWZmZWN0IHRoZQogICAgICAgICAgICAgIHVzZXIuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPlBlcmlvZGljU2F2ZTwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSwgaXQgc3BlY2lmaWVzCiAgICAgICAgICAgICAgdGhhdCB5b3Ugd2FudCB0aGUgcmVnaXN0cnkgdG8gYmUgc2F2ZWQgdG8gZGlzayBhdCB0aGUKICAgICAgICAgICAgICBnaXZlbiBpbnRlcnZhbC4gSWYgaXQgaXMgbm90IHNldCwgdGhlIHJlZ2lzdHJ5IHdpbGwgb25seQogICAgICAgICAgICAgIGJlIHNhdmVkIHRvIGRpc2sgd2hlbiB0aGUgd2luZXNlcnZlciB0ZXJtaW5hdGVzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Vc2VOZXdGb3JtYXQ8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ic29sZXRlLiBXaW5lIG5vdyBhbHdheXMgdXNlcyB0aGUgbmV3CiAgICAgICAgICAgICAgZm9ybWF0OyBzdXBwb3J0IGZvciB0aGUgb2xkIGZvcm1hdCB3YXMgcmVtb3ZlZCBhIHdoaWxlCiAgICAgICAgICAgICAgYWdvLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgIDwvc2VjdDI+CiAgPC9zZWN0MT4KCjwhLS0gS2VlcCB0aGlzIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQpMb2NhbCB2YXJpYWJsZXM6Cm1vZGU6IHNnbWwKc2dtbC1wYXJlbnQtZG9jdW1lbnQ6KCJjb25maWd1cmluZy5zZ21sIiAiY2hhcHRlciIgInNlY3QxIiAiIikKRW5kOgotLT4K