ICA8Y2hhcHRlciBpZD0iY29uZmlndXJpbmciPgogICAgPHRpdGxlPkNvbmZpZ3VyaW5nIFdpbmU8L3RpdGxlPgogICAgPHBhcmE+U2V0dGluZyB1cCBjb25maWcgZmlsZXMsIGV0Yy48L3BhcmE+CgogICAgPHNlY3QxIGlkPSJjb25maWciPgogICAgICA8dGl0bGU+R2VuZXJhbCBDb25maWd1cmF0aW9uPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgQ29weXJpZ2h0IDE5OTkgJm5hbWUtYWRhbS1zYWNhcm55OyA8ZW1haWw+JmVtYWlsLWFkYW0tc2FjYXJueTs8L2VtYWlsPgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2NvbmZpZzwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPlRoZSBXaW5lIENvbmZpZyBGaWxlPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBXaW5lIGNvbmZpZyBmaWxlIHN0b3JlcyB2YXJpb3VzIHNldHRpbmdzIGZvciBXaW5lLiBUaGVzZSBpbmNsdWRlOgogICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgRHJpdmVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGVtCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBEaXJlY3Rvcnkgc2V0dGluZ3MKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFBvcnQgc2V0dGluZ3MKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFRoZSBXaW5lIGxvb2sgYW5kIGZlZWwKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFdpbmUncyBETEwgdXNhZ2UKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFdpbmUncyBtdWx0aW1lZGlhIGRyaXZlcnMgYW5kIERMTCBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Ib3cgRG8gSSBNYWtlIE9uZT88L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhpcyBzZWN0aW9uIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgbWFraW5nIGEKICAgICAgICAgIGNvbmZpZyBmaWxlLiBUYWtlIGEgbG9vayBhdCB0aGUgZmlsZSA8ZmlsZW5hbWU+Jmx0O2RpcnMgdG8KICAgICAgICAgIHdpbmU+L2RvY3VtZW50YXRpb24vc2FtcGxlcy9jb25maWc8L2ZpbGVuYW1lPi4gSXQgaXMgb3JnYW5pemVkIGJ5IHNlY3Rpb24uCiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlNlY3Rpb24gTmFtZTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TmVlZGVkPzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCBpdCBEb2VzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0RyaXZlIFhdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNldHMgdXAgZHJpdmVzIHJlY29nbml6ZWQgYnkgd2luZTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bd2luZV08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnllczwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+U2V0dGluZ3MgZm9yIHdpbmUgZGlyZWN0b3JpZXM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0RsbERlZmF1bHRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkRlZmF1bHRzIGZvciBsb2FkaW5nIERMTCdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEbGxQYWlyc108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlY21kPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5TYW5pdHkgY2hlY2tlcnMgZm9yIERMTCdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEbGxPdmVycmlkZXNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5yZWNtZDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+T3ZlcmlkZXMgZGVmYXVsdHMgZm9yIERMTCBsb2FkaW5nPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5Plt4MTFkcnZdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5yZWNtZDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+R3JhcGhpYyBkcml2ZXIgc2V0dGluZ3M8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W2ZvbnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Gb250IGFwcGVhcmFuY2UgYW5kIHJlY29nbml0aW9uPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltzZXJpYWxwb3J0c108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5DT00gcG9ydHMgc2VlbiBieSB3aW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltwYXJhbGxlbHBvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkxQVCBwb3J0cyBzZWVuIGJ5IHdpbmU8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BwZGV2XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlBhcmFsbGVscG9ydCBlbXVsYXRpb248L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3Nwb29sZXJdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UHJpbnQgc3Bvb2xpbmc8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkRpcmVjdCBwb3J0IGFjY2VzczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bRGVidWddPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCB0byBkbyB3aXRoIGNlcnRhaW4gZGVidWcgbWVzc2FnZXM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W1JlZ2lzdHJ5XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNwZWNpZmllcyBsb2NhdGlvbnMgb2Ygd2luZG93cyByZWdpc3RyeSBmaWxlczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bdHdlYWsubGF5b3V0XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkFwcGVhcmFuY2Ugb2Ygd2luZTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bcHJvZ3JhbXNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UHJvZ3JhbXMgdG8gYmUgcnVuIGF1dG9tYXRpY2FsbHk8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0NvbnNvbGVdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+Q29uc29sZSBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bQ2xpcGJvYXJkXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkludGVyYWN0aW9uIGZvciB3aW5lIGFuZCBYMTEgY2xpcGJvYXJkPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlthZm1kaXJzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlBvc3RzY3JpcHQgZHJpdmVyIHNldHRpbmdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltXaW5NTV08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnllczwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TXVsdGltZWRpYSBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bQXBwRGVmYXVsdHNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+T3ZlcndyaXRlIHRoZSBzZXR0aW5ncyBvZiBwcmV2aW91cyBzZWN0aW9ucyBmb3Igc3BlY2lhbCBwcm9ncmFtczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3Rncm91cD4KICAgICAgICA8L2luZm9ybWFsdGFibGU+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RyaXZlIFhdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CgkgICAgVGhlc2Ugc2VjdGlvbnMgYXJlIHN1cHBvc2VkIHRvIG1ha2UgY2VydGFpbiBVbml4CgkgICAgZGlyZWN0b3J5IGxvY2F0aW9ucyBhY2Nlc3NpYmxlIHRvIFdpbmUgYXMgYSBET1MvV2luZG93cyBkcml2ZQoJICAgIChkcml2ZSAnWDonKSBhbmQgdGh1cyBhY2Nlc3NpYmxlIHRvIFdpbmRvd3MgcHJvZ3JhbXMKCSAgICB1bmRlciB0aGUgZHJpdmUgbmFtZSB5b3Ugc3BlY2lmaWVkLgoJICAgIEV2ZXJ5IERPUy9XaW5kb3dzIHByb2dyYW0gc29ydCBvZiBleHBlY3RzIGF0IGxlYXN0IGEgQzogZHJpdmUgKGFuZAoJICAgIHNvbWV0aW1lcyBhbHNvIGFuIEE6IGZsb3BweSBkcml2ZSksIHNvIHlvdXIgY29uZmlnIGZpbGUgc2hvdWxkCgkgICAgYXQgbGVhc3QgY29udGFpbiB0aGUgY29ycmVzcG9uZGluZyBzZWN0aW9ucywgW0RyaXZlIENdIGFuZAoJICAgIFtEcml2ZSBBXS4KCSAgICBZb3UgbmVlZCB0byBkZWNpZGUgb24gd2hldGhlciB5b3Ugd2FudCB0byB1c2UgYW4gZXhpc3RpbmcgV2luZG93cwoJICAgIHBhcnRpdGlvbiBhcyB0aGUgQyBkcml2ZSBvciB3aGV0aGVyIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93bgoJICAgIFdpbmUgZHJpdmUgQyBkaXJlY3RvcnkgdHJlZSBzb21ld2hlcmUgKHRha2UgY2FyZSBhYm91dAoJICAgIHBlcm1pc3Npb25zICEpLgogICAgICAgICAgICBFYWNoIGRyaXZlIHNlY3Rpb24gbWF5IHNwZWNpZnkgdXAgdG8gNiBkaWZmZXJlbnQgc2V0dGluZ3MKCSAgICBhcyBleHBsYWluZWQgYmVsb3cuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPltEcml2ZSBYXTwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBhYm92ZSBsaW5lIGJlZ2lucyB0aGUgc2VjdGlvbiBmb3IgYSBkcml2ZSB3aG9zZSBsZXR0ZXIgaXMgWAoJICAgIChET1Mgbm90YXRpb246IGRyaXZlICdYOicpLgoJICAgIFlvdSBjb3VsZCBlLmcuIGNyZWF0ZSBhbiBlcXVpdmFsZW50IHRvIGEgZHJpdmUgJ0M6JwoJICAgIHVuZGVyIERPUy9XaW5kb3dzIGJ5IHVzaW5nIGEgW0RyaXZlIENdIHNlY3Rpb24gbmFtZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlBhdGgiID0gIi9kaXIvdG8vcGF0aCI8L3Byb2dyYW1saXN0aW5nPgoJICAgIFRoaXMgc3BlY2lmaWVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRyaXZlIHdpbGwgYmVnaW4uCgkgICAgV2hlbiBXaW5lIGlzIGJyb3dzaW5nIGluIGRyaXZlIFgsIGl0IHdpbGwgYmUgYWJsZQoJICAgIHRvIHNlZSB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIGRpcmVjdG9yeQoJICAgIDxmaWxlbmFtZT4vZGlyL3RvL3BhdGg8L2ZpbGVuYW1lPiBhbmQgYmVsb3cuCgkgICAgKG5vdGUgdGhhdCBzeW1saW5rcyB0byBkaXJlY3RvcmllcyB3b24ndCBnZXQgaW5jbHVkZWQgIQoJICAgIHNlZSAiPGxpbmsgbGlua2VuZD0iZGlyc3ltbGlua3MiPlNob3dEaXJTeW1saW5rczwvbGluaz4iCgkgICAgY29uZmlnIHNldHRpbmcpCgkgICAgWW91IGNhbiBhbHNvIG1ha2UgdXNlIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBsaWtlICRIT01FIGhlcmUsCgkgICAgYW4gZXhhbXBsZSBmb3IgdXNpbmcgYSBteXdpbmVkcml2ZSBkaXJlY3RvcnkgaW4geW91ciBob21lIGRpcgoJICAgIHdvdWxkIGJlCgkgICAgIlBhdGgiID0gIiR7SE9NRX0vbXl3aW5lZHJpdmUiCgkgICAgRG9uJ3QgZm9yZ2V0IHRvIGxlYXZlIG9mZiB0aGUgdHJhaWxpbmcgc2xhc2ghCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJUeXBlIiA9ICJoZHxjZHJvbXxuZXR3b3JrfGZsb3BweSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHVwIHRoZSB0eXBlIG9mIGRyaXZlIFdpbmUgd2lsbCBzZWUgaXQgYXMuIFR5cGUgbXVzdAogICAgICAgICAgICBlcXVhbCBvbmUgb2YgdGhlIGZvdXIgPGxpdGVyYWw+ZmxvcHB5PC9saXRlcmFsPiwKICAgICAgICAgICAgPGxpdGVyYWw+aGQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5jZHJvbTwvbGl0ZXJhbD4sIG9yCiAgICAgICAgICAgIDxsaXRlcmFsPm5ldHdvcms8L2xpdGVyYWw+LiBUaGV5IGFyZSBzZWxmLWV4cGxhbmF0b3J5LgogICAgICAgICAgICAoVGhlIHwncyBtZWFuICJUeXBlID0gJyZsdDtvbmUgb2YgdGhlIG9wdGlvbnMmZ3Q7JyIuKQoJICAgIFVzdWFsbHksIHlvdSBjaG9vc2UgImhkIiBmb3IgYSBkcml2ZSAoImhkIiBpcyBkZWZhdWx0IGFueXdheSkuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMYWJlbCIgPSAiYmxhaCI8L3Byb2dyYW1saXN0aW5nPgoJICAgIERlZmluZXMgdGhlIGRyaXZlIGxhYmVsLiBHZW5lcmFsbHkgb25seSBuZWVkZWQKCSAgICBmb3IgcHJvZ3JhbXMgdGhhdCBsb29rIGZvciBhIHNwZWNpYWwgQ0QtUk9NLgogICAgICAgICAgICBUaGUgbGFiZWwgbWF5IGJlIHVwIHRvIDExIGNoYXJhY3RlcnMuCgkgICAgTm90ZSB0aGF0IHRoZSBwcmVmZXJyZWQgd2F5IG9mIG1hbmFnaW5nIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMKCSAgICBvZiBDRC1ST01zIGFuZCBmbG9wcGllcyBpcyB0byBnaXZlIFdpbmUgcmF3IGRldmljZSBhY2Nlc3MgZm9yCgkgICAgcmVhZGluZyB0aGVzZSBvbiBhIHBlci1DRCBjYXNlIChzZWUgIkRldmljZSIgYmVsb3cpIGluc3RlYWQgb2YKCSAgICBoYXJkY29kaW5nIG9uZSBzcGVjaWZpYyAiTGFiZWwiLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iU2VyaWFsIiA9ICJkZWFkYmVlZiI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUZWxscyBXaW5lIHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBkcml2ZS4gQSBmZXcgcHJvZ3JhbXMgd2l0aAogICAgICAgICAgICBpbnRlbnNlIHByb3RlY3Rpb24gZm9yIHBpcmF0aW5nIG1pZ2h0IG5lZWQgdGhpcywgYnV0IG90aGVyd2lzZQogICAgICAgICAgICBpdCdzIG5vdCBuZWVkZWQuIFVwIHRvIDggY2hhcmFjdGVycyBhbmQgaGV4YWRlY2ltYWwuCgkgICAgVXNpbmcgYSAiRGV2aWNlIiBlbnRyeSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdGhlICJTZXJpYWwiIHByb2JhYmx5CgkgICAgaXMgYSBzbWFydGVyIGNob2ljZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkZpbGVzeXN0ZW0iID0gIndpbjk1fHVuaXh8bXNkb3MiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB1cCB0aGUgd2F5IFdpbmUgbG9va3MgYXQgZmlsZXMgb24gdGhlIGRyaXZlLgogICAgICAgICAgPC9wYXJhPgoKICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+d2luOTU8L2xpdGVyYWw+PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICBDYXNlIGluc2Vuc2l0aXZlLiBBbGlrZSB0byBXaW5kb3dzIDl4L05UIDQuIFRoaXMgaXMKICAgICAgICAgICAgICAgICAgdGhlIGxvbmcgZmlsZW5hbWUgZmlsZXN5c3RlbSB5b3UgYXJlIHByb2JhYmx5IHVzZWQKICAgICAgICAgICAgICAgICAgdG8gd29ya2luZyB3aXRoLiBUaGUgZmlsZXN5c3RlbSBvZiBjaG9pY2UgZm9yIG1vc3QKICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHRvIGJlIHJ1biB1bmRlciB3aW5lLiAgUFJPQkFCTFkgVEhFIE9ORQogICAgICAgICAgICAgICAgICBZT1UgV0FOVCEKICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT48bGl0ZXJhbD51bml4PC9saXRlcmFsPjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgQ2FzZSBzZW5zaXRpdmUuIFRoaXMgZmlsZXN5c3RlbSBoYXMgYWxtb3N0IG5vIHVzZQogICAgICAgICAgICAgICAgICAoV2luZG93cyBhcHBzIGV4cGVjdCBjYXNlIGluc2Vuc2l0aXZlIGZpbGVuYW1lcykuCiAgICAgICAgICAgICAgICAgIFRyeSBpdCBpZiB5b3UgZGFyZSwgYnV0IHdpbjk1IGlzIGEgIG11Y2ggYmV0dGVyCiAgICAgICAgICAgICAgICAgIGNob2ljZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT48bGl0ZXJhbD5tc2RvczwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgIENhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4gQWxpa2UgdG8gRE9TIGFuZAogICAgICAgICAgICAgICAgICBXaW5kb3dzIDMueC4gPGxpdGVyYWw+OC4zPC9saXRlcmFsPiBpcyB0aGUgbWF4aW11bQogICAgICAgICAgICAgICAgICBsZW5ndGggb2YgZmlsZXMgKGVpZ2h0ZG90LjEyMykgLSBsb25nZXIgb25lcyB3aWxsIGJlCiAgICAgICAgICAgICAgICAgIHRydW5jYXRlZC4gKE5PVEU6IHRoaXMgaXMgYSB2ZXJ5IGJhZCBjaG9pY2UgaWYgeW91CiAgICAgICAgICAgICAgICAgIHBsYW4gb24gcnVubmluZyBhcHBzIHRoYXQgdXNlIGxvbmcgZmlsZW5hbWVzLiB3aW45NQogICAgICAgICAgICAgICAgICBzaG91bGQgd29yayBmaW5lIHdpdGggYXBwcyB0aGF0IHdlcmUgZGVzaWduZWQgdG8gcnVuCiAgICAgICAgICAgICAgICAgIHVuZGVyIHRoZSBtc2RvcyBzeXN0ZW0uIEluIG90aGVyIHdvcmRzLCB5b3UgbWlnaHQKICAgICAgICAgICAgICAgICAgbm90IHdhbnQgdG8gdXNlIHRoaXMuKQogICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZXZpY2UiID0gIi9kZXYveHgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDxwYXJhPgoJICAgIE5lZWRlZCBmb3IgcmF3IGRldmljZSBhY2Nlc3MgYW5kIGxhYmVsIGFuZCBzZXJpYWwgbnVtYmVyIHJlYWRpbmcuCiAgICAgICAgICAgIFVzZSB0aGlzIE9OTFkgZm9yIGZsb3BweSBhbmQgY2Ryb20gZGV2aWNlcy4gVXNpbmcgaXQgb24KICAgICAgICAgICAgRXh0ZW5kZWQyIG9yIG90aGVyIFVuaXggZmlsZSBzeXN0ZW1zIGNhbiBoYXZlIGRpcmUgcmVzdWx0cwoJICAgICh3aGVuIGEgd2luZG93cyBhcHAgdHJpZXMgdG8gZG8gYSBsb3dsZXZlbCB3cml0ZSwKCSAgICB0aGV5IGRvIGl0IGluIGEgRkFUIHdheSAtLSBGQVQgZm9ybWF0IGlzIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20KCSAgICBhbnkgVW5peCBmaWxlIHN5c3RlbSkuCgkgICAgQWxzbywgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgcHJvcGVyIHBlcm1pc3Npb25zIHRvIHRoaXMgZGV2aWNlCgkgICAgZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxub3RlPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgbm90IHJlYWxseSBpbXBvcnRhbnQ7IGFsbW9zdCBhbGwgYXBwcwogICAgICAgICAgICAgIHdpbGwgaGF2ZSBubyBwcm9ibGVtIGlmIGl0IHJlbWFpbnMgdW5zcGVjaWZpZWQuIEZvcgogICAgICAgICAgICAgIENELVJPTXMgaXQncyBxdWl0ZSB1c2VmdWwgaW4gb3JkZXIgdG8gZ2V0IGF1dG9tYXRpYyBsYWJlbAogICAgICAgICAgICAgIGRldGVjdGlvbiwgdGhvdWdoLiBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCBzcGVjaWZ5aW5nCiAgICAgICAgICAgICAgZGV2aWNlIG5hbWVzLCBqdXN0IGxlYXZlIG91dCB0aGlzIHNldHRpbmcgZm9yIHlvdXIKICAgICAgICAgICAgICBkcml2ZXMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgIDxwYXJhPgoJICAgIEhlcmUgYXJlIGEgZmV3IHNhbXBsZSBlbnRyaWVzOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CkhlcmUgaXMgYSBzZXR1cCBmb3IgRHJpdmUgQywgYSBnZW5lcmljIGhhcmQgZHJpdmU6CltEcml2ZSBDXQoiUGF0aCIgPSAiL2Rvc2MiCiJUeXBlIiA9ICJoZCIKIkxhYmVsIiA9ICJIYXJkIERyaXZlIgoiRmlsZXN5c3RlbSIgPSAid2luOTUiClRoaXMgaXMgYSBzZXR1cCBmb3IgRHJpdmUgRSwgYSBnZW5lcmljIENELVJPTSBkcml2ZToKW0RyaXZlIEVdCiJQYXRoIiA9ICIvbW50L2Nkcm9tIgoiVHlwZSIgPSAiY2Ryb20iCiJMYWJlbCIgPSAiVG90YWwgQW5uaWhpbGF0aW9uIgoiRmlsZXN5c3RlbSIgPSAid2luOTUiCiJEZXZpY2UiID0gIi9kZXYvY2Ryb20iCkFuZCBoZXJlIGlzIGEgc2V0dXAgZm9yIERyaXZlIEEsIGEgZ2VuZXJpYyBmbG9wcHkgZHJpdmU6CltEcml2ZSBBXQoiVHlwZSIgPSAiZmxvcHB5IgoiUGF0aCIgPSAiL21udC9mbG9wcHkiCiJMYWJlbCIgPSAiRmxvcHB5IERyaXZlIgoiU2VyaWFsIiA9ICI4NzY1NDMyMSIKIkZpbGVzeXN0ZW0iID0gIndpbjk1IgoiRGV2aWNlIiA9ICIvZGV2L2ZkMCIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFt3aW5lXSBTZWN0aW9uIDwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIFt3aW5lXSBzZWN0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgYWxsIGtpbmRzCiAgICAgICAgICAgIG9mIGdlbmVyYWwgc2V0dGluZ3MgZm9yIFdpbmUuCgkgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IldpbmRvd3MiID0gImM6XFx3aW5kb3dzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoaXMgdGVsbHMgV2luZSBhbmQgV2luZG93cyBwcm9ncmFtcyB3aGVyZSB0aGUKICAgICAgICAgICAgPGZpbGVuYW1lPldpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMuICBJdCBpcwogICAgICAgICAgICByZWNvbW1lbmRlZCB0byBoYXZlIHRoaXMgZGlyZWN0b3J5IHNvbWV3aGVyZSBvbiB5b3VyCiAgICAgICAgICAgIGNvbmZpZ3VyZWQgPG1lZGlhbGFiZWw+QzwvbWVkaWFsYWJlbD4gZHJpdmUsIGFuZCBpdCdzIGFsc28KICAgICAgICAgICAgcmVjb21tZW5kZWQgdG8ganVzdCBjYWxsIHRoZSBkaXJlY3RvcnkgIndpbmRvd3MiICh0aGlzIGlzCiAgICAgICAgICAgIHRoZSBkZWZhdWx0IHNldHVwIG9uIFdpbmRvd3MsIGFuZCBzb21lIHN0dXBpZCBhcHBsaWNhdGlvbnMKICAgICAgICAgICAgbWlnaHQgcmVseSBvbiB0aGlzKS4gIFNvIGluIGNhc2UgeW91IGNob3NlIGEgIldpbmRvd3MiCiAgICAgICAgICAgIHNldHRpbmcgb2YgImM6XFx3aW5kb3dzIiBhbmQgeW91IGNob3NlIHRvIHNldCB1cCBhIGRyaXZlIEMKICAgICAgICAgICAgZS5nLiBhdCA8ZmlsZW5hbWU+L3Vzci9sb2NhbC93aW5lX2M8L2ZpbGVuYW1lPiwgdGhlCiAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IHdvdWxkIGJlCiAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL3dpbmVfYy93aW5kb3dzPC9maWxlbmFtZT4uICBNYWtlIG9uZQogICAgICAgICAgICBpZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gTk8gVFJBSUxJTkcgU0xBU0ggKE5PVAogICAgICAgICAgICA8ZmlsZW5hbWU+QzpcXHdpbmRvd3NcPC9maWxlbmFtZT4pISBXcml0ZSBhY2Nlc3Mgc3Ryb25nbHkKICAgICAgICAgICAgcmVjb21tZW5kZWQhCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTeXN0ZW0iID0gImM6XFx3aW5kb3dzXFxzeXN0ZW0iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhpcyBzZXRzIHVwIHdoZXJlIHRoZSB3aW5kb3dzIHN5c3RlbSBmaWxlcyBhcmUuIFRoZSBXaW5kb3dzCgkgICAgc3lzdGVtIGRpcmVjdG9yeSBzaG91bGQgcmVzaWRlIGJlbG93IHRoZSBkaXJlY3RvcnkgdXNlZCBmb3IgdGhlCiAgICAgICAgICAgIDxsaXRlcmFsPldpbmRvd3M8L2xpdGVyYWw+IHNldHRpbmcuCgkgICAgVGh1cyB3aGVuIHVzaW5nIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgc3lzdGVtIGRpcmVjdG9yeSB3b3VsZCBiZQoJICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL3dpbmVfYy93aW5kb3dzL3N5c3RlbTwvZmlsZW5hbWU+LgogICAgICAgICAgICBBZ2Fpbiwgbm8gdHJhaWxpbmcgc2xhc2gsIGFuZCB3cml0ZSBhY2Nlc3MhCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJUZW1wIiA9ICJjOlxcdGVtcCI8L3Byb2dyYW1saXN0aW5nPiBUaGlzIHNob3VsZAogICAgICAgICAgICBiZSB0aGUgZGlyZWN0b3J5IHlvdSB3YW50IHlvdXIgdGVtcCBmaWxlcyBzdG9yZWQgaW4sCgkgICAgL3Vzci9sb2NhbC93aW5lX2MvdGVtcCBpbiBvdXIgZXhhbXBsZS4KICAgICAgICAgICAgQWdhaW4sIG5vIHRyYWlsaW5nIHNsYXNoLCBhbmQgV1JJVEUgQUNDRVNTISEKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJQYXRoIiA9ICJjOlxcd2luZG93cztjOlxcd2luZG93c1xcc3lzdGVtO2M6XFxibGFuY28iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgQmVoYXZlcyBsaWtlIHRoZSA8ZW52YXI+UEFUSDwvZW52YXI+IHNldHRpbmcgb24gVU5JWAogICAgICAgICAgICBib3hlcy4gV2hlbiB3aW5lIGlzIHJ1biBsaWtlIDx1c2VyaW5wdXQ+d2luZQogICAgICAgICAgICAgIHNvbC5leGU8L3VzZXJpbnB1dD4sIGlmIDxmaWxlbmFtZT5zb2wuZXhlPC9maWxlbmFtZT4KICAgICAgICAgICAgcmVzaWRlcyBpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgaW4gdGhlCiAgICAgICAgICAgIDxsaXRlcmFsPlBhdGg8L2xpdGVyYWw+IHNldHRpbmcsIHdpbmUgd2lsbCBydW4gaXQgKE9mCiAgICAgICAgICAgIGNvdXJzZSwgaWYgPGZpbGVuYW1lPnNvbC5leGU8L2ZpbGVuYW1lPiByZXNpZGVzIGluIHRoZQogICAgICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSwgd2luZSB3aWxsIHJ1biB0aGF0IG9uZSkuIE1ha2Ugc3VyZSBpdAogICAgICAgICAgICBhbHdheXMgaGFzIHlvdXIgPGZpbGVuYW1lPndpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kCiAgICAgICAgICAgIHN5c3RlbSBkaXJlY3RvcnkgKEZvciB0aGlzIHNldHVwLCBpdCBtdXN0IGhhdmUKICAgICAgICAgICAgPGZpbGVuYW1lPiJjOlxcd2luZG93cztjOlxcd2luZG93c1xcc3lzdGVtIjwvZmlsZW5hbWU+KS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkdyYXBoaWNzRHJpdmVyIiA9ICJ4MTFkcnZ8dHR5ZHJ2IjwvcHJvZ3JhbWxpc3Rpbmc+CgkgICAgU2V0cyB0aGUgZ3JhcGhpY3MgZHJpdmVyIHRvIHVzZSBmb3IgV2luZSBvdXRwdXQuCgkgICAgeDExZHJ2IGlzIGZvciBYMTEgb3V0cHV0LCB0dHlkcnYgaXMgZm9yIHRleHQgY29uc29sZSBvdXRwdXQuCgkgICAgV0FSTklORzogaWYgeW91IHVzZSB0dHlkcnYgaGVyZSwgdGhlbiB5b3Ugd29uJ3QgYmUgYWJsZSB0byBydW4KCSAgICBhbnkgV2luZG93cyBHVUkgcHJvZ3JhbXMuIFRodXMgdGhpcyBvcHRpb24gaXMgbWFpbmx5IGludGVyZXN0aW5nCgkgICAgZm9yIGUuZy4gZW1iZWRkZWQgdXNlIG9mIFdpbmUgaW4gd2ViIHNlcnZlciBzY3JpcHRzLgoJICAgIE5vdGUgdGhhdCB0dHlkcnYgaXMgc3RpbGwgdmVyeSBsYWNraW5nLCBzbyBpZiBpdCBkb2Vzbid0IHdvcmssCgkgICAgcmVzb3J0IHRvIHVzaW5nICJ4dmZiIiwgYSB2aXJ0dWFsIFgxMSBzZXJ2ZXIuCgkgIDwvcGFyYT4KCSAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUHJpbnRlciIgPSAib2ZmfG9uIjwvcHJvZ3JhbWxpc3Rpbmc+IFRlbGxzIHdpbmUKICAgICAgICAgICAgd2hldGhlciB0byBhbGxvdyBwcmludGluZyB2aWEgcHJpbnRlciBkcml2ZXJzIHRvIHdvcmsuCgkgICAgVGhpcyBvcHRpb24gaXNuJ3QgbmVlZGVkIGZvciBvdXIgYnVpbHRpbiBwc2RydiBwcmludGVyIGRyaXZlcgoJICAgIGF0IGFsbC4KICAgICAgICAgICAgVXNpbmcgdGhlc2UgdGhpbmdzIGFyZSBwcmV0dHkgYWxwaGEsIHNvIHlvdSBtaWdodCB3YW50IHRvCiAgICAgICAgICAgIHdhdGNoIG91dC4gU29tZSBwZW9wbGUgbWlnaHQgZmluZCBpdCB1c2VmdWwsIGhvd2V2ZXIuIElmCiAgICAgICAgICAgIHlvdSdyZSBub3QgcGxhbm5pbmcgb24gd29ya2luZyBvbiBwcmludGluZyB2aWEgd2luZG93cyBwcmludGVyCgkgICAgZHJpdmVycywgZG9uJ3QgZXZlbiBhZGQgdGhpcyB0byB5b3VyIHdpbmUgY29uZmlnIGZpbGUKCSAgICAoSXQgcHJvYmFibHkgaXNuJ3QgYWxyZWFkeSBpbiBpdCkuCgkgICAgQ2hlY2sgb3V0IHRoZSBbc3Bvb2xlcl0gYW5kIFtwYXJhbGxlbHBvcnRzXSBzZWN0aW9ucyB0b28uCiAgICAgICAgICA8L3BhcmE+CgkgIDxwYXJhPgoJICAgIDxwcm9ncmFtbGlzdGluZz4iU2hlbGxMaW5rZXIiID0gIndpbmVzaGVsbGxpbmsiPC9wcm9ncmFtbGlzdGluZz4KCSAgICBUaGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBzaGVsbCBsaW5rZXIgc2NyaXB0IHRvIHVzZSBmb3Igc2V0dGluZwoJICAgIHVwIFdpbmRvd3MgaWNvbnMgaW4gZS5nLiBLREUgb3IgR25vbWUgdGhhdCBhcmUgZ2l2ZW4gYnkgcHJvZ3JhbXMKCSAgICBtYWtpbmcgdXNlIG9mIGFwcHJvcHJpYXRlIHNoZWxsMzIuZGxsIGZ1bmN0aW9uYWxpdHkgdG8gY3JlYXRlCgkgICAgaWNvbnMgb24gdGhlIGRlc2t0b3Avc3RhcnQgbWVudSBkdXJpbmcgaW5zdGFsbGF0aW9uLgoJICA8L3BhcmE+CgkgIDxwYXJhIGlkPSJkaXJzeW1saW5rcyI+CgkgICAgPHByb2dyYW1saXN0aW5nPiJTaG93RGlyU3ltbGlua3MiID0gIjEiPC9wcm9ncmFtbGlzdGluZz4KCSAgICBXaW5lIGRvZXNuJ3QgcGFzcyBkaXJlY3Rvcnkgc3ltbGlua3MgdG8gV2luZG93cyBwcm9ncmFtcyBieQoJICAgIGRlZmF1bHQsIGFzIGRvaW5nIHNvIG1heSBjcmFzaCBzb21lIHByb2dyYW1zIHRoYXQgZG8KCSAgICByZWN1cnNpdmUgbG9va3VwcyBvZiB3aG9sZSBzdWJkaXJlY3RvcnkgdHJlZXMKCSAgICB3aGVuZXZlciBhIGRpcmVjdG9yeSBzeW1saW5rIHBvaW50cyBiYWNrIHRvIGl0c2VsZiBvciBvbmUgb2YgaXRzCgkgICAgcGFyZW50IGRpcmVjdG9yaWVzLgoJICAgIFRoYXQncyB3aHkgd2UgZGlzYWxsb3dlZCB0aGUgdXNlIG9mIGRpcmVjdG9yeSBzeW1saW5rcwoJICAgIGFuZCBhZGRlZCB0aGlzIHNldHRpbmcgdG8gcmVlbmFibGUgKCIxIikgdGhpcyBmdW5jdGlvbmFsaXR5LgoJICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTeW1ib2xUYWJsZUZpbGUiID0gIndpbmUuc3ltIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdXAgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIGZvciB0aGUgd2luZSBkZWJ1Z2dlci4gWW91CiAgICAgICAgICAgIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZmlkZGxlIHdpdGggdGhpcy4gTWF5IGJlIHVzZWZ1bCBpZgogICAgICAgICAgICB5b3VyIHdpbmUgaXMgc3RyaXBwZWQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPkludHJvZHVjdGlvbiBUbyBETEwgU2VjdGlvbnM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgeW91IHdpbGwgbmVlZCB0byBrbm93IGJlZm9yZQogICAgICAgICAgICBjb25maWd1cmluZyB0aGUgRExMIHNlY3Rpb25zIGluIHlvdXIgd2luZSBjb25maWd1cmF0aW9uCiAgICAgICAgICAgIGZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8c2VjdDQ+CiAgICAgICAgICAgIDx0aXRsZT5XaW5kb3dzIERMTCBQYWlyczwvdGl0bGU+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIE1vc3Qgd2luZG93cyBETEwncyBoYXZlIGEgd2luMTYgKFdpbmRvd3MgMy54KSBhbmQgd2luMzIKICAgICAgICAgICAgICAoV2luZG93cyA5eC9OVCkgZm9ybS4gIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgd2luMTYgYW5kCiAgICAgICAgICAgICAgd2luMzIgRExMIHZlcnNpb25zIGFyZSBjYWxsZWQgdGhlICJETEwgcGFpciIuIFRoaXMgaXMgYQogICAgICAgICAgICAgIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9uIHBhaXJzOgogICAgICAgICAgICA8L3BhcmE+CgogICAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KICAgICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgogICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5XaW4xNjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PldpbjMyPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+CiAgICAgICAgICAgICAgICAgICAgICBOYXRpdmUKICAgICAgICAgICAgICAgICAgICAgIDxmb290bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgaXQgcG9zc2libGUgdG8gdXNlIG5hdGl2ZSBkbGwgd2l0aCB3aW5lPwogICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgbmV4dCBzZWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICAgICAgICA8L2Zvb3Rub3RlPgogICAgICAgICAgICAgICAgICAgIDwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+S0VSTkVMPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+S0VSTkVMMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ObyE8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+VVNFUjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlVTRVIzMjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5Pk5vITwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5TSEVMTDwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlNIRUxMMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+R0RJPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+R0RJMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ObyE8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Q09NTURMRzwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PkNPTURMRzMyPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+WWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlZFUjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlZFUlNJT048L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgPC90Z3JvdXA+CiAgICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KICAgICAgICAgIDwvc2VjdDQ+CgogICAgICAgICAgPHNlY3Q0PgogICAgICAgICAgICA8dGl0bGU+RGlmZmVyZW50IEZvcm1zIE9mIERMTCdzPC90aXRsZT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCBmb3JtcyBvZiBETEwncyB3aW5lIGNhbiBsb2FkOgogICAgICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgICA8dGVybT5uYXRpdmU8L3Rlcm0+CiAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgICAgICAgIFRoZSBETEwncyB0aGF0IGFyZSBpbmNsdWRlZCB3aXRoIHdpbmRvd3MuIE1hbnkKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MgRExMJ3MgY2FuIGJlIGxvYWRlZCBpbiB0aGVpciBuYXRpdmUKICAgICAgICAgICAgICAgICAgICAgIGZvcm0uIE1hbnkgdGltZXMgdGhlc2UgbmF0aXZlIHZlcnNpb25zIHdvcmsKICAgICAgICAgICAgICAgICAgICAgIGJldHRlciB0aGFuIHRoZWlyIG5vbi1NaWNyb3NvZnQgZXF1aXZhbGVudCAtLQogICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGltZXMgdGhleSBkb24ndC4KICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICAgICAgPHRlcm0+YnVpbHRpbjwvdGVybT4KICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgRExMIGxvYWRpbmcuIFRoaXMgaXMKICAgICAgICAgICAgICAgICAgICAgIHdoYXQgeW91IHdpbGwgdXNlIGlmIHRoZSBETEwgaXMgZXJyb3ItcHJvbmUgaW4KICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSBmb3JtIChLRVJORUwgZm9yIGV4YW1wbGUpLCB5b3UgZG9uJ3QgaGF2ZQogICAgICAgICAgICAgICAgICAgICAgdGhlIG5hdGl2ZSBETEwsIG9yIHlvdSBqdXN0IHdhbnQgdG8gYmUKICAgICAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdC1mcmVlLgogICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgICA8dGVybT5zbzwvdGVybT4KICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgTmF0aXZlIEVMRiBsaWJyYXJpZXMuIFdpbGwgbm90IHdvcmsgeWV0LgogICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgICA8dGVybT5lbGZkbGw8L3Rlcm0+CiAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgICAgICAgIEVMRiBlbmNhcHN1bGF0ZWQgd2luZG93cyBETEwncy4KCQkgICAgICBObyBsb25nZXIgdXNlZCwgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L3NlY3Q0PgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbERlZmF1bHRzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGVzZSBzZXR0aW5ncyBwcm92aWRlIHdpbmUncyBkZWZhdWx0IGhhbmRsaW5nIG9mIERMTCBsb2FkaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iRGVmYXVsdExvYWRPcmRlciIgPSIgbmF0aXZlLCBzbywgYnVpbHRpbiI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2V0dGluZyBpcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHRoZSBvcmRlciBpbgogICAgICAgICAgICB3aGljaCB0byBhdHRlbXB0IGxvYWRpbmcgRExMcy4gSWYgdGhlIGZpcnN0IG9wdGlvbiBmYWlscywKICAgICAgICAgICAgaXQgd2lsbCB0cnkgdGhlIHNlY29uZCwgYW5kIHNvIG9uLiBUaGUgb3JkZXIgc3BlY2lmaWVkCiAgICAgICAgICAgIGFib3ZlIGlzIHByb2JhYmx5IHRoZSBiZXN0IGluIG1vc3QgY29uZGl0aW9ucy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxQYWlyc10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgIEF0IG9uZSB0aW1lLCB0aGVyZSB3YXMgYSBzZWN0aW9uIGNhbGxlZCBbRGxsUGFpcnNdIGluIHRoZQogICAgICAgICAgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUsIGJ1dCB0aGlzIGhhcyBiZWVuIG9ic29sZXRlZAogICAgICAgICAgYmVjYXVzZSB0aGUgcGFpcmluZyBpbmZvcm1hdGlvbiBoYXMgbm93IGJlZW4gZW1iZWRkZWQgaW50bwogICAgICAgICAgV2luZSBpdHNlbGYuIChUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gd2FzIG1lcmVseSB0byBiZQogICAgICAgICAgYWJsZSB0byBpc3N1ZSB3YXJuaW5ncyBpZiB0aGUgdXNlciBhdHRlbXB0ZWQgdG8gcGFpcgogICAgICAgICAgY29kZXBlbmRlbnQgMTYtYml0LzMyLWJpdCBETExzIG9mIGRpZmZlcmVudCB0eXBlcy4pIElmIHlvdQogICAgICAgICAgc3RpbGwgaGF2ZSB0aGlzIGluIHlvdXIgPGZpbGVuYW1lPn4vLndpbmUvLmNvbmZpZzwvZmlsZW5hbWU+IG9yCiAgICAgICAgICA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4sIHlvdSBtYXkgc2FmZWx5IGRlbGV0ZSBpdC4KICAgICAgICAgIDwvcGFyYT4KCTwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbE92ZXJyaWRlc10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIGZvcm1hdCBmb3IgdGhpcyBzZWN0aW9uIGlzIHRoZSBzYW1lIGZvciBlYWNoIGxpbmU6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KJmx0O0RMTD57LCZsdDtETEw+LCZsdDtETEw+Li4ufSA9ICZsdDtGT1JNPnssJmx0O0ZPUk0+LCZsdDtGT1JNPi4uLn0KICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gbG9hZCBidWlsdGluIEtFUk5FTCBwYWlyIChjYXNlIGRvZXNuJ3QKICAgICAgICAgICAgbWF0dGVyIGhlcmUpOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJrZXJuZWwsa2VybmVsMzIiID0gImJ1aWx0aW4iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVG8gbG9hZCB0aGUgbmF0aXZlIENPTU1ETEcgcGFpciwgYnV0IGlmIHRoYXQgZG9lc24ndCB3b3JrCiAgICAgICAgICAgIHRyeSBidWlsdGluOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJjb21tZGxnLGNvbWRsZzMyIiA9ICJuYXRpdmUsYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUbyBsb2FkIHRoZSBuYXRpdmUgQ09NQ1RMMzI6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KImNvbWN0bDMyIiA9ICJuYXRpdmUiCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBpcyBhIGdvb2QgZ2VuZXJpYyBzZXR1cCAoQXMgaXQgaXMgZGVmaW5lZCBpbiBjb25maWcKICAgICAgICAgICAgdGhhdCB3YXMgaW5jbHVkZWQgd2l0aCB5b3VyIHdpbmUgcGFja2FnZSk6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KW0RsbE92ZXJyaWRlc10KInJwY3J0NCIgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoib2xlYXV0MzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJvbGUzMiIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImNvbW1kbGciICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiY29tZGxnMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJ2ZXIiICAgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInZlcnNpb24iICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoic2hlbGwiICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJzaGVsbDMyIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInNoZm9sZGVyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoic2hsd2FwaSIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJzaGRvY3Z3IiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImx6ZXhwYW5kIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibHozMiIgICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjb21jdGwzMiIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImNvbW1jdHJsIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiYWR2YXBpMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjcnRkbGwiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1wciIgICAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoid2luc3Bvb2wuZHJ2IiA9ICJidWlsdGluLCBuYXRpdmUiCiJkZHJhdyIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImRpbnB1dCIgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiZHNvdW5kIiAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJvcGVuZ2wzMiIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1zdmNydCIgICAgICAgPSAibmF0aXZlLCBidWlsdGluIgoibXN2aWRlbyIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtc3ZmdzMyIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1jaWNkYS5kcnYiICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWNpc2VxLmRydiIgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2l3YXZlLmRydiIgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1jaWF2aS5kcnYiICAgPSAibmF0aXZlLCBidWlsdGluIgoibWNpYW5pbS5kcnYiICA9ICJuYXRpdmUsIGJ1aWx0aW4iCiJtc2FjbS5kcnYiICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1zYWNtIiAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibXNhY20zMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtaWRpbWFwLmRydiIgID0gImJ1aWx0aW4sIG5hdGl2ZSIKOyB5b3UgY2FuIHNwZWNpZnkgYXBwbGljYXRpb25zIHRvbwoibm90ZXBhZC5leGUiICA9ICJuYXRpdmUsIGJ1aWx0aW4iCjsgZGVmYXVsdCBmb3IgYWxsIG90aGVyIGRsbHMKIioiID0gIm5hdGl2ZSwgYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxub3RlPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJZiBsb2FkaW5nIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIGZpcnN0IGZhaWxzLAogICAgICAgICAgICAgIHdpbmUgd2lsbCBqdXN0IGdvIG9uIGJ5IHVzaW5nIHRoZSBzZWNvbmQgb3IgdGhpcmQgb3B0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L25vdGU+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbZm9udHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzZXRzIHVwIHdpbmUncyBmb250IGhhbmRsaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVzb2x1dGlvbiIgPSAiOTYiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBTaW5jZSB0aGUgd2F5IFggaGFuZGxlcyBmb250cyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgd2F5CiAgICAgICAgICAgIFdpbmRvd3MgZG9lcywgd2luZSB1c2VzIGEgc3BlY2lhbCBtZWNoYW5pc20gdG8gZGVhbCB3aXRoCiAgICAgICAgICAgIHRoZW0uIEl0IG11c3Qgc2NhbGUgdGhlbSB1c2luZyB0aGUgbnVtYmVyIGRlZmluZWQgaW4gdGhlCiAgICAgICAgICAgICJSZXNvbHV0aW9uIiBzZXR0aW5nLiA2MC0xMjAgYXJlIHJlYXNvbmFibGUgdmFsdWVzLCA5NiBpcwogICAgICAgICAgICBhIG5pY2UgaW4gdGhlIG1pZGRsZSBvbmUuIElmIHlvdSBoYXZlIHRoZSByZWFsIHdpbmRvd3MKICAgICAgICAgICAgZm9udHMgYXZhaWxhYmxlICg8ZmlsZW5hbWU+Jmx0O2RpcnMgdG8KICAgICAgICAgICAgICB3aW5lPi9kb2N1bWVudGF0aW9uL3R0ZnNlcnZlcjwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgICA8ZmlsZW5hbWU+Zm9udHM8L2ZpbGVuYW1lPiksIHRoaXMgcGFyYW1ldGVyIHdpbGwgbm90IGJlIGFzCiAgICAgICAgICAgIGltcG9ydGFudC4gT2YgY291cnNlLCBpdCdzIGFsd2F5cyBnb29kIHRvIGdldCB5b3VyIFggZm9udHMKICAgICAgICAgICAgd29ya2luZyBhY2NlcHRhYmx5IGluIHdpbmUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICItYWRvYmUtdGltZXMtIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvbnQgd2luZSB1c2VzLiBGb29sIGFyb3VuZCB3aXRoIGl0IGlmIHlvdSdkIGxpa2UuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KT1BUSU9OQUw6CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIDxsaXRlcmFsPkFsaWFzPC9saXRlcmFsPiBzZXR0aW5nIGFsbG93cyB5b3UgdG8gbWFwIGFuIFggZm9udCB0byBhIGZvbnQKICAgICAgICAgICAgdXNlZCBpbiB3aW5lLiBUaGlzIGlzIGdvb2QgZm9yIGFwcHMgdGhhdCBuZWVkIGEgc3BlY2lhbCBmb250IHlvdSBkb24ndCBoYXZlLAogICAgICAgICAgICBidXQgYSBnb29kIHJlcGxhY2VtZW50IGV4aXN0cy4gVGhlIHN5bnRheCBpcyBsaWtlIHNvOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJBbGlhc1giID0gIltGYWtlIHdpbmRvd3MgbmFtZV0sW1JlYWwgWCBuYW1lXSImbHQ7LG9wdGlvbmFsICJtYXNraW5nIiBzZWN0aW9uPgogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFByZXR0eSBzdHJhaWdodGZvcndhcmQuIFJlcGxhY2UgIkFsaWFzWCIgd2l0aCAiQWxpYXMwIiwKICAgICAgICAgICAgdGhlbiAiQWxpYXMxIiBhbmQgc28gb24uIFRoZSBmYWtlIHdpbmRvd3MgbmFtZSBpcyB0aGUgbmFtZQogICAgICAgICAgICB0aGF0IHRoZSBmb250IHdpbGwgYmUgdW5kZXIgYSB3aW5kb3dzIGFwcCBpbiB3aW5lLiBUaGUKICAgICAgICAgICAgcmVhbCBYIG5hbWUgaXMgdGhlIGZvbnQgbmFtZSBhcyBzZWVuIGJ5IFggKFJ1bgogICAgICAgICAgICAieGZvbnRzZWwiKS4gVGhlIG9wdGlvbmFsICJtYXNraW5nIiBzZWN0aW9uIGFsbG93cyB5b3UgdG8KICAgICAgICAgICAgdXRpbGl6ZSB0aGUgZmFrZSB3aW5kb3dzIG5hbWUgeW91IGRlZmluZS4gSWYgaXQgaXMgbm90CiAgICAgICAgICAgIHVzZWQsIHRoZW4gd2luZSB3aWxsIGp1c3QgdHJ5IHRvIGV4dHJhY3QgdGhlIGZha2Ugd2luZG93cwogICAgICAgICAgICBuYW1lIGl0c2VsZiBhbmQgbm90IHVzZSB0aGUgdmFsdWUgeW91IGVudGVyLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBhbGlhcyB3aXRob3V0IG1hc2tpbmcuIFRoZSBmb250IHdpbGwgc2hvdyB1cCBpbiB3aW5kb3dzCiAgICAgICAgICAgIGFwcHMgYXMgIkdvb2dsZSIuCgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJBbGlhczAiID0gIkZvbywtLWdvb2dsZS0iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggbWFza2luZyBlbmFibGVkLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgYXMgIkZvbyIgaW4KICAgICAgICAgICAgd2luZG93cyBhcHBzLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJBbGlhczEiID0gIkZvbywtLWdvb2dsZS0sc3Vic3QiCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgRm9yIG1vcmUgaW5mbyBjaGVjayBvdXQgdGhlIDxsaW5rIGxpbmtlbmQ9ImZvbnRzIj5Gb250czwvbGluaz4KCSAgICBjaGFwdGVyLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW3NlcmlhbHBvcnRzXSwgW3BhcmFsbGVscG9ydHNdLCBbc3Bvb2xlcl0sIGFuZCBbcG9ydHNdIFNlY3Rpb25zPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBFdmVuIHRob3VnaCBpdCBzb3VuZHMgbGlrZSBhIGxvdCBvZiBzZWN0aW9ucywgdGhlc2UgYXJlCiAgICAgICAgICAgIGFsbCBjbG9zZWx5IHJlbGF0ZWQuIFRoZXkgYXJlIGFsbCBmb3IgY29tbXVuaWNhdGlvbnMgYW5kCiAgICAgICAgICAgIHBhcmFsbGVsIHBvcnRzLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBbc2VyaWFscG9ydHNdIHNlY3Rpb24gdGVsbHMgd2luZSB3aGF0IHNlcmlhbCBwb3J0cyBpdAogICAgICAgICAgICBpcyBhbGxvd2VkIHRvIHVzZS4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJDb21YIiA9ICIvZGV2L2N1YVkiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggdGhlIG51bWJlciBvZiB0aGUgQ09NCiAgICAgICAgICAgIHBvcnQgaW4gV2luZG93cyAoMS04KSBhbmQgPGxpdGVyYWw+WTwvbGl0ZXJhbD4gd2l0aCB0aGUKICAgICAgICAgICAgbnVtYmVyIG9mIGl0IGluIDxsaXRlcmFsPlg8L2xpdGVyYWw+IChVc3VhbGx5IHRoZSBudW1iZXIKICAgICAgICAgICAgb2YgdGhlIHBvcnQgaW4gV2luZG93cyBtaW51cyAxKS4gPGxpdGVyYWw+Q29tWDwvbGl0ZXJhbD4KICAgICAgICAgICAgY2FuIGFjdHVhbGx5IGVxdWFsIGFueSBkZXZpY2UKICAgICAgICAgICAgKDxtZWRpYWxhYmVsPi9kZXYvbW9kZW08L21lZGlhbGFiZWw+IGlzIGFjY2VwdGFibGUpLiBJdCBpcwogICAgICAgICAgICBub3QgYWx3YXlzIG5lY2Vzc2FyeSB0byBkZWZpbmUgYW55IENPTSBwb3J0cyAoQW4gb3B0aW9uYWwKICAgICAgICAgICAgc2V0dGluZykuIEhlcmUgaXMgYW4gZXhhbXBsZToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJDb20xIiA9ICIvZGV2L2N1YTAiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBVc2UgYXMgbWFueSBvZiB0aGVzZSBhcyB5b3UgbGlrZSBpbiB0aGUgc2VjdGlvbiB0byBkZWZpbmUKICAgICAgICAgICAgYWxsIG9mIHRoZSBDT00gcG9ydHMgeW91IG5lZWQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIFtwYXJhbGxlbHBvcnRzXSBzZWN0aW9uIHNldHMgdXAgYW55IHBhcmFsbGVsIHBvcnRzCiAgICAgICAgICAgIHRoYXQgd2lsbCBiZSBhbGxvd2VkIGFjY2VzcyB1bmRlciB3aW5lLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkxwdFgiID0gIi9kZXYvbHBZIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgU291bmRzIGZhbWlsaWFyPyBTeW50YXggaXMganVzdCBsaWtlIHRoZSBDT00gcG9ydCBzZXR0aW5nLgogICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggYSB2YWx1ZSBmcm9tIDEtNCBhcyBpdAogICAgICAgICAgICBpcyBpbiBXaW5kb3dzIGFuZCA8bGl0ZXJhbD5ZPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUgZnJvbQogICAgICAgICAgICAwLTMgKDxsaXRlcmFsPlk8L2xpdGVyYWw+IGlzIHVzdWFsbHkgdGhlIHZhbHVlIGluIHdpbmRvd3MKICAgICAgICAgICAgbWludXMgMSwganVzdCBsaWtlIGZvciBDT00gcG9ydHMpLiBZb3UgZG9uJ3QgYWx3YXlzIG5lZWQKICAgICAgICAgICAgdG8gZGVmaW5lIGEgcGFyYWxsZWwgcG9ydCAoQUtBLCBpdCdzIG9wdGlvbmFsKS4gQXMgd2l0aAogICAgICAgICAgICB0aGUgb3RoZXIgc2VjdGlvbiwgTHB0WCBjYW4gZXF1YWwgIGFueSBkZXZpY2UgKE1heWJlCiAgICAgICAgICAgIDxtZWRpYWxhYmVsPi9kZXYvcHJpbnRlcjwvbWVkaWFsYWJlbD4pLiBIZXJlIGlzIGFuCiAgICAgICAgICAgIGV4YW1wbGU6ICA8cHJvZ3JhbWxpc3Rpbmc+IkxwdDEiID0gIi9kZXYvbHAwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIFtzcG9vbGVyXSBzZWN0aW9uIHdpbGwgaW5mb3JtIHdpbmUgd2hlcmUgdG8gc3Bvb2wKICAgICAgICAgICAgcHJpbnQgam9icy4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdHJ5IHByaW50aW5nLiBXaW5lCiAgICAgICAgICAgIGRvY3MgY2xhaW0gdGhhdCBzcG9vbGluZyBpcyAicmF0aGVyIHByaW1pdGl2ZSIgYXQgdGhpcwogICAgICAgICAgICB0aW1lLCBzbyBpdCB3b24ndCB3b3JrIHBlcmZlY3RseS4gSVQgSVMgT1BUSU9OQUwuIFRoZSBvbmx5CiAgICAgICAgICAgIHNldHRpbmcgeW91IHVzZSBpbiB0aGlzIHNlY3Rpb24gd29ya3MgdG8gbWFwIGEgcG9ydCAoTFBUMSwKICAgICAgICAgICAgZm9yIGV4YW1wbGUpIHRvIGEgZmlsZSBvciBhIGNvbW1hbmQuIEhlcmUgaXMgYW4gZXhhbXBsZSwKICAgICAgICAgICAgbWFwcGluZyBMUFQxIHRvIHRoZSBmaWxlIDxmaWxlbmFtZT5vdXQucHM8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMUFQxOiIgPSAib3V0LnBzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIG1hcHMgcHJpbnRpbmcgam9icyB0byBMUFQxIHRvIHRoZQogICAgICAgICAgICBjb21tYW5kIDxjb21tYW5kPmxwcjwvY29tbWFuZD4uIE5vdGljZSAgdGhlIHw6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTFBUMToiID0gInxscHIiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3BvcnRzXSBzZWN0aW9uIGlzIHVzdWFsbHkgdXNlZnVsIG9ubHkgZm9yIHBlb3BsZSB3aG8KICAgICAgICAgICAgbmVlZCBkaXJlY3QgcG9ydCBhY2Nlc3MgZm9yIHByb2dyYW1zIHJlcXVpcmluZyBkb25nbGVzIG9yCiAgICAgICAgICAgIHNjYW5uZXJzLiBJRiBZT1UgRE9OJ1QgTkVFRCBJVCwgRE9OJ1QgVVNFIElUIQogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4icmVhZCIgPSAiMHg3NzksMHgzNzksMHgyODAtMHgyYTAiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgR2l2ZXMgZGlyZWN0IHJlYWQgYWNjZXNzIHRvIHRob3NlIElPJ3MuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJ3cml0ZSIgPSAiMHg3NzksMHgzNzksMHgyODAtMHgyYTAiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgR2l2ZXMgZGlyZWN0IHdyaXRlIGFjY2VzcyB0byB0aG9zZSBJTydzLiBJdCdzIHByb2JhYmx5IGEKICAgICAgICAgICAgZ29vZCBpZGVhIHRvIGtlZXAgdGhlIHZhbHVlcyBvZiB0aGUKICAgICAgICAgICAgPGxpdGVyYWw+cmVhZDwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPndyaXRlPC9saXRlcmFsPgogICAgICAgICAgICBzZXR0aW5ncyB0aGUgc2FtZS4gVGhpcyBzdHVmZiB3aWxsIG9ubHkgd29yayB3aGVuIHlvdSdyZQogICAgICAgICAgICByb290LgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iY29uZmlnLWRlYnVnLWV0YyI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEZWJ1Z10sIFtSZWdpc3RyeV0sIFt0d2Vhay5sYXlvdXRdLCBhbmQgW3Byb2dyYW1zXSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW0RlYnVnXSBpcyB1c2VkIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBkZWJ1ZyBtZXNzYWdlcywgYW5kIHRvCiAgICAgICAgICAgIG91dHB1dCB0aGVtIHRvIGEgZmlsZS4gVGhlIGxhdHRlciBpcyByYXJlbHkgdXNlZC4gVEhFU0UKICAgICAgICAgICAgQVJFIEFMTCBPUFRJT05BTCBBTkQgWU9VIFBST0JBQkxZIERPTidUIE5FRUQgVE8gQUREIE9SCiAgICAgICAgICAgIFJFTU9WRSBBTllUSElORyBJTiBUSElTIFNFQ1RJT04gVE8gWU9VUiBDT05GSUcuICAoSW4gZXh0cmVtZQogICAgICAgICAgICBjYXNlcyB5b3UgbWF5IHdhbnQgdG8gdXNlIHRoZXNlIG9wdGlvbnMgdG8gbWFuYWdlIHRoZSBhbW91bnQKICAgICAgICAgICAgb2YgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHRoZSA8cGFyYW1ldGVyPi0tZGVidWdtc2cgK3JlbGF5CiAgICAgICAgICAgIDwvcGFyYW1ldGVyPiBvcHRpb24uKQogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iRmlsZSIgPSAiL2JsYW5jbyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHRoZSBsb2dmaWxlIGZvciB3aW5lLiBTZXQgdG8gQ09OIHRvIGxvZyB0byBzdGFuZGFyZCBvdXQuCiAgICAgICAgICAgIFRISVMgSVMgUkFSRUxZIFVTRUQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTcHlFeGNsdWRlIiA9ICJXTV9TSVpFO1dNX1RJTUVSOyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBFeGNsdWRlcyBkZWJ1ZyBtZXNzYWdlcyBhYm91dCA8Y29uc3RhbnQ+V01fU0laRTwvY29uc3RhbnQ+CiAgICAgICAgICAgIGFuZCA8Y29uc3RhbnQ+V01fVElNRVI8L2NvbnN0YW50PiBpbiB0aGUgbG9nZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlNweUluY2x1ZGUiID0gIldNX1NJWkU7V01fVElNRVI7IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEluY2x1ZGVzIGRlYnVnIG1lc3NhZ2VzIGFib3V0IDxjb25zdGFudD5XTV9TSVpFPC9jb25zdGFudD4KICAgICAgICAgICAgYW5kIDxjb25zdGFudD5XTV9USU1FUjwvY29uc3RhbnQ+IGluIHRoZSBsb2dmaWxlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVsYXlJbmNsdWRlIiA9ICJ1c2VyMzIuQ3JlYXRlV2luZG93QTtjb21jdGwzMi4qIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEluY2x1ZGUgb25seSB0aGUgbGlzdGVkIGZ1bmN0aW9ucyBpbiBhCiAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZyArcmVsYXk8L3BhcmFtZXRlcj4gdHJhY2UuICBUaGlzIGVudHJ5IGlzCiAgICAgICAgICAgIGlnbm9yZWQgaWYgdGhlcmUgaXMgYSA8cGFyYW1ldGVyPlJlbGF5RXhjbHVkZTwvcGFyYW1ldGVyPiBlbnRyeS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlJlbGF5RXhjbHVkZSIgPSAiUnRsRW50ZXJDcml0aWNhbFNlY3Rpb247UnRsTGVhdmVDcml0aWNhbFNlY3Rpb24iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRXhjbHVkZSB0aGUgbGlzdGVkIGZ1bmN0aW9ucyBpbiBhIAogICAgICAgICAgICA8cGFyYW1ldGVyPi0tZGVidWdtc2cgK3JlbGF5PC9wYXJhbWV0ZXI+IHRyYWNlLiAgVGhpcyBlbnRyeQogICAgICAgICAgICBvdmVycmlkZXMgYW55IHNldHRpbmdzIGluIGEgPHBhcmFtZXRlcj5SZWxheUluY2x1ZGU8L3BhcmFtZXRlcj4KICAgICAgICAgICAgZW50cnkuICBJZiBuZWl0aGVyIGVudHJ5IGlzIHByZXNlbnQgdGhlbiB0aGUgdHJhY2UgaW5jbHVkZXMKICAgICAgICAgICAgZXZlcnl0aGluZy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBJbiBib3RoIGVudHJpZXMgdGhlIGZ1bmN0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIAogICAgICAgICAgICBmdW5jdGlvbiBuYW1lIG9yIGFzIGEgbW9kdWxlIGFuZCBmdW5jdGlvbi4gIEluIHRoaXMgbGF0dGVyCiAgICAgICAgICAgIGNhc2Ugc3BlY2lmeSBhbiBhc3RlcmlzayBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgdG8gaW5jbHVkZQogICAgICAgICAgICBhbGwgZnVuY3Rpb25zIGluIHRoZSBtb2R1bGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW1JlZ2lzdHJ5XSBjYW4gYmUgdXNlZCB0byB0ZWxsIHdpbmUgd2hlcmUgeW91ciBvbGQgd2luZG93cwogICAgICAgICAgICByZWdpc3RyeSBmaWxlcyBleGlzdC4gVGhpcyBzZWN0aW9uIGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwKICAgICAgICAgICAgYW5kIHVzZWxlc3MgdG8gcGVvcGxlIHVzaW5nIHdpbmUgd2l0aG91dCBhbiBleGlzdGluZwogICAgICAgICAgICB3aW5kb3dzIGluc3RhbGxhdGlvbi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlVzZXJGaWxlTmFtZSIgPSAiL2RpcnMvdG8vdXNlci5yZWciPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHlvdXIgb2xkIDxmaWxlbmFtZT51c2VyLnJlZzwvZmlsZW5hbWU+IGZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW3R3ZWFrLmxheW91dF0gaXMgZGV2b3RlZCB0byB3aW5lJ3MgbG9vay4gVGhlcmUgaXMgb25seQogICAgICAgICAgICBvbmUgc2V0dGluZyBmb3IgaXQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJXaW5lTG9vayIgPSAid2luMzF8d2luOTV8d2luOTgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgV2lsbCBjaGFuZ2UgdGhlIGxvb2sgb2Ygd2luZSBmcm9tIFdpbmRvd3MgMy4xIHRvIFdpbmRvd3MgOTUuCiAgICAgICAgICAgIFRoZSA8bGl0ZXJhbD53aW45ODwvbGl0ZXJhbD4gc2V0dGluZyBiZWhhdmVzCiAgICAgICAgICAgIGp1c3QgbGlrZSA8bGl0ZXJhbD53aW45NTwvbGl0ZXJhbD4gbW9zdCBvZiB0aGUgdGltZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbcHJvZ3JhbXNdIGNhbiBiZSB1c2VkIHRvIHNheSB3aGF0IHByb2dyYW1zIHJ1biB1bmRlcgogICAgICAgICAgICBzcGVjaWFsIGNvbmRpdGlvbnMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICIvcHJvZ3JhbS90by9leGVjdXRlLmV4ZSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmFtIHRvIGJlIHJ1biBpZiB3aW5lIGlzIHN0YXJ0ZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcHJvZ3JhbS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN0YXJ0dXAiID0gIi9wcm9ncmFtL3RvL2V4ZWN1dGUuZXhlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdGhlIHByb2dyYW0gdG8gYXV0b21hdGljYWxseSBiZSBydW4gYXQgc3RhcnR1cCBldmVyeSB0aW1lLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW1dpbk1NXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbV2luTU1dIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIG11bHRpbWVkaWEgZHJpdmVycyBoYXZlIHRvIGJlIGxvYWRlZC4gU2luY2UKCSAgICB0aG9zZSBkcml2ZXJzIG1heSBkZXBlbmQgb24gdGhlIG11bHRpbWVkaWEgaW50ZXJmYWNlcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0KCSAgICAoT1NTLCBBbHNhLi4uIHRvIG5hbWUgYSBmZXcpLCBpdCdzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZSB3aGljaCBkcml2ZXIKCSAgICBoYXMgdG8gYmUgbG9hZGVkLgogICAgICAgICAgPC9wYXJhPgoKICAgICAgICAgIDxwYXJhPgoJICAgIFRoZSBjb250ZW50IG9mIHRoZSBzZWN0aW9uIGxvb2tzIGxpa2U6CgkgICAgPHByb2dyYW1saXN0aW5nPgpbV2luTU1dCiJEcml2ZXJzIiA9ICJ3aW5lb3NzLmRydiIKIldhdmVNYXBwZXIiID0gIm1zYWNtLmRydiIKIk1pZGlNYXBwZXIiID0gIm1pZGltYXAuZHJ2IgoJICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CgkgICAgQWxsIHRoZSBrZXlzIG11c3QgYmUgZGVmaW5lZDoKCSAgICA8aXRlbWl6ZWRsaXN0PgoJICAgICAgPGxpc3RpdGVtPgoJICAgICAgICA8cGFyYT4KCQkgIFRoZSAiRHJpdmVycyIga2V5IGlzIGEgJzsnIHNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZXMgbmFtZSwgZWFjaCBvZgoJCSAgdGhlbSBjb250YWluaW5nIGEgbG93IGxldmVsIGRyaXZlci4gQWxsIHRob3NlIGRyaXZlcnMgd2lsbCBiZSBsb2FkZWQKCQkgIHdoZW4gTU1TWVNURU0vV0lOTU0gaXMgc3RhcnRlZCBhbmQgd2lsbCBwcm92aWRlIHRoZWlyIGlubmVyIGZlYXR1cmVzLgoJICAgICAgICA8L3BhcmE+CgkgICAgICA8L2xpc3RpdGVtPgoJICAgICAgPGxpc3RpdGVtPgoJICAgICAgICA8cGFyYT4KCQkgIFRoZSAiV2F2ZU1hcHBlciIgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIFdhdmUKCQkgIE1hcHBlciBkcml2ZXIuIE9ubHkgb25lIHdhdmUgbWFwcGVyIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCgkgICAgICAgIDwvcGFyYT4KCSAgICAgIDwvbGlzdGl0ZW0+CgkgICAgICA8bGlzdGl0ZW0+CgkgICAgICAgIDxwYXJhPgoJCSAgVGhlICJNaWRpTWFwcGVyIiByZXByZXNlbnRzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgTUlESQoJCSAgTWFwcGVyIGRyaXZlci4gT25seSBvbmUgTUlESSBtYXBwZXIgY2FuIGJlIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4KCSAgICAgICAgPC9wYXJhPgoJICAgICAgPC9saXN0aXRlbT4KCSAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgIDwvcGFyYT4KCTwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0ibmV0d29yay1zZWN0aW9uIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW05ldHdvcmtdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtOZXR3b3JrXSBjb250YWlucyBzZXR0aW5ncyByZWxhdGVkIHRvCiAgICAgICAgICAgIG5ldHdvcmtpbmcuIEN1cnJlbnRseSB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSB0aGF0IGNhbiBiZSBzZXQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPlVzZURuc0NvbXB1dGVyTmFtZTwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSBib29sZWFuIHNldHRpbmcgKGRlZmF1bHQ6IDxsaXRlcmFsPlk8L2xpdGVyYWw+KSAKICAgICAgICAgICAgICAgICAgdGhhdCBhZmZlY3RzIHRoZSB3YXkgV2luZSBzZXRzIHRoZSBjb21wdXRlciBuYW1lLiBUaGUgY29tcHV0ZXIKICAgICAgICAgICAgICAgICAgbmFtZSBpbiB0aGUgV2luZG93cyB3b3JsZCBpcyB0aGUgc28tY2FsbGVkIDxlbXBoYXNpcz5OZXRCSU9TIG5hbWU8L2VtcGhhc2lzPi4KICAgICAgICAgICAgICAgICAgSXQgaXMgY29udGFpbmVkIGluIHRoZSA8dmFybmFtZT5Db21wdXRlck5hbWU8L3Zhcm5hbWU+IGluIHRoZSByZWdpc3RyeSBlbnRyeQogICAgICAgICAgICAgICAgICA8dmFybmFtZT5IS0VZX0xPQ0FMX01BQ0hJTkVcU3lzdGVtXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcQ29tcHV0ZXJOYW1lXENvbXB1dGVyTmFtZTwvdmFybmFtZT4uCiAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvICJZIiBvciBtaXNzaW5nLCBXaW5lIHdpbGwgc2V0IHRoZQogICAgICAgICAgICAgICAgICBOZXRCSU9TIG5hbWUgdG8gdGhlIFVuaXggaG9zdCBuYW1lIG9mIHlvdXIgY29tcHV0ZXIsIGlmIAogICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgdHJ1bmNhdGVkIHRvIDMxIGNoYXJhY3RlcnMuIFRoZSBVbml4IGhvc3RuYW1lIGlzIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgb2YgdGhlIHNoZWxsIGNvbW1hbmQgPGNvbW1hbmQ+aG9zdG5hbWU8L2NvbW1hbmQ+LCB1cCB0byBhbmQgbm90CiAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgZmlyc3QgZG90ICgnLicpLiBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgbWVhbnMgdGhhdAogICAgICAgICAgICAgICAgICBXaW5kb3dzIHByb2dyYW1zIHJ1bm5pbmcgdW5kZXIgV2luZSBjYW5ub3QgY2hhbmdlIHRoZSBOZXRCSU9TIGNvbXB1dGVyIG5hbWUuCiAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvICJOIiwgV2luZSB3aWxsIHVzZSB0aGUgcmVnaXN0cnkgdmFsdWUgYWJvdmUKICAgICAgICAgICAgICAgICAgdG8gc2V0IHRoZSBOZXRCSU9TIG5hbWUuIE9ubHkgaWYgdGhlIHJlZ2lzdHJ5IGVudHJ5IGRvZXNuJ3QgZXhpc3QgKHVzdWFsbHkKICAgICAgICAgICAgICAgICAgb25seSBkdXJpbmcgdGhlIGZpcnN0IHdpbmUgc3RhcnR1cCkgaXQgd2lsbCB1c2UgdGhlIFVuaXggaG9zdG5hbWUgYXMKICAgICAgICAgICAgICAgICAgdXN1YWwuIFdpbmRvd3MgYXBwbGljYXRpb25zIGNhbiBjaGFuZ2UgdGhlIE5ldEJJT1MgbmFtZS4gVGhlIGNoYW5nZQogICAgICAgICAgICAgICAgICB3aWxsIGJlIGVmZmVjdGl2ZSBhZnRlciBhICJSZWJvb3QiLCBpLmUuIGFmdGVyIHJlc3RhcnRpbmcgV2luZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iYXBwZGVmYXVsdHMtc2VjdGlvbiI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtBcHBEZWZhdWx0c10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIHNlY3Rpb24gaXMgdXNlZCB0byBvdmVyd3JpdGUgY2VydGFpbiBzZXR0aW5ncyBvZiB0aGlzIGZpbGUgZm9yIGEKICAgICAgICAgICAgc3BlY2lhbCBwcm9ncmFtIHdpdGggZGlmZmVyZW50IHNldHRpbmdzLgogICAgICAgICAgICBbQXBwRGVmYXVsdHNdIGlzIG5vdCB0aGUgcmVhbCBuYW1lIG9mIHRoZSBzZWN0aW9uLiBUaGUgcmVhbCBuYW1lCiAgICAgICAgICAgIGNvbnNpc3RzIG9mIHRoZSBsZWFkaW5nIHdvcmQgQXBwRGVmYXVsdHMgZm9sbG93ZWQgYnkgdGhlIG5hbWUKICAgICAgICAgICAgb2YgdGhlIGV4ZWN1dGFibGUgdGhlIHNlY3Rpb24gaXMgdmFsaWQgZm9yLgoJICAgIFRoZSBlbmQgb2YgdGhlIHNlY3Rpb24gbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUKCSAgICBjb3JyZXNwb25kaW5nICJzdGFuZGFyZCIgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCgkgICAgdGhhdCBzaG91bGQgaGF2ZSBzb21lIG9mIGl0cyBzZXR0aW5ncyBvdmVyd3JpdHRlbiB3aXRoIHRoZQoJICAgIGFwcGxpY2F0aW9uIHNwZWNpZmljIHNldHRpbmdzIHlvdSBkZWZpbmUuCgkgICAgVGhlIHRocmVlIHBhcnRzIG9mIHRoZSBzZWN0aW9uIG5hbWUgYXJlIHNlcGFyYXRlZCBieSB0d28gYmFja3NsYXNoZXMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgQ3VycmVudGx5IHdpbmUgc3VwcG9ydHMgb25seSBvdmVyd3JpdGluZyB0aGUgc2VjdGlvbnMKICAgICAgICAgICAgW0RsbE92ZXJyaWRlc10sIFt4MTFkcnZdLCBbdmVyc2lvbl0gYW5kIFtkc291bmRdLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IG92ZXJ3cml0ZXMgdGhlIG5vcm1hbCBzZXR0aW5ncyBmb3IgYQogICAgICAgICAgICBwcm9ncmFtOgoJICAgIDxwcm9ncmFtbGlzdGluZz4KOzsgZGVmYXVsdCBzZXR0aW5ncwpbeDExZHJ2XQoiTWFuYWdlZCIgPSAiWSIKIkRlc2t0b3AiID0gIk4iCgo7OyBydW4gaW5zdGFsbCBpbiBkZXNrdG9wIG1vZGUKW0FwcERlZmF1bHRzXFxpbnN0YWxsLmV4ZVxceDExZHJ2XQoiTWFuYWdlZCIgPSAiTiIKIkRlc2t0b3AiID0gIjgwMHg2MDAiCgkgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5XaGVyZSBEbyBJIFB1dCBJdD88L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIHdpbmUgY29uZmlnIGZpbGUgY2FuIGdvIGluIHR3byBwbGFjZXMuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGMvd2luZS5jb25mPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgIEEgc3lzdGVtd2lkZSBjb25maWcgZmlsZSwgdXNlZCBmb3IgYW55b25lIHdobyBkb2Vzbid0CiAgICAgICAgICAgICAgICBoYXZlIHRoZWlyIG93bi4gTk9URTogdGhpcyBmaWxlIGlzIGN1cnJlbnRseSB1bnVzZWQgYXMgYQogICAgICAgICAgICAgICAgbmV3IGdsb2JhbCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSBpcyBub3QgaW4gcGxhY2UgYXQgdGhpcwogICAgICAgICAgICAgICAgdGltZS4KICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT4kSE9NRS8ud2luZS9jb25maWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgWW91ciBvd24gY29uZmlnIGZpbGUgKHdoaWNoIG9ubHkgaXMgdXNlZCBmb3IgeW91ciB1c2VyKS4KICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFNvIGNvcHkgeW91ciB2ZXJzaW9uIG9mIHRoZSB3aW5lIGNvbmZpZyBmaWxlIHRvCiAgICAgICAgICA8ZmlsZW5hbWU+JEhPTUUvLndpbmUvY29uZmlnPC9maWxlbmFtZT4KCSAgb3IgPGZpbGVuYW1lPi91c3IvbG9jYWwvZXRjL3dpbmUuY29uZjwvZmlsZW5hbWU+CgkgIGZvciB3aW5lIHRvIHJlY29nbml6ZSBpdC4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPldoYXQgSWYgSXQgRG9lc24ndCBXb3JrPzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGVyZSBpcyBhbHdheXMgYSBjaGFuY2UgdGhhdCB0aGluZ3Mgd2lsbCBnbyB3cm9uZy4gSWYgdGhlCiAgICAgICAgICB1bnRoaW5rYWJsZSBoYXBwZW5zLCByZXBvcnQgdGhlIHByb2JsZW0gdG8KCSAgPHVsaW5rIHVybD0iaHR0cDovL2J1Z3Mud2luZWhxLmNvbS8iPldpbmUgQnVnemlsbGE8L3VsaW5rPiwKCSAgdHJ5IHRoZSBuZXdzZ3JvdXAKICAgICAgICAgIDxzeXN0ZW1pdGVtPmNvbXAuZW11bGF0b3JzLm1zLXdpbmRvd3Mud2luZTwvc3lzdGVtaXRlbT4sCgkgIG9yIHRoZSBJUkNuZXQgY2hhbm5lbCA8c3lzdGVtaXRlbT4jV2luZUhRPC9zeXN0ZW1pdGVtPiBmb3VuZCBvbgogICAgICAgICAgaXJjLnN0ZWFsdGgubmV0OjY2NjgsCSBvciBjb25uZWN0ZWQgc2VydmVycy4KCSAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgbG9va2VkIG92ZXIgdGhpcyBkb2N1bWVudCB0aG9yb3VnaGx5LAoJICBhbmQgaGF2ZSBhbHNvIHJlYWQ6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPjxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPjwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vd3d3LndpbmVocS5vcmcvdHJvdWJsZS88L2ZpbGVuYW1lPgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgaW5kZWVkIGl0IGxvb2tzIGxpa2UgeW91J3ZlIGRvbmUgeW91ciByZXNlYXJjaCwgYmUKICAgICAgICAgIHByZXBhcmVkIGZvciBoZWxwZnVsIHN1Z2dlc3Rpb25zLiBJZiB5b3UgaGF2ZW4ndCwgYnJhY2UKICAgICAgICAgIHlvdXJzZWxmIGZvciBoZWF2aW5nIGZsYW1pbmcuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9IngxMWRydiI+CiAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgeDExZHJ2IERyaXZlcjwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLW92ZS1rYWF2ZW47IDxlbWFpbD4mZW1haWwtb3ZlLWthYXZlbjs8L2VtYWlsPgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL3gxMWRydjwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CgogICAgICA8cGFyYT4KICAgICAgICBNb3N0IFdpbmUgdXNlcnMgcnVuIFdpbmUgdW5kZXIgdGhlIHdpbmRvd2luZyBzeXN0ZW0ga25vd24gYXMKICAgICAgICBYMTEuIER1cmluZyBtb3N0IG9mIFdpbmUncyBoaXN0b3J5LCB0aGlzIHdhcyB0aGUgb25seSBkaXNwbGF5CiAgICAgICAgZHJpdmVyIGF2YWlsYWJsZSwgYnV0IGluIHJlY2VudCB5ZWFycywgcGFydHMgb2YgV2luZSBoYXMgYmVlbgogICAgICAgIHJlb3JnYW5pemVkIHRvIGFsbG93IGZvciBvdGhlciBkaXNwbGF5IGRyaXZlcnMgKGFsdGhvdWdoIHRoZQogICAgICAgIG9ubHkgYWx0ZXJuYXRpdmUgY3VycmVudGx5IGF2YWlsYWJsZSBpcyBQYXRyaWsgU3RyaWR2YWxsJ3MKICAgICAgICBuY3Vyc2VzLWJhc2VkIHR0eWRydiwgd2hpY2ggaGUgY2xhaW1zIHdvcmtzIGZvciBkaXNwbGF5aW5nCiAgICAgICAgY2FsYy5leGUpLiBUaGUgZGlzcGxheSBkcml2ZXIgaXMgY2hvc2VuIHdpdGggdGhlCiAgICAgICAgPGxpdGVyYWw+R3JhcGhpY3NEcml2ZXI8L2xpdGVyYWw+IG9wdGlvbiBpbiB0aGUgW3dpbmVdIHNlY3Rpb24KICAgICAgICBvZiA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiwgYnV0IEkgd2lsbCBvbmx5IGNvdmVyIHRoZQogICAgICAgIHgxMWRydiBkcml2ZXIgaW4gdGhpcyBhcnRpY2xlLgogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPngxMWRydiBtb2RlcyBvZiBvcGVyYXRpb248L3RpdGxlPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSB4MTFkcnYgZHJpdmVyIGNvbnNpc3RzIG9mIHR3byBjb25jZXB0dWFsbHkgZGlzdGluY3QKICAgICAgICAgIHBpZWNlcywgdGhlIGdyYXBoaWNzIGRyaXZlciAoR0RJIHBhcnQpLCBhbmQgdGhlIHdpbmRvd2luZwogICAgICAgICAgZHJpdmVyIChVU0VSIHBhcnQpLiBCb3RoIG9mIHRoZXNlIGFyZSBsaW5rZWQgaW50byB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5saWJ4MTFkcnYuc288L2ZpbGVuYW1lPiBtb2R1bGUsIHRob3VnaCAod2hpY2ggeW91CiAgICAgICAgICBsb2FkIHdpdGggdGhlIDxsaXRlcmFsPkdyYXBoaWNzRHJpdmVyPC9saXRlcmFsPiBvcHRpb24pLiBJbgogICAgICAgICAgV2luZSwgcnVubmluZyBvbiBYMTEsIHRoZSBncmFwaGljcyBkcml2ZXIgbXVzdCBkcmF3IG9uCiAgICAgICAgICBkcmF3YWJsZXMgKHdpbmRvdyBpbnRlcmlvcnMpIHByb3ZpZGVkIGJ5IHRoZSB3aW5kb3dpbmcKICAgICAgICAgIGRyaXZlci4gVGhpcyBkaWZmZXJzIGEgYml0IGZyb20gdGhlIFdpbmRvd3MgbW9kZWwsIHdoZXJlIHRoZQogICAgICAgICAgd2luZG93aW5nIHN5c3RlbSBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGRldmljZSBjb250ZXh0cwogICAgICAgICAgY29udHJvbGxlZCBieSB0aGUgZ3JhcGhpY3MgZHJpdmVyLCBhbmQgYXBwbGljYXRpb25zIGFyZQogICAgICAgICAgYWxsb3dlZCB0byBob29rIGludG8gdGhpcyByZWxhdGlvbnNoaXAgYW55d2hlcmUgdGhleSBsaWtlLgogICAgICAgICAgVGh1cywgdG8gcHJvdmlkZSBhbnkgcmVhc29uYWJsZSB0cmFkZW9mZiBiZXR3ZWVuCiAgICAgICAgICBjb21wYXRpYmlsaXR5IGFuZCB1c2FiaWxpdHksIHRoZSB4MTFkcnYgaGFzIHRocmVlIGRpZmZlcmVudAogICAgICAgICAgbW9kZXMgb2Ygb3BlcmF0aW9uLgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPk1hbmFnZWQ8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0LiBTcGVjaWZpZWQgYnkgdXNpbmcgdGhlIDxsaXRlcmFsPk1hbmFnZWQ8L2xpdGVyYWw+CiAgICAgICAgICAgICAgICB3aW5lIGNvbmZpZyBmaWxlIG9wdGlvbiAoc2VlIGJlbG93KS4KICAgICAgICAgICAgICAgIE9yZGluYXJ5IHRvcC1sZXZlbCBmcmFtZSB3aW5kb3dzIHdpdGggdGhpY2sgYm9yZGVycywKICAgICAgICAgICAgICAgIHRpdGxlIGJhcnMsIGFuZCBzeXN0ZW0gbWVudXMgd2lsbCBiZSBtYW5hZ2VkIGJ5IHlvdXIKICAgICAgICAgICAgICAgIHdpbmRvdyBtYW5hZ2VyLiBUaGlzIGxldHMgdGhlc2UgYXBwbGljYXRpb25zIGludGVncmF0ZQogICAgICAgICAgICAgICAgYmV0dGVyIHdpdGggdGhlIHJlc3Qgb2YgeW91ciBkZXNrdG9wLCBidXQgbWF5IG5vdAogICAgICAgICAgICAgICAgYWx3YXlzIHdvcmsgcGVyZmVjdGx5LiAoQSByZXdyaXRlIG9mIHRoaXMgbW9kZSBvZgogICAgICAgICAgICAgICAgb3BlcmF0aW9uLCB0byBtYWtlIGl0IG1vcmUgcm9idXN0IGFuZCBsZXNzIHBhdGNoeSwgaXMKICAgICAgICAgICAgICAgIGN1cnJlbnRseSBiZWluZyBkb25lLCB0aG91Z2gsIGFuZCBpdCdzIHBsYW5uZWQgdG8gYmUKICAgICAgICAgICAgICAgIGZpbmlzaGVkIGJlZm9yZSB0aGUgV2luZSAxLjAgcmVsZWFzZS4pCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5Vbm1hbmFnZWQvTm9ybWFsPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBXaW5kb3ctbWFuYWdlci1pbmRlcGVuZGVudCAoYW55IHJ1bm5pbmcKICAgICAgICAgICAgICAgIHdpbmRvdyBtYW5hZ2VyIGlzIGlnbm9yZWQgY29tcGxldGVseSkuIFdpbmRvdwogICAgICAgICAgICAgICAgZGVjb3JhdGlvbnMgKHRpdGxlIGJhcnMsIGJvcmRlcnMsIGV0YykgYXJlIGRyYXduIGJ5CiAgICAgICAgICAgICAgICBXaW5lIHRvIGxvb2sgYW5kIGZlZWwgbGlrZSB0aGUgcmVhbCBXaW5kb3dzLiBUaGlzIGlzCiAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggYXBwbGljYXRpb25zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUKICAgICAgICAgICAgICAgIHRvIGNvbXB1dGUgdGhlIGV4YWN0IHNpemVzIG9mIGFueSBzdWNoIGRlY29yYXRpb25zLCBvcgogICAgICAgICAgICAgICAgdGhhdCB3YW50IHRvIGRyYXcgdGhlaXIgb3duLgogICAgICAgICAgICAgICAgVW5tYW5hZ2VkIG1vZGUgaXMgb25seSB1c2VkIGlmIGJvdGggTWFuYWdlZCBhbmQgRGVza3RvcAogICAgICAgICAgICAgICAgYXJlIHNldCB0byBkaXNhYmxlZC4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPkRlc2t0b3AtaW4tYS1Cb3g8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFNwZWNpZmllZCBieSB1c2luZyB0aGUgPGxpdGVyYWw+RGVza3RvcDwvbGl0ZXJhbD4KCQl3aW5lIGNvbmZpZyBmaWxlIG9wdGlvbiAoc2VlIGJlbG93KS4KICAgICAgICAgICAgICAgIChhZGRpbmcgYSBnZW9tZXRyeSwgZS5nLiA8bGl0ZXJhbD44MDB4NjAwPC9saXRlcmFsPgoJCWZvciBhIHN1Y2gtc2l6ZWQgZGVza3RvcCwgb3IKICAgICAgICAgICAgICAgIGV2ZW4gPGxpdGVyYWw+ODAweDYwMCswKzA8L2xpdGVyYWw+IHRvCiAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHBvc2l0aW9uIHRoZSBkZXNrdG9wIGF0IHRoZSB1cHBlci1sZWZ0CiAgICAgICAgICAgICAgICBjb3JuZXIgb2YgdGhlIGRpc3BsYXkpLiBUaGlzIGlzIHRoZSBtb2RlIG1vc3QKICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgV2luZG93cyBtb2RlbC4gQWxsIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICB3aW5kb3dzIHdpbGwganVzdCBiZSBXaW5lLWRyYXduIHdpbmRvd3MgaW5zaWRlIHRoZQogICAgICAgICAgICAgICAgV2luZS1wcm92aWRlZCBkZXNrdG9wIHdpbmRvdyAod2hpY2ggd2lsbCBpdHNlbGYgYmUKICAgICAgICAgICAgICAgIG1hbmFnZWQgYnkgeW91ciB3aW5kb3cgbWFuYWdlciksIGFuZCBXaW5kb3dzCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgY2FuIHJvYW0gZnJlZWx5IHdpdGhpbiB0aGlzIHZpcnR1YWwKICAgICAgICAgICAgICAgIHdvcmtzcGFjZSBhbmQgdGhpbmsgdGhleSBvd24gaXQgYWxsLCB3aXRob3V0CiAgICAgICAgICAgICAgICBkaXN0dXJiaW5nIHlvdXIgb3RoZXIgWCBhcHBzLgoJCU5vdGU6IGN1cnJlbnRseSB0aGVyZSdzIG9uZSBkZXNrdG9wIHdpbmRvdyBmb3IgZXZlcnkKCQlhcHBsaWNhdGlvbjsgdGhpcyB3aWxsIGJlIGZpeGVkIGF0IHNvbWUgdGltZS4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+VGhlIFt4MTFkcnZdIHNlY3Rpb248L3RpdGxlPgoKICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+TWFuYWdlZDwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgV2luZSBjYW4gbGV0IGZyYW1lIHdpbmRvd3MgYmUgbWFuYWdlZCBieSB5b3VyIHdpbmRvdwogICAgICAgICAgICAgICAgbWFuYWdlci4gVGhpcyBvcHRpb24gc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdGhhdAogICAgICAgICAgICAgICAgYnkgZGVmYXVsdC4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPkRlc2t0b3A8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBtYWluIGRlc2t0b3Agd2luZG93IG9mIGEgc3BlY2lmaWVkIHNpemUKCQl0byBkaXNwbGF5IGFsbCBXaW5kb3dzIGFwcGxpY2F0aW9ucyBpbi4KCQlUaGUgc2l6ZSBhcmd1bWVudCBjb3VsZCBlLmcuIGJlICI4MDB4NjAwIi4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPkRYR3JhYjwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgSWYgeW91IGRvbid0IHVzZSBER0EsIHlvdSBtYXkgd2FudCBhbiBhbHRlcm5hdGl2ZQogICAgICAgICAgICAgICAgbWVhbnMgdG8gY29udmluY2UgdGhlIG1vdXNlIGN1cnNvciB0byBzdGF5IHdpdGhpbiB0aGUKICAgICAgICAgICAgICAgIGdhbWUgd2luZG93LiBUaGlzIG9wdGlvbiBkb2VzIHRoYXQuIE9mIGNvdXJzZSwgYXMgd2l0aAogICAgICAgICAgICAgICAgREdBLCBpZiBXaW5lIGNyYXNoZXMsIHlvdSdyZSBpbiB0cm91YmxlIChhbHRob3VnaCBub3QKICAgICAgICAgICAgICAgIGFzIGJhZGx5IGFzIGluIHRoZSBER0EgY2FzZSwgc2luY2UgeW91IGNhbiBzdGlsbCB1c2UKICAgICAgICAgICAgICAgIHRoZSBrZXlib2FyZCB0byBnZXQgb3V0IG9mIFgpLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+VXNlREdBPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IERpcmVjdERyYXcgdG8gdXNlCiAgICAgICAgICAgICAgICBYRnJlZTg2J3MgPGZpcnN0dGVybT5EaXJlY3QgR3JhcGhpY3MKICAgICAgICAgICAgICAgICAgQXJjaGl0ZWN0dXJlPC9maXJzdHRlcm0+IChER0EpLCB3aGljaCBpcyBhYmxlIHRvCiAgICAgICAgICAgICAgICB0YWtlIG92ZXIgdGhlIGVudGlyZSBkaXNwbGF5IGFuZCBydW4gdGhlIGdhbWUKICAgICAgICAgICAgICAgIGZ1bGwtc2NyZWVuIGF0IG1heGltdW0gc3BlZWQuIChXaXRoIERHQTEgKFhGcmVlODYKICAgICAgICAgICAgICAgIDMueCksIHlvdSBzdGlsbCBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgWCBzZXJ2ZXIgdG8gdGhlCiAgICAgICAgICAgICAgICBnYW1lJ3MgcmVxdWVzdGVkIGJwcCBmaXJzdCwgYnV0IHdpdGggREdBMiAoWEZyZWU4NgogICAgICAgICAgICAgICAgNC54KSwgcnVudGltZSBkZXB0aC1zd2l0Y2hpbmcgbWF5IGJlIHBvc3NpYmxlLAogICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHlvdXIgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzLikgQnV0IGJlIGF3YXJlCiAgICAgICAgICAgICAgICB0aGF0IGlmIFdpbmUgY3Jhc2hlcyB3aGlsZSBpbiBER0EgbW9kZSwgaXQgbWF5IG5vdCBiZQogICAgICAgICAgICAgICAgcG9zc2libGUgdG8gcmVnYWluIGNvbnRyb2wgb3ZlciB5b3VyIGNvbXB1dGVyIHdpdGhvdXQKICAgICAgICAgICAgICAgIHJlYm9vdGluZy4gREdBIG5vcm1hbGx5IHJlcXVpcmVzIGVpdGhlciByb290CiAgICAgICAgICAgICAgICBwcml2aWxlZ2VzIG9yIHJlYWQvd3JpdGUgYWNjZXNzIHRvCiAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9tZW08L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPlVzZVhTaG08L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCB3YW50IERpcmVjdFggdG8gdXNlIERHQSwgeW91IGNhbiBhdCBsZWFzdAogICAgICAgICAgICAgICAgdXNlIFggU2hhcmVkIE1lbW9yeSBleHRlbnNpb25zIChYU2htKS4gSXQgaXMgbXVjaAogICAgICAgICAgICAgICAgc2xvd2VyIHRoYW4gREdBLCBzaW5jZSB0aGUgYXBwIGRvZXNuJ3QgaGF2ZSBkaXJlY3QKICAgICAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgZnJhbWUgYnVmZmVyLCBidXQgdXNpbmcgc2hhcmVkCiAgICAgICAgICAgICAgICBtZW1vcnkgdG8gZHJhdyB0aGUgZnJhbWUgaXMgYXQgbGVhc3QgZmFzdGVyIHRoYW4KICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIGRhdGEgdGhyb3VnaCB0aGUgc3RhbmRhcmQgWDExIHNvY2tldCwgZXZlbgogICAgICAgICAgICAgICAgdGhvdWdoIFdpbmUncyBYU2htIHN1cHBvcnQgaXMgc3RpbGwga25vd24gdG8gY3Jhc2gKICAgICAgICAgICAgICAgIHNvbWV0aW1lcy4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPkRlc2t0b3BEb3VibGVCdWZmZXJlZDwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSB1c2UgdGhlCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyPi0tZGVza3RvcDwvcGFyYW1ldGVyPiBjb21tYW5kLWxpbmUgb3B0aW9uCiAgICAgICAgICAgICAgICB0byBydW4gaW4gYSBkZXNrdG9wIHdpbmRvdy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8KICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgZGVza3RvcCB3aW5kb3cgd2l0aCBhIGRvdWJsZS1idWZmZXJlZAogICAgICAgICAgICAgICAgdmlzdWFsLCBzb21ldGhpbmcgbW9zdCBPcGVuR0wgZ2FtZXMgbmVlZCB0byBydW4KICAgICAgICAgICAgICAgIGNvcnJlY3RseS4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPkFsbG9jU3lzdGVtQ29sb3JzPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBBcHBsaWVzIG9ubHkgaWYgeW91IGhhdmUgYSBwYWxldHRlLWJhc2VkIGRpc3BsYXksIGkuZS4KICAgICAgICAgICAgICAgIGlmIHlvdXIgWCBzZXJ2ZXIgaXMgc2V0IHRvIGEgZGVwdGggb2YgOGJwcCwgYW5kIGlmIHlvdQogICAgICAgICAgICAgICAgaGF2ZW4ndCByZXF1ZXN0ZWQgYSBwcml2YXRlIGNvbG9yIG1hcC4gSXQgc3BlY2lmaWVzCiAgICAgICAgICAgICAgICB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2hhcmVkIGNvbG9ybWFwIGNlbGxzIChwYWxldHRlCiAgICAgICAgICAgICAgICBlbnRyaWVzKSBXaW5lIHNob3VsZCBvY2N1cHkuIFRoZSBoaWdoZXIgdGhpcyB2YWx1ZSwKICAgICAgICAgICAgICAgIHRoZSBsZXNzIGNvbG9ycyB3aWxsIGJlIGF2YWlsYWJsZSB0byBvdGhlcgogICAgICAgICAgICAgICAgYXBwbGljYXRpb25zLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+UHJpdmF0ZUNvbG9yTWFwPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBBcHBsaWVzIG9ubHkgaWYgeW91IGhhdmUgYSBwYWxldHRlLWJhc2VkIGRpc3BsYXksIGkuZS4KICAgICAgICAgICAgICAgIGlmIHlvdXIgWCBzZXJ2ZXIgaXMgc2V0IHRvIGEgZGVwdGggb2YgOGJwcC4gSXQKICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgc2hhcmVkIGNvbG9yCiAgICAgICAgICAgICAgICBtYXAsIGJ1dCBhIHByaXZhdGUgY29sb3IgbWFwLCB3aGVyZSBhbGwgMjU2IGNvbG9ycyBhcmUKICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IFdpbmUncyBwcml2YXRlCiAgICAgICAgICAgICAgICBjb2xvciBtYXAgaXMgb25seSBzZWVuIHdoaWxlIHRoZSBtb3VzZSBwb2ludGVyIGlzCiAgICAgICAgICAgICAgICBpbnNpZGUgYSBXaW5lIHdpbmRvdywgc28gcHN5Y2hlZGVsaWMgZmxhc2hpbmcgYW5kCiAgICAgICAgICAgICAgICBmdW5reSBjb2xvcnMgd2lsbCBiZWNvbWUgcm91dGluZSBpZiB5b3UgdXNlIHRoZSBtb3VzZQogICAgICAgICAgICAgICAgYSBsb3QuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5TeW5jaHJvbm91czwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgVG8gYmUgdXNlZCBmb3IgZGVidWdnaW5nIFgxMSBvcGVyYXRpb25zLgoJCUlmIFdpbmUgY3Jhc2hlcyB3aXRoIGFuIFgxMSBlcnJvciwgdGhlbiB5b3Ugc2hvdWxkIGVuYWJsZQoJCVN5bmNocm9ub3VzIG1vZGUgdG8gZGlzYWJsZSBYMTEgcmVxdWVzdCBjYWNoaW5nIGluIG9yZGVyCgkJdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFgxMSBlcnJvciBoYXBwZW5zIGRpcmVjdGx5IGFmdGVyCgkJdGhlIGNvcnJlc3BvbmRpbmcgWDExIGNhbGwgaW4gdGhlIGxvZyBmaWxlIGFwcGVhcnMuCgkJV2lsbCBzbG93IGRvd24gWDExIG91dHB1dCAhCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5TY3JlZW5EZXB0aDwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgQXBwbGllcyBvbmx5IHRvIG11bHRpLWRlcHRoIGRpc3BsYXlzLiBJdCBzcGVjaWZpZXMKICAgICAgICAgICAgICAgIHdoaWNoIG9mIHRoZSBhdmFpbGFibGUgZGVwdGhzIFdpbmUgc2hvdWxkIHVzZSAoYW5kCiAgICAgICAgICAgICAgICB0ZWxsIFdpbmRvd3MgYXBwcyBhYm91dCkuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5EaXNwbGF5PC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGljaCBYMTEgZGlzcGxheSB0byB1c2UsIGFuZCBpZgogICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB3aWxsIG92ZXJyaWRlIHRoZQogICAgICAgICAgICAgICAgPGVudmFyPkRJU1BMQVk8L2VudmFyPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPlBlcmZlY3RHcmFwaGljczwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gb25seSBkZXRlcm1pbmVzIHdoZXRoZXIgZmFzdCBYMTEgcm91dGluZXMKICAgICAgICAgICAgICAgIG9yIGV4YWN0IFdpbmUgcm91dGluZXMgd2lsbCBiZSB1c2VkIGZvciBjZXJ0YWluIFJPUAogICAgICAgICAgICAgICAgY29kZXMgaW4gYmxpdCBvcGVyYXRpb25zLiBNb3N0IHVzZXJzIHdvbid0IG5vdGljZSBhbnkKICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5UZXh0Q1A8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KCSAgICAgICAgQ29kZXBhZ2UgdG8gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSB0ZXh0IGluIFgxMQoJCW91dHB1dC4gU29tZSBzYW1wbGUgdmFsdWVzIHdvdWxkIGJlIDQzNyAoVVNBLCBDYW5hZGEpLAoJCTg1MCAoRXVyb3BlKSwgODUyIChDZW50cmFsL0Vhc3Rlcm4gRXVyb3BlKSwgODU1CgkJKEN5cmlsbGljKS4gRm9yIGFkZGl0aW9uYWwgc3VpdGFibGUgdmFsdWVzLCBzZWUgZS5nLiB0aGUgTGludXgKCQlrZXJuZWwncyBjb2RlcGFnZSBjb25maWd1cmF0aW9uIHBhZ2UuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICAgICZyZWdpc3RyeTsKCiAgICA8c2VjdDEgaWQ9IndpbmRvd3MtdmVyc2lvbnMiPgoKICAgICAgPHRpdGxlPlNldHRpbmcgdGhlIHdpbmRvd3MgYW5kIERPUyB2ZXJzaW9uIHZhbHVlIHRoYXQncyBwYXNzZWQgdG8KICAgICAgcHJvZ3JhbXM8L3RpdGxlPgogICAgICAKICAgICAgPHBhcmE+CiAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1hbmRyZWFzLW1vaHI7IDxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+CiAgICAgICAgT2N0IDE4IDIwMDIKICAgICAgPC9wYXJhPgoKICAgICAgPHBhcmE+CiAgICAgICAgVGhlIHdpbmRvd3MgYW5kIERPUyB2ZXJzaW9uIHZhbHVlIGEgcHJvZ3JhbSBnZXRzIGUuZy4gYnkgY2FsbGluZyB0aGUKCVdpbmRvd3MgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHBsYXlzIGEgdmVyeSBpbXBvcnRhbnQgcm9sZToKCUlmIHlvdXIgV2luZSBpbnN0YWxsYXRpb24gZm9yIHdoYXRldmVyIHJlYXNvbiBmYWlscyB0byBwcm92aWRlCgl0byB5b3VyIHByb2dyYW0gdGhlIGNvcnJlY3QgdmVyc2lvbiB2YWx1ZSB0aGF0IGl0IGV4cGVjdHMsCgl0aGVuIHRoZSBwcm9ncmFtIG1pZ2h0IGFzc3VtZSBzb21lIHZlcnkgYmFkIHRoaW5ncyBhbmQgZmFpbCAoaW4KCXRoZSB3b3JzdCBjYXNlIGV2ZW4gc2lsZW50bHkgISkuCiAgICAKICAgICAgICBGb3J0dW5hdGVseSBXaW5lIGNvbnRhaW5zIHNvbWUgbW9yZSBvciBsZXNzIGludGVsbGlnZW50IFdpbmRvd3MKCXZlcnNpb24gZ3Vlc3NpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIFdpbmRvd3MKCXZlcnNpb24gYSBwcm9ncmFtIG1pZ2h0IGV4cGVjdCBhbmQgcGFzcyB0aGF0IG9uZSBvbiB0byB0aGUKCXByb2dyYW0uCgoJVGh1cyB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBsaWdodGx5IGNvbmZpZ3VyZSBhIHZlcnNpb24gdmFsdWUsIGFzIHRoaXMgd2lsbCBiZSBhICJmb3JjZWQiIHZhbHVlIGFuZCB0aHVzIHR1cm4gb3V0IHRvIGJlIHJhdGhlciBoYXJtZnVsIHRvIHByb3BlciBvcGVyYXRpb24uIEluIG90aGVyIHdvcmRzOiBvbmx5IGV4cGxpY2l0bHkgc2V0IGEgV2luZG93cyB2ZXJzaW9uIHZhbHVlIGluIGNhc2UgV2luZSdzIG93biB2ZXJzaW9uIGRldGVjdGlvbiB3YXMgdW5hYmxlIHRvIHByb3ZpZGUgdGhlIGNvcnJlY3QgV2luZG93cyB2ZXJzaW9uIGFuZCB0aGUgcHJvZ3JhbSBmYWlscy4KICAgICAgPC9wYXJhPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Ib3cgdG8gY29uZmlndXJlIHRoZSBXaW5kb3dzIGFuZCBET1MgdmVyc2lvbiB2YWx1ZSBXaW5lCglzaG91bGQgcmV0dXJuPC90aXRsZT4KCQoJPHBhcmE+CglUaGUgdmVyc2lvbiB2YWx1ZXMgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIHdpbmUgY29uZmlnIGZpbGUgaW4KCXRoZSBbVmVyc2lvbl0gc2VjdGlvbi4KCTwvcGFyYT4KCgk8dmFyaWFibGVsaXN0PgoJICA8dmFybGlzdGVudHJ5PgoJICAgIDx0ZXJtPiJXaW5kb3dzIiA9ICImbHQ7dmVyc2lvbiBzdHJpbmcmZ3Q7IjwvdGVybT4KCSAgICA8bGlzdGl0ZW0+CgkgICAgICA8cGFyYT4KCSAgICAgICAgZGVmYXVsdDogbm9uZTsgY2hvc2VuIGJ5IHNlbWktaW50ZWxsaWdlbnQgZGV0ZWN0aW9uCgkgICAgICAgIG1lY2hhbmlzbSBiYXNlZCBvbiBETEwgZW52aXJvbm1lbnQuCgkgICAgICAgIFVzZWQgdG8gc3BlY2lmeSB3aGljaCBXaW5kb3dzIHZlcnNpb24gdG8gcmV0dXJuIHRvCgkgICAgICAgIHByb2dyYW1zICAoZm9yY2VkICB2YWx1ZSwgb3ZlcnJpZGVzIHN0YW5kYXJkIGRldGVjdGlvbgoJICAgICAgICBtZWNoYW5pc20gICEpLiBWYWxpZCAgc2V0dGluZ3MgYXJlIGUuZy4gIndpbjMxIiwgIndpbjk1IiwKCSAgICAgICAgIndpbjk4IiwgICJ3aW4yayIsICAid2lueHAiLgoJCUFsc28gdmFsaWQgYXMgYW4KCQk8bGluayBsaW5rZW5kPSJhcHBkZWZhdWx0cy1zZWN0aW9uIj5BcHBEZWZhdWx0czwvbGluaz4KCSAgICAgICAgc2V0dGluZyAocmVjb21tZW5kZWQvcHJlZmVycmVkIHVzZSkuCgkgICAgICA8L3BhcmE+CgkgICAgPC9saXN0aXRlbT4KCSAgPC92YXJsaXN0ZW50cnk+CgkgIDx2YXJsaXN0ZW50cnk+CgkgICAgPHRlcm0+IkRPUyI9IiZsdDt2ZXJzaW9uIHN0cmluZyZndDsiPC90ZXJtPgoJICAgIDxsaXN0aXRlbT4KCSAgICAgIDxwYXJhPgoJICAgICAgICBVc2VkIHRvIHNwZWNpZnkgdGhlIERPUyB2ZXJzaW9uIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkCgkJdG8gcHJvZ3JhbXMuIE9ubHkgdGFrZXMgZWZmZWN0IGluIGNhc2UgV2luZSBhY3RzIGFzCgkJIndpbjMxIiBXaW5kb3dzIHZlcnNpb24gISBDb21tb24gRE9TIHZlcnNpb24gc2V0dGluZ3MKCQlpbmNsdWRlIDYuMjIsIDYuMjAsIDYuMDAsIDUuMDAsIDQuMDAsIDMuMzAsIDMuMTAuCgkJQWxzbyB2YWxpZCBhcyBhbgoJCTxsaW5rIGxpbmtlbmQ9ImFwcGRlZmF1bHRzLXNlY3Rpb24iPkFwcERlZmF1bHRzPC9saW5rPgoJICAgICAgICBzZXR0aW5nIChyZWNvbW1lbmRlZC9wcmVmZXJyZWQgdXNlKS4KCSAgICAgIDwvcGFyYT4KCSAgICA8L2xpc3RpdGVtPgoJICA8L3Zhcmxpc3RlbnRyeT4KCTwvdmFyaWFibGVsaXN0PgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KICAgIAogICAgPHNlY3QxIGlkPSJjZHJvbS1sYWJlbHMiPgogICAgICA8c2VjdDFpbmZvPgogICAgICAgIDxhdXRob3Jncm91cD4KICAgICAgICAgIDxhdXRob3I+CiAgICAgICAgICAgIDxmaXJzdG5hbWU+UGV0cjwvZmlyc3RuYW1lPgogICAgICAgICAgICA8c3VybmFtZT5Ub21hc2VrPC9zdXJuYW1lPgogICAgICAgICAgICA8YWZmaWxpYXRpb24+CiAgICAgICAgICAgICAgPGFkZHJlc3M+PGVtYWlsPiZlbWFpbC1wZXRyLXRvbWFzZWs7PC9lbWFpbD48L2FkZHJlc3M+CiAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CiAgICAgICAgICAgIDxjb250cmliPk5vdiAxNCAxOTk5PC9jb250cmliPgogICAgICAgICAgPC9hdXRob3I+CiAgICAgICAgICA8YXV0aG9yPgogICAgICAgICAgICA8Zmlyc3RuYW1lPkFuZHJlYXM8L2ZpcnN0bmFtZT4KICAgICAgICAgICAgPHN1cm5hbWU+TW9ocjwvc3VybmFtZT4KICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgogICAgICAgICAgICAgIDxhZGRyZXNzPjxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+PC9hZGRyZXNzPgogICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgogICAgICAgICAgICA8Y29udHJpYj5KYW4gMjUgMjAwMDwvY29udHJpYj4KICAgICAgICAgIDwvYXV0aG9yPgogICAgICAgIDwvYXV0aG9yZ3JvdXA+CiAgICAgIDwvc2VjdDFpbmZvPgoKICAgICAgPHRpdGxlPkRyaXZlIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgd2l0aCB3aW5lPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1wZXRyLXRvbWFzZWs7IDxlbWFpbD4mZW1haWwtcGV0ci10b21hc2VrOzwvZW1haWw+CiAgICAgICAgTm92IDE0IDE5OTkKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBDaGFuZ2VzIGJ5ICZuYW1lLWFuZHJlYXMtbW9ocjsgPGVtYWlsPiZlbWFpbC1hbmRyZWFzLW1vaHI7PC9lbWFpbD4KICAgICAgICBKYW4gMjUgMjAwMAogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2Nkcm9tLWxhYmVsczwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIFVudGlsIG5vdywgeW91ciBvbmx5IHBvc3NpYmlsaXR5IG9mIHNwZWNpZnlpbmcgZHJpdmUgdm9sdW1lCiAgICAgICAgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyB3YXMgdG8gc2V0IHRoZW0gbWFudWFsbHkgaW4gdGhlIHdpbmUKICAgICAgICBjb25maWcgZmlsZS4gQnkgbm93LCB3aW5lIGNhbiByZWFkIHRoZW0gZGlyZWN0bHkgZnJvbSB0aGUKICAgICAgICBkZXZpY2UgYXMgd2VsbC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBtYW55IFdpbiA5eCBnYW1lcyBvcgogICAgICAgIGZvciBzZXR1cCBwcm9ncmFtcyBkaXN0cmlidXRlZCBvbiBDRC1ST01zIHRoYXQgY2hlY2sgZm9yCiAgICAgICAgdm9sdW1lIGxhYmVsLgogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPldoYXQncyBTdXBwb3J0ZWQ/PC90aXRsZT4KCiAgICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+CiAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5GaWxlIFN5c3RlbTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkNvbW1lbnQ8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5GQVQgc3lzdGVtczwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+aGQsIGZsb3BweTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVhZHMgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVyczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5JU085NjYwPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5jZHJvbTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVhZHMgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyAobm90IG1peGVkLW1vZGUgQ0RzIHlldCAhKTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3Rncm91cD4KICAgICAgICA8L2luZm9ybWFsdGFibGU+CgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Ib3cgVG8gU2V0IFVwPzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBSZWFkaW5nIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMganVzdCB3b3JrcyBhdXRvbWFnaWNhbGx5CiAgICAgICAgICBpZiB5b3Ugc3BlY2lmeSBhIDxsaXRlcmFsPkRldmljZT08L2xpdGVyYWw+IGxpbmUgaW4gdGhlCiAgICAgICAgICBbRHJpdmUgWF0gc2VjdGlvbiBpbiB5b3VyIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LgogICAgICAgICAgTm90ZSB0aGF0IHRoZSBkZXZpY2UgaGFzIHRvIGV4aXN0IGFuZCBtdXN0IGJlIGFjY2Vzc2libGUgaWYKICAgICAgICAgIHlvdSBkbyB0aGlzLCB0aG91Z2guCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgeW91IGRvbid0IGRvIHRoYXQsIHRoZW4geW91IHNob3VsZCBnaXZlIGZpeGVkCiAgICAgICAgICA8bGl0ZXJhbD4iTGFiZWwiID08L2xpdGVyYWw+IG9yIDxsaXRlcmFsPiJTZXJpYWwiID08L2xpdGVyYWw+CiAgICAgICAgICBlbnRyaWVzIGluIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LCBhcyBXaW5lIHJldHVybnMKICAgICAgICAgIHRoZXNlIGVudHJpZXMgaW5zdGVhZCBpZiBubyBkZXZpY2UgaXMgZ2l2ZW4uIElmIHRoZXkgZG9uJ3QKICAgICAgICAgIGV4aXN0LCB0aGVuIFdpbmUgd2lsbCByZXR1cm4gZGVmYXVsdCB2YWx1ZXMgKGxhYmVsCiAgICAgICAgICA8bGl0ZXJhbD5Ecml2ZSBYPC9saXRlcmFsPiBhbmQgc2VyaWFsCiAgICAgICAgICA8bGl0ZXJhbD4xMjM0NTY3ODwvbGl0ZXJhbD4pLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIElmIHlvdSB3YW50IHRvIGdpdmUgYSA8bGl0ZXJhbD4iRGV2aWNlIiA9PC9saXRlcmFsPiBlbnRyeQogICAgICAgICAgPGVtcGhhc2lzPm9ubHk8L2VtcGhhc2lzPiBmb3IgZHJpdmUgcmF3IHNlY3RvciBhY2Nlc3NlcywKCSAgYnV0IG5vdCBmb3IgcmVhZGluZyB0aGUgdm9sdW1lIGluZm8gZnJvbSB0aGUgZGV2aWNlIChpLmUuIHlvdSB3YW50CgkgIGEgPGVtcGhhc2lzPmZpeGVkPC9lbXBoYXNpcz4sIHByZWNvbmZpZ3VyZWQgbGFiZWwpLCB5b3UgbmVlZAogICAgICAgICAgdG8gc3BlY2lmeSA8bGl0ZXJhbD4iUmVhZFZvbEluZm8iID0gIjAiPC9saXRlcmFsPiB0byB0ZWxsIFdpbmUKICAgICAgICAgIHRvIHNraXAgdGhlIHZvbHVtZSByZWFkaW5nLgogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+RVhBTVBMRVM8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGUgb2YgY2Ryb20gYW5kIGZsb3BweTsgbGFiZWxzIHdpbGwgYmUKICAgICAgICAgIHJlYWQgZnJvbSB0aGUgZGV2aWNlIG9uIGJvdGggY2Ryb20gYW5kIGZsb3BweTsgc2VyaWFsCiAgICAgICAgICBudW1iZXJzIG9uIGZsb3BweSBvbmx5OgogICAgICAgIDwvcGFyYT4KICAgICAgICA8c2NyZWVuPgpbRHJpdmUgQV0KIlBhdGgiID0gIi9tbnQvZmxvcHB5IgoiVHlwZSIgPSAiZmxvcHB5IgoiRGV2aWNlIiA9ICIvZGV2L2ZkMCIKIkZpbGVzeXN0ZW0iID0gIm1zZG9zIgoKW0RyaXZlIFJdCiJQYXRoIiA9ICIvbW50L2Nkcm9tIgoiVHlwZSIgPSAiY2Ryb20iCiJEZXZpY2UiID0gIi9kZXYvaGRhMSIKIkZpbGVzeXN0ZW0iID0gIndpbjk1IgogICAgICAgIDwvc2NyZWVuPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSGVyZSdzIGFuIGV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgQ0QtUk9NIGxhYmVsOgogICAgICAgIDwvcGFyYT4KICAgICAgICA8c2NyZWVuPgpbRHJpdmUgSl0KIlBhdGgiID0gIi9tbnQvY2Ryb20iCiJUeXBlIiA9ICJjZHJvbSIKIkxhYmVsIiA9ICJYMjM0R0NEU0UiCjsgbm90ZSB0aGF0IHRoZSBkZXZpY2UgaXNuJ3QgcmVhbGx5IG5lZWRlZCBoZXJlIGFzIHdlIGhhdmUgYSBmaXhlZCBsYWJlbAoiRGV2aWNlIiA9ICIvZGV2L2Nkcm9tIgoiRmlsZXN5c3RlbSIgPSAibXNkb3MiCiAgICAgICAgPC9zY3JlZW4+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPlRvZG8gLyBPcGVuIElzc3VlczwvdGl0bGU+CiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgVGhlIGNkcm9tIGxhYmVsIGNhbiBiZSByZWFkIG9ubHkgaWYgdGhlIGRhdGEgdHJhY2sgb2YKICAgICAgICAgICAgICB0aGUgZGlzayByZXNpZGVzIGluIHRoZSBmaXJzdCB0cmFjayBhbmQgdGhlIGNkcm9tIGlzCiAgICAgICAgICAgICAgaXNvOTY2MC4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICBCZXR0ZXIgY2hlY2tpbmcgZm9yIEZBVCBzdXBlcmJsb2NrIChpdCBub3cgY2hlY2tzIG9ubHkKICAgICAgICAgICAgICBvbmUgYnl0ZSkuIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGxhYmVscy9zZXJpYWwgbnVtcyBXUklUSU5HLgogICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgIENhbiB0aGUgbGFiZWwgYmUgbG9uZ2VyIHRoYW4gMTEgY2hhcnM/IChpc285NjYwIGhhcyAzMgogICAgICAgICAgICAgIGNoYXJzKS4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICBXaGF0IGFib3V0IHJlYWRpbmcgZXh0MiB2b2x1bWUgbGFiZWw/IC4uLi4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImRsbC1jb25maWciPgogICAgICA8dGl0bGU+RExMIGNvbmZpZ3VyYXRpb248L3RpdGxlPgogICAgICA8c2VjdDIgaWQ9ImRsbC1vdmVycmlkZXMiPgogICAgICAgIDx0aXRsZT5ETEwgT3ZlcnJpZGVzPC90aXRsZT4KCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLW92ZS1rYWF2ZW47IDxlbWFpbD4mZW1haWwtb3ZlLWthYXZlbjs8L2VtYWlsPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2RsbC1vdmVycmlkZXM8L2ZpbGVuYW1lPikKICAgICAgICA8L3BhcmE+CgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIHdpbmUgY29uZmlnIGZpbGUgZGlyZWN0aXZlcyBbRGxsRGVmYXVsdHNdCiAgICAgICAgICBhbmQgW0RsbE92ZXJyaWRlc10gYXJlIHRoZSBzdWJqZWN0IG9mIHNvbWUgY29uZnVzaW9uLiBUaGUKICAgICAgICAgIG92ZXJhbGwgcHVycG9zZSBvZiBtb3N0IG9mIHRoZXNlIGRpcmVjdGl2ZXMgYXJlIGNsZWFyIGVub3VnaCwKICAgICAgICAgIHRob3VnaCAtIGdpdmVuIGEgY2hvaWNlLCBzaG91bGQgV2luZSB1c2UgaXRzIG93biBidWlsdC1pbgogICAgICAgICAgRExMcywgb3Igc2hvdWxkIGl0IHVzZSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGVzIGZvdW5kCiAgICAgICAgICBpbiBhbiBleGlzdGluZyBXaW5kb3dzIGluc3RhbGxhdGlvbj8gVGhpcyBkb2N1bWVudCBleHBsYWlucwogICAgICAgICAgaG93IHRoaXMgZmVhdHVyZSB3b3Jrcy4KICAgICAgICA8L3BhcmE+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5ETEwgdHlwZXM8L3RpdGxlPgogICAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5uYXRpdmU8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSAibmF0aXZlIiBETEwgaXMgYSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGUKICAgICAgICAgICAgICAgICAgd3JpdHRlbiBmb3IgdGhlIHJlYWwgTWljcm9zb2Z0IFdpbmRvd3MuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmJ1aWx0aW48L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSAiYnVpbHRpbiIgRExMIGlzIGEgV2luZSBETEwuIFRoZXNlIGNhbiBlaXRoZXIgYmUgYQogICAgICAgICAgICAgICAgICBwYXJ0IG9mIDxmaWxlbmFtZT5saWJ3aW5lLnNvPC9maWxlbmFtZT4sIG9yIG1vcmUKICAgICAgICAgICAgICAgICAgcmVjZW50bHksIGluIGEgc3BlY2lhbCA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICB0aGF0IFdpbmUgaXMgYWJsZSB0byBsb2FkIG9uIGRlbWFuZC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+c288L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSBuYXRpdmUgVW5peCA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSwgd2l0aAogICAgICAgICAgICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24gY29udmVyc2lvbiB0aHVua3MgZ2VuZXJhdGVkIG9uIHRoZQogICAgICAgICAgICAgICAgICBmbHkgYXMgdGhlIGxpYnJhcnkgaXMgbG9hZGVkLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwKICAgICAgICAgICAgICAgICAgZm9yIGxpYnJhcmllcyBzdWNoIGFzICJnbGlkZSIgdGhhdCBoYXZlIGV4YWN0bHkgdGhlCiAgICAgICAgICAgICAgICAgIHNhbWUgQVBJIG9uIGJvdGggV2luZG93cyBhbmQgVW5peC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxEZWZhdWx0c10gc2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPkRlZmF1bHRMb2FkT3JkZXI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgaW4gd2hhdCBvcmRlciBXaW5lIHNob3VsZCBzZWFyY2ggZm9yCiAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBETEwgdHlwZXMsIGlmIHRoZSBETEwgaW4gcXVlc3Rpb24gd2FzIG5vdAogICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxQYWlyc10gc2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgQXQgb25lIHRpbWUsIHRoZXJlIHdhcyBhIHNlY3Rpb24gY2FsbGVkIFtEbGxQYWlyc10gaW4gdGhlCiAgICAgICAgICAgIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhpcyBoYXMgYmVlbiBvYnNvbGV0ZWQKICAgICAgICAgICAgYmVjYXVzZSB0aGUgcGFpcmluZyBpbmZvcm1hdGlvbiBoYXMgbm93IGJlZW4gZW1iZWRkZWQgaW50bwogICAgICAgICAgICBXaW5lIGl0c2VsZi4gKFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB3YXMgbWVyZWx5IHRvIGJlCiAgICAgICAgICAgIGFibGUgdG8gaXNzdWUgd2FybmluZ3MgaWYgdGhlIHVzZXIgYXR0ZW1wdGVkIHRvIHBhaXIKICAgICAgICAgICAgY29kZXBlbmRlbnQgMTYtYml0LzMyLWJpdCBETExzIG9mIGRpZmZlcmVudCB0eXBlcy4pIElmIHlvdQogICAgICAgICAgICBzdGlsbCBoYXZlIHRoaXMgaW4geW91ciA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBvcgogICAgICAgICAgICA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4sIHlvdSBtYXkgc2FmZWx5IGRlbGV0ZSBpdC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxPdmVycmlkZXNdIHNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzcGVjaWZpZXMgaG93IHlvdSB3YW50IHNwZWNpZmljIERMTHMgdG8gYmUKICAgICAgICAgICAgaGFuZGxlZCwgaW4gcGFydGljdWxhciB3aGV0aGVyIHlvdSB3YW50IHRvIHVzZSAibmF0aXZlIiBETExzCiAgICAgICAgICAgIG9yIG5vdCwgaWYgeW91IGhhdmUgc29tZSBmcm9tIGEgcmVhbCBXaW5kb3dzIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgIEJlY2F1c2UgYnVpbHRpbnMgZG8gbm90IG1peCBzZWFtbGVzc2x5IHdpdGggbmF0aXZlIERMTHMgeWV0LAogICAgICAgICAgICBjZXJ0YWluIERMTCBkZXBlbmRlbmNpZXMgbWF5IGJlIHByb2JsZW1hdGljLCBidXQgd29ya2Fyb3VuZHMKICAgICAgICAgICAgZXhpc3QgaW4gV2luZSBmb3IgbWFueSBwb3B1bGFyIERMTCBjb25maWd1cmF0aW9ucy4gQWxzbyBzZWUKICAgICAgICAgICAgV1dOJ3MgWzE2XVN0YXR1cyBQYWdlIHRvIGZpZ3VyZSBvdXQgaG93IHdlbGwgeW91ciBmYXZvcml0ZQogICAgICAgICAgICBETEwgaXMgaW1wbGVtZW50ZWQgaW4gV2luZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBJdCBpcyBvZiBjb3Vyc2UgYWxzbyBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGVzZSBzZXR0aW5ncyBieQogICAgICAgICAgICBleHBsaWN0bHkgdXNpbmcgV2luZSdzIDxwYXJhbWV0ZXI+LS1kbGw8L3BhcmFtZXRlcj4KICAgICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscykuICBTb21lCiAgICAgICAgICAgIGhpbnRzIGZvciBjaG9vc2luZyB5b3VyIG9wdGltYWwgY29uZmlndXJhdGlvbiAobGlzdGVkIGJ5CiAgICAgICAgICAgIDE2LzMyLWJpdCBETEwgcGFpcik6CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmtybmwzODYsIGtlcm5lbDMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIE5hdGl2ZSB2ZXJzaW9ucyBvZiB0aGVzZSB3aWxsIG5ldmVyIHdvcmssIHNvIGRvbid0IHRyeS4gTGVhdmUKICAgICAgICAgICAgICAgICAgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmdkaSwgZ2RpMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgR3JhcGhpY3MgRGV2aWNlIEludGVyZmFjZS4gTm8gZWZmb3J0IGhhcyBiZWVuIG1hZGUgYXQgdHJ5aW5nIHRvCiAgICAgICAgICAgICAgICAgIHJ1biBuYXRpdmUgR0RJLiBMZWF2ZSBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+dXNlciwgdXNlcjMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFdpbmRvdyBtYW5hZ2VtZW50IGFuZCBzdGFuZGFyZCBjb250cm9scy4gSXQgd2FzCiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHRvIHVzZSBXaW45NSdzIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgYXQgc29tZSBwb2ludCAoaWYgYWxsIG90aGVyIERMTHMgdGhhdCBkZXBlbmQKICAgICAgICAgICAgICAgICAgb24gaXQsIHN1Y2ggYXMgY29tY3RsMzIgYW5kIGNvbWRsZzMyLCB3ZXJlIGFsc28gcnVuCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4pLiBIb3dldmVyLCB0aGlzIGlzIG5vIGxvbmdlcgogICAgICAgICAgICAgICAgICBwb3NzaWJsZSBhZnRlciB0aGUgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uLCBzbyBsZWF2ZQogICAgICAgICAgICAgICAgICBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bnRkbGw8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTlQga2VybmVsIEFQSS4gQWx0aG91Z2ggYmFkbHkgZG9jdW1lbnRlZCwgdGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzIHdpbGwgbmV2ZXIKICAgICAgICAgICAgICAgICAgd29yay4gTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnczMnNrcm5sPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFdpbjMycyAoZm9yIFdpbjMueCkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CiAgICAgICAgICAgICAgICAgIHZlcnNpb24gd2lsbCBwcm9iYWJseSBuZXZlciB3b3JrLiBMZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+d293MzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2luMTYgc3VwcG9ydCBsaWJyYXJ5IGZvciBOVC4gVGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyCiAgICAgICAgICAgICAgICAgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5zeXN0ZW08L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2luMTYga2VybmVsIHN0dWZmLiBXaWxsIG5ldmVyIHdvcmsKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4gTGVhdmUgYXQKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmRpc3BsYXk8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgRGlzcGxheSBkcml2ZXIuIERlZmluaXRlbHkgbGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnRvb2xoZWxwPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFRvb2wgaGVscGVyIHJvdXRpbmVzLiBUaGlzIGlzIHJhcmVseSBhIHNvdXJjZSBvZiBwcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnZlciwgdmVyc2lvbjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBWZXJzaW9uaW5nLiBTZWxkb20gdXNlZnVsIHRvIG1lc3Mgd2l0aC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+YWR2YXBpMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgUmVnaXN0cnkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzLiBUcnlpbmcgdGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzIG1heSBvciBtYXkKICAgICAgICAgICAgICAgICAgbm90IHdvcmsuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmNvbW1kbGcsIGNvbWRsZzMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIENvbW1vbiBEaWFsb2dzLCBzdWNoIGFzIGNvbG9yIHBpY2tlciwgZm9udCBkaWFsb2csCiAgICAgICAgICAgICAgICAgIHByaW50IGRpYWxvZywgb3Blbi9zYXZlIGRpYWxvZywgZXRjLiBJdCBpcyBzYWZlIHRvIHRyeQogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5jb21tY3RybCwgY29tY3RsMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQ29tbW9uIENvbnRyb2xzLiBUaGlzIGlzIHRvb2xiYXJzLCBzdGF0dXMgYmFycywgbGlzdCBjb250cm9scywKICAgICAgICAgICAgICAgICAgdGhlIHdvcmtzLiBJdCBpcyBzYWZlIHRvIHRyeSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5zaGVsbCwgc2hlbGwzMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBTaGVsbCBpbnRlcmZhY2UgKGRlc2t0b3AsIGZpbGVzeXN0ZW0sIGV0YykuIEJlaW5nIG9uZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgbW9zdCB1bmRvY3VtZW50ZWQgcGllY2VzIG9mIFdpbmRvd3MsIHlvdSBtYXkgaGF2ZSBsdWNrIHdpdGggdGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiwgc2hvdWxkIHlvdSBuZWVkIGl0LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT53aW5zb2NrLCB3c29jazMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFdpbmRvd3MgU29ja2V0cy4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbgogICAgICAgICAgICAgICAgICB3aWxsIG5vdCB3b3JrIHVuZGVyIFdpbmUsIHNvIGxlYXZlIGF0CiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5pY21wPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIElDTVAgcm91dGluZXMgZm9yIHdzb2NrMzIuIEFzIHdpdGggd3NvY2szMiwgbGVhdmUgYXQKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1wcjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBUaGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIG1heSBub3Qgd29yayBkdWUKICAgICAgICAgICAgICAgICAgdG8gdGh1bmtpbmcgaXNzdWVzLiBMZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bHpleHBhbmQsIGx6MzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTGVtcGVsLVppdiBkZWNvbXByZXNzaW9uLiBXaW5lJ3MKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4gdmVyc2lvbiBvdWdodCB0byB3b3JrIGZpbmUuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPndpbmFzcGksIHduYXNwaTMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEFkdmFuY2VkIFNDU0kgUGVyaXBoZXJhbCBJbnRlcmZhY2UuIFRoZQogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gd2lsbCBwcm9iYWJseSBuZXZlcgogICAgICAgICAgICAgICAgICB3b3JrLiBMZWF2ZSBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+Y3J0ZGxsPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEMgUnVudGltZSBsaWJyYXJ5LiBUaGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgogICAgICAgICAgICAgICAgICB2ZXJzaW9uIHdpbGwgZWFzaWx5IHdvcmsgYmV0dGVyIHRoYW4gV2luZSdzIG9uIHRoaXMKICAgICAgICAgICAgICAgICAgb25lLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT53aW5zcG9vbC5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgUHJpbnRlciBzcG9vbGVyLiBZb3UgYXJlIG5vdCBsaWtlbHkgdG8gaGF2ZSBtb3JlIGx1Y2sKICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5kZHJhdzwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBEaXJlY3REcmF3L0RpcmVjdDNELiBTaW5jZSBXaW5lIGRvZXMgbm90IGltcGxlbWVudCB0aGUKICAgICAgICAgICAgICAgICAgRGlyZWN0WCBIQUwsIHRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24KICAgICAgICAgICAgICAgICAgd2lsbCBub3Qgd29yayBhdCB0aGlzIHRpbWUuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmRpbnB1dDwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBEaXJlY3RJbnB1dC4gUnVubmluZyB0aGlzIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgICAgICAgbWF5IG9yIG1heSBub3Qgd29yay4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+ZHNvdW5kPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIERpcmVjdFNvdW5kLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gcnVuIHRoaXMKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiwgYnV0IGRvbid0IGNvdW50IG9uIGl0LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5kcGxheS9kcGxheXg8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgRGlyZWN0UGxheS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbgogICAgICAgICAgICAgICAgICBvdWdodCB0byB3b3JrIGJlc3Qgb24gdGhpcywgaWYgYXQgYWxsLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tbXN5c3RlbSwgd2lubW08L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTXVsdGltZWRpYSBzeXN0ZW0uIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CiAgICAgICAgICAgICAgICAgIHZlcnNpb24gaXMgbm90IGxpa2VseSB0byB3b3JrLiBMZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bXNhY20sIG1zYWNtMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gVGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+IHZlcnNpb24gd29ya3MgYmVzdCwgaWYgeW91CiAgICAgICAgICAgICAgICAgIHNldCBtc2FjbS5kcnYgdG8gdGhlIHNhbWUuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1zdmlkZW8sIG1zdmZ3MzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgVmlkZW8gZm9yIFdpbmRvd3MuIEl0IGlzIHNhZmUgKGFuZCByZWNvbW1lbmRlZCkgdG8gdHJ5CiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1jaWNkYS5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQ0QgQXVkaW8gTUNJIGRyaXZlci4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpc2VxLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBNSURJIFNlcXVlbmNlciBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+Lk1JRDwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgIHBsYXliYWNrKS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpd2F2ZS5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2F2ZSBhdWRpbyBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+LldBVjwvZmlsZW5hbWU+IHBsYXliYWNrKS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpYXZpLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBBVkkgTUNJIGRyaXZlciAoPGZpbGVuYW1lPi5BVkk8L2ZpbGVuYW1lPiB2aWRlbwogICAgICAgICAgICAgICAgICBwbGF5YmFjaykuIEJlc3QgdG8gdXNlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1jaWFuaW0uZHJ2PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbiBNQ0kgZHJpdmVyLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tc2FjbS5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gU2V0IHRvIHNhbWUgYXMgbXNhY20zMi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWlkaW1hcC5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTUlESSBNYXBwZXIuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPndwcm9jczwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgcHNldWRvLURMTCB1c2VkIGJ5IFdpbmUgZm9yIHRodW5raW5nCiAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLiBBIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzCiAgICAgICAgICAgICAgICAgIGRvZXNuJ3QgZXhpc3QuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgICAgPC9zZWN0Mz4KICAgICAgPC9zZWN0Mj4KICAgICAgPHNlY3QyIGlkPSJkbGwtbWlzc2luZyI+CiAgICAgICAgPHRpdGxlPk1pc3NpbmcgRExMczwvdGl0bGU+CgogICAgICAgIDxwYXJhPgogICAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1hbmRyZWFzLW1vaHI7IDxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+CiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8cGFyYT4KCSAgSW4gY2FzZSBXaW5lIGNvbXBsYWlucyBhYm91dCBhIG1pc3NpbmcgRExMLCB5b3Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIKCSAgdGhpcyBmaWxlIGlzIGEgcHVibGljbHkgYXZhaWxhYmxlIERMTCBvciBhIGN1c3RvbSBETEwgYmVsb25naW5nCgkgIHRvIHlvdXIgcHJvZ3JhbSAoYnkgc2VhcmNoaW5nIGZvciBpdHMgbmFtZSBvbiB0aGUgaW50ZXJuZXQpLgoJICBJZiB5b3UgbWFuYWdlZCB0byBnZXQgaG9sZCBvZiB0aGUgRExMLCB0aGVuIHlvdSBzaG91bGQgbWFrZSBzdXJlCgkgIHRoYXQgV2luZSBpcyBhYmxlIHRvIGZpbmQgYW5kIGxvYWQgaXQuCgkgIERMTHMgdXN1YWxseSBnZXQgbG9hZGVkIGFjY29yZGluZyB0byB0aGUgbWVjaGFuaXNtIG9mIHRoZQoJICBTZWFyY2hQYXRoKCkgZnVuY3Rpb24uCgkgIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZGlyZWN0b3JpZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKCiAgICAgICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KCSAgICAgICAgVGhlIGRpcmVjdG9yeSB0aGUgcHJvZ3JhbSB3YXMgc3RhcnRlZCBmcm9tLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgoJICAgICAgICBUaGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CgkgICAgICAgIFRoZSBXaW5kb3dzIHN5c3RlbSBkaXJlY3RvcnkuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CgkgICAgICAgIFRoZSBXaW5kb3dzIGRpcmVjdG9yeS4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KCSAgICAgICAgVGhlIFBBVEggdmFyaWFibGUgZGlyZWN0b3JpZXMuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC9vcmRlcmVkbGlzdD4KCgkgIEluIHNob3J0OiBlaXRoZXIgcHV0IHRoZSByZXF1aXJlZCBETEwgaW50byB5b3VyIGFwcGxpY2F0aW9uCgkgIGRpcmVjdG9yeSAobWlnaHQgYmUgdWdseSksIG9yIHVzdWFsbHkgcHV0IGl0IGludG8gdGhlIFdpbmRvd3Mgc3lzdGVtCgkgIGRpcmVjdG9yeS4gSnVzdCBmaW5kIG91dCBpdHMgZGlyZWN0b3J5IGJ5IGhhdmluZyBhIGxvb2sgYXQgdGhlIFdpbmUKCSAgY29uZmlnIEZpbGUgdmFyaWFibGUgIlN5c3RlbSIgKHdoaWNoIGluZGljYXRlcyB0aGUgbG9jYXRpb24gb2YgdGhlCgkgIFdpbmRvd3Mgc3lzdGVtIGRpcmVjdG9yeSkgYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlIGVudHJ5LgoJICBOb3RlIHRoYXQgeW91IHByb2JhYmx5IHNob3VsZG4ndCB1c2UgTlQtYmFzZWQgbmF0aXZlIERMTHMsCgkgIHNpbmNlIFdpbmUncyBOVCBBUEkgc3VwcG9ydCBpcyBzb21ld2hhdCB3ZWFrZXIgdGhhbiBpdHMgV2luOXgKCSAgQVBJIHN1cHBvcnQgKHRodXMgbGVhZGluZyB0byBldmVuIHdvcnNlIGNvbXBhdGliaWxpdHkgd2l0aCBOVCBETExzCgkgIHRoYW4gd2l0aCBhIG5vLXdpbmRvd3Mgc2V0dXAgISksIHNvIGJldHRlciB1c2UgV2luOXggbmF0aXZlIERMTHMKCSAgaW5zdGVhZCBvciBubyBuYXRpdmUgRExMcyBhdCBhbGwuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgICA8c2VjdDIgaWQ9ImRsbC13aW5kb3dzIj4KICAgICAgICA8dGl0bGU+RmV0Y2hpbmcgbmF0aXZlIERMTHMgZnJvbSBhIFdpbmRvd3MgQ0Q8L3RpdGxlPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdyaXR0ZW4gYnkgJm5hbWUtYW5kcmVhcy1tb2hyOyA8ZW1haWw+JmVtYWlsLWFuZHJlYXMtbW9ocjs8L2VtYWlsPgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPHBhcmE+CglUaGUgTGludXggPGNvbW1hbmQ+Y2FiZXh0cmFjdDwvY29tbWFuZD4gdXRpbGl0eSBjYW4gYmUgdXNlZCB0bwoJZXh0cmFjdCBuYXRpdmUgV2luZG93cyAuZGxsIGZpbGVzIGZyb20gLmNhYiBmaWxlcyB0aGF0IGFyZSB0byBiZQoJZm91bmQgb24gbWFueSBXaW5kb3dzIGluc3RhbGxhdGlvbiBDRHMuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICAmZm9udHM7CiAgICAmcHJpbnRpbmc7CgogICAgPHNlY3QxIGlkPSJ3aW45NWxvb2siPgogICAgICA8dGl0bGU+V2luOTUvOTggTG9vazwvdGl0bGU+CiAgICAgIDxwYXJhPgogICAgICAgIFdyaXR0ZW4gYnkgJm5hbWUtZGF2aWQtY3V0aGJlcnQ7IDxlbWFpbD4mZW1haWwtZGF2aWQtY3V0aGJlcnQ7PC9lbWFpbD4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi93aW45NWxvb2s8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBXaW45NS9XaW45OCBpbnRlcmZhY2UgY29kZSBpcyBiZWluZyBpbnRyb2R1Y2VkLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEluc3RlYWQgb2YgY29tcGlsaW5nIFdpbmUgZm9yIFdpbjMuMSB2cy4gV2luOTUgdXNpbmcKICAgICAgICA8Y29uc3RhbnQ+I2RlZmluZTwvY29uc3RhbnQ+IHN3aXRjaGVzLCB0aGUgY29kZSBub3cgbG9va3MgaW4gYQogICAgICAgIHNwZWNpYWwgW1R3ZWFrLkxheW91dF0gc2VjdGlvbiBvZgogICAgICAgIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+IGZvciBhCiAgICAgICAgPGxpdGVyYWw+IldpbmVMb29rIiA9ICJXaW45NSI8L2xpdGVyYWw+IG9yCiAgICAgICAgPGxpdGVyYWw+IldpbmVMb29rIiA9ICJXaW45OCI8L2xpdGVyYWw+IGVudHJ5LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEEgZmV3IG5ldyBzZWN0aW9ucyBhbmQgYSBudW1iZXIgb2YgZW50cmllcyBoYXZlIGJlZW4gYWRkZWQgdG8KICAgICAgICB0aGUgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gZmlsZSAtLSB0aGVzZSBhcmUgZm9yCiAgICAgICAgZGVidWdnaW5nIHRoZSBXaW45NSB0d2Vha3Mgb25seSBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKICAgICAgICByZWxlYXNlISAgVGhlc2UgZW50cmllcy9zZWN0aW9ucyBhcmU6CiAgICAgIDwvcGFyYT4KICAgICAgPHByb2dyYW1saXN0aW5nPgpbVHdlYWsuRm9udHNdCiJTeXN0ZW0uSGVpZ2h0IiA9ICImbHQ7cG9pbnQgc2l6ZT4iICAgICMgU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBzeXN0ZW0gdHlwZWZhY2UKIlN5c3RlbS5Cb2xkIiA9ICJbdHJ1ZXxmYWxzZV0iICAgICAgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgYm9sZGZhY2VkCiJTeXN0ZW0uSXRhbGljIiA9ICJbdHJ1ZXxmYWxzZV0iICAgICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIGl0YWxpY2l6ZWQKIlN5c3RlbS5VbmRlcmxpbmUiID0gIlt0cnVlfGZhbHNlXSIgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgdW5kZXJsaW5lZAoiU3lzdGVtLlN0cmlrZU91dCIgPSAiW3RydWV8ZmFsc2VdIiAjIFdoZXRoZXIgdGhlIHN5c3RlbSBmb250IHNob3VsZCBiZSBzdHJ1Y2sgb3V0CiJPRU1GaXhlZC54eHgiICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBPRU0gZml4ZWQgdHlwZWZhY2UKIkFuc2lGaXhlZC54eHgiICAgICAgICAgICAgICAgICAjIFNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIEFuc2kgZml4ZWQgdHlwZWZhY2UKIkFuc2lWYXIueHh4IiAgICAgICAgICAgICAgICAgICAjIFNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIEFuc2kgdmFyaWFibGUgdHlwZWZhY2UKIlN5c3RlbUZpeGVkLnh4eCIgICAgICAgICAgICAgICAjIFNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIFN5c3RlbSBmaXhlZCB0eXBlZmFjZQoKW1R3ZWFrLkxheW91dF0KIldpbmVMb29rIiA9ICJbV2luMzF8V2luOTV8V2luOThdIiAgIyBDaGFuZ2VzIFdpbmUncyBsb29rIGFuZCBmZWVsCiAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0ia2V5Ym9hcmQiPgogICAgICA8dGl0bGU+S2V5Ym9hcmQ8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1vdmUta2FhdmVuOyA8ZW1haWw+JmVtYWlsLW92ZS1rYWF2ZW47PC9lbWFpbD4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9rZXlib2FyZDwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CgogICAgICA8cGFyYT4KICAgICAgICBXaW5lIG5vdyBuZWVkcyB0byBrbm93IGFib3V0IHlvdXIga2V5Ym9hcmQgbGF5b3V0LiBUaGlzCiAgICAgICAgcmVxdWlyZW1lbnQgY29tZXMgZnJvbSBhIG5lZWQgZnJvbSBtYW55IGFwcHMgdG8gaGF2ZSB0aGUKICAgICAgICBjb3JyZWN0IHNjYW5jb2RlcyBhdmFpbGFibGUsIHNpbmNlIHRoZXkgcmVhZCB0aGVzZSBkaXJlY3RseSwKICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdGFraW5nIHRoZSBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBYCiAgICAgICAgc2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgV2luZSBub3cgbmVlZHMgdG8gaGF2ZSBhIG1hcHBpbmcgZnJvbQogICAgICAgIFgga2V5cyB0byB0aGUgc2NhbmNvZGVzIHRoZXNlIGFwcGxpY2F0aW9ucyBleHBlY3QuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT24gc3RhcnR1cCwgV2luZSB3aWxsIHRyeSB0byByZWNvZ25pemUgdGhlIGFjdGl2ZSBYIGxheW91dCBieQogICAgICAgIHNlZWluZyBpZiBpdCBtYXRjaGVzIGFueSBvZiB0aGUgZGVmaW5lZCB0YWJsZXMuIElmIGl0IGRvZXMsCiAgICAgICAgZXZlcnl0aGluZyBpcyBhbHJpZ2h0LiBJZiBub3QsIHlvdSBuZWVkIHRvIGRlZmluZSBpdC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBUbyBkbyB0aGlzLCBvcGVuIHRoZSBmaWxlCiAgICAgICAgPGZpbGVuYW1lPmRsbHMveDExZHJ2L2tleWJvYXJkLmM8L2ZpbGVuYW1lPiBhbmQgdGFrZSBhIGxvb2sKICAgICAgICBhdCB0aGUgZXhpc3RpbmcgdGFibGVzLiBNYWtlIGEgYmFja3VwIGNvcHkgb2YgaXQsIGVzcGVjaWFsbHkKICAgICAgICBpZiB5b3UgZG9uJ3QgdXNlIENWUy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBXaGF0IHlvdSByZWFsbHkgd291bGQgbmVlZCB0byBkbywgaXMgZmluZCBvdXQgd2hpY2ggc2NhbmNvZGUKICAgICAgICBlYWNoIGtleSBuZWVkcyB0byBnZW5lcmF0ZS4gIEZpbmQgaXQgaW4gdGhlCiAgICAgICAgPGZ1bmN0aW9uPm1haW5fa2V5X3NjYW48L2Z1bmN0aW9uPiB0YWJsZSwgd2hpY2ggbG9va3MgbGlrZQogICAgICAgIHRoaXM6CiAgICAgIDwvcGFyYT4KICAgICAgPHByb2dyYW1saXN0aW5nPgpzdGF0aWMgY29uc3QgaW50IG1haW5fa2V5X3NjYW5bTUFJTl9MRU5dID0KewovKiB0aGlzIGlzIG15ICgxMDIta2V5KSBrZXlib2FyZCBsYXlvdXQsIHNvcnJ5IGlmIGl0IGRvZXNuJ3QgcXVpdGUgbWF0Y2ggeW91cnMgKi8KICAgMHgyOSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwKICAgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LDB4MTgsMHgxOSwweDFBLDB4MUIsCiAgIDB4MUUsMHgxRiwweDIwLDB4MjEsMHgyMiwweDIzLDB4MjQsMHgyNSwweDI2LDB4MjcsMHgyOCwweDJCLAogICAweDJDLDB4MkQsMHgyRSwweDJGLDB4MzAsMHgzMSwweDMyLDB4MzMsMHgzNCwweDM1LAogICAweDU2IC8qIHRoZSAxMDJuZCBrZXkgKGFjdHVhbGx5IHRvIHRoZSByaWdodCBvZiBsLXNoaWZ0KSAqLwp9OwogICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICA8cGFyYT4KICAgICAgICBOZXh0LCBhc3NpZ24gZWFjaCBzY2FuY29kZSB0aGUgY2hhcmFjdGVycyBpbXByaW50ZWQgb24gdGhlCiAgICAgICAga2V5Y2Fwcy4gVGhpcyB3YXMgZG9uZSAoc29ydCBvZikgZm9yIHRoZSBVUyAxMDEta2V5IGtleWJvYXJkLAogICAgICAgIHdoaWNoIHlvdSBjYW4gZmluZCBuZWFyIHRoZSB0b3AgaW4KICAgICAgICA8ZmlsZW5hbWU+a2V5Ym9hcmQuYzwvZmlsZW5hbWU+LiBJdCBhbHNvIHNob3dzIHRoYXQgaWYgdGhlcmUKICAgICAgICBpcyBubyAxMDJuZCBrZXksIHlvdSBjYW4gc2tpcCB0aGF0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEhvd2V2ZXIsIGZvciBtb3N0IGludGVybmF0aW9uYWwgMTAyLWtleSBrZXlib2FyZHMsIHdlIGhhdmUKICAgICAgICBkb25lIGl0IGVhc3kgZm9yIHlvdS4gVGhlIHNjYW5jb2RlIGxheW91dCBmb3IgdGhlc2UgYWxyZWFkeQogICAgICAgIHByZXR0eSBtdWNoIG1hdGNoZXMgdGhlIHBoeXNpY2FsIGxheW91dCBpbiB0aGUKICAgICAgICA8ZnVuY3Rpb24+bWFpbl9rZXlfc2NhbjwvZnVuY3Rpb24+LCBzbyBhbGwgeW91IG5lZWQgdG8gZG8gaXMKICAgICAgICB0byBnbyB0aHJvdWdoIGFsbCB0aGUga2V5cyB0aGF0IGdlbmVyYXRlIGNoYXJhY3RlcnMgb24geW91cgogICAgICAgIG1haW4ga2V5Ym9hcmQgKGV4Y2VwdCBzcGFjZWJhciksIGFuZCBzdHVmZiB0aG9zZSBpbnRvIGFuCiAgICAgICAgYXBwcm9wcmlhdGUgdGFibGUuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGF0IHRoZSAxMDJuZCBrZXksCiAgICAgICAgd2hpY2ggaXMgdXN1YWxseSB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qga2V5IG9mIHRoZSBsYXN0IGxpbmUKICAgICAgICAodXN1YWxseSA8a2V5Y2FwPlo8L2tleWNhcD4pLCBtdXN0IGJlIHBsYWNlZCBvbiBhIHNlcGFyYXRlCiAgICAgICAgbGluZSBhZnRlciB0aGUgbGFzdCBsaW5lLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEZvciBleGFtcGxlLCBteSBOb3J3ZWdpYW4ga2V5Ym9hcmQgbG9va3MgbGlrZSB0aGlzCiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4KpyAgISAgIiAgIyAgpCAgJSAgJiAgLyAgKCAgKSAgPSAgPyAgYCAgQmFjay0KfCAgMSAgMkAgM6MgNCQgNSAgNiAgN3sgOFsgOV0gMH0gKyAgXLQgc3BhY2UKClRhYiBRICBXICBFICBSICBUICBZICBVICBJICBPICBQICDFICBeCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCofgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIKQ2FwcyBBICBTICBEICBGICBHICBIICBKICBLICBMICDYICDGICAqCkxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJwoKU2gtID4gWiAgWCAgQyAgViAgQiAgTiAgTSAgOyAgOiAgXyAgU2hpZnQKaWZ0ICZsdDsgICAgICAgICAgICAgICAgICAgICAgLCAgLiAgLQoKQ3RybCAgQWx0ICAgICAgIFNwYWNlYmFyICAgICAgIEFsdEdyICBDdHJsCiAgICAgIDwvc2NyZWVuPgogICAgICA8cGFyYT4KICAgICAgICBOb3RlIHRoZSAxMDJuZCBrZXksIHdoaWNoIGlzIHRoZSA8a2V5Y2FwPiZsdDs+PC9rZXljYXA+IGtleSwgdG8KICAgICAgICB0aGUgbGVmdCBvZiA8a2V5Y2FwPlo8L2tleWNhcD4uIFRoZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0IG9mCiAgICAgICAgdGhlIG1haW4gY2hhcmFjdGVyIGlzIHRoZSBjaGFyYWN0ZXIgZ2VuZXJhdGVkIGJ5CiAgICAgICAgPGtleWNhcD5BbHRHcjwva2V5Y2FwPi4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBUaGlzIGtleWJvYXJkIGlzIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgPC9wYXJhPgogICAgICA8cHJvZ3JhbWxpc3Rpbmc+CnN0YXRpYyBjb25zdCBjaGFyIG1haW5fa2V5X05PW01BSU5fTEVOXVs0XSA9CnsKICJ8pyIsIjEhIiwiMlwiQCIsIjMjoyIsIjSkJCIsIjUlIiwiNiYiLCI3L3siLCI4KFsiLCI5KV0iLCIwPX0iLCIrPyIsIlxctCIsCiAicVEiLCJ3VyIsImVFIiwiclIiLCJ0VCIsInlZIiwidVUiLCJpSSIsIm9PIiwicFAiLCLlxSIsIqhefiIsCiAiYUEiLCJzUyIsImREIiwiZkYiLCJnRyIsImhIIiwiakoiLCJrSyIsImxMIiwi+NgiLCLmxiIsIicqIiwKICJ6WiIsInhYIiwiY0MiLCJ2ViIsImJCIiwibk4iLCJtTSIsIiw7IiwiLjoiLCItXyIsCiAiJmx0Oz4iCn07CiAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgIDxwYXJhPgogICAgICAgIEV4Y2VwdCB0aGF0ICIgYW5kIFwgbmVlZHMgdG8gYmUgcXVvdGVkIHdpdGggYSBiYWNrc2xhc2gsIGFuZAogICAgICAgIHRoYXQgdGhlIDEwMm5kIGtleSBpcyBvbiBhIHNlcGFyYXRlIGxpbmUsIGl0J3MgcHJldHR5CiAgICAgICAgc3RyYWlnaHRmb3J3YXJkLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEFmdGVyIHlvdSBoYXZlIHdyaXR0ZW4gc3VjaCBhIHRhYmxlLCB5b3UgbmVlZCB0byBhZGQgaXQgdG8gdGhlCiAgICAgICAgPGZ1bmN0aW9uPm1haW5fa2V5X3RhYltdPC9mdW5jdGlvbj4gbGF5b3V0IGluZGV4IHRhYmxlLiBUaGlzCiAgICAgICAgd2lsbCBsb29rIGxpa2UgdGhpczoKICAgICAgPC9wYXJhPgogICAgICA8cHJvZ3JhbWxpc3Rpbmc+CnN0YXRpYyBzdHJ1Y3QgewogV09SRCBsYW5nLCBhbnNpX2NvZGVwYWdlLCBvZW1fY29kZXBhZ2U7CiBjb25zdCBjaGFyICgqa2V5KVtNQUlOX0xFTl1bNF07Cn0gbWFpbl9rZXlfdGFiW109ewouLi4KLi4uCiB7TUFLRUxBTkdJRChMQU5HX05PUldFR0lBTixTVUJMQU5HX0RFRkFVTFQpLCAgMTI1MiwgODY1LCAmYW1wO21haW5fa2V5X05PfSwKLi4uCiAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgIDxwYXJhPgogICAgICAgIEFmdGVyIHlvdSBoYXZlIGFkZGVkIHlvdXIgdGFibGUsIHJlY29tcGlsZSBXaW5lIGFuZCB0ZXN0IHRoYXQKICAgICAgICBpdCB3b3Jrcy4gSWYgaXQgZmFpbHMgdG8gZGV0ZWN0IHlvdXIgdGFibGUsIHRyeSBydW5uaW5nCiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4Kd2luZSAtLWRlYnVnbXNnICtrZXksK2tleWJvYXJkID4mIGtleS5sb2cKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGFuZCBsb29rIGluIHRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPmtleS5sb2c8L2ZpbGVuYW1lPiBmaWxlIHRvCiAgICAgICAgZmluZCB0aGUgZXJyb3IgbWVzc2FnZXMgaXQgZ2l2ZXMgZm9yIHlvdXIgbGF5b3V0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIE5vdGUgdGhhdCB0aGUgPGNvbnN0YW50PkxBTkdfKjwvY29uc3RhbnQ+IGFuZAogICAgICAgIDxjb25zdGFudD5TVUJMQU5HXyo8L2NvbnN0YW50PiBkZWZpbml0aW9ucyBhcmUgaW4KICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZS93aW5ubHMuaDwvZmlsZW5hbWU+LCB3aGljaCB5b3UgbWlnaHQgbmVlZCB0bwogICAgICAgIGtub3cgdG8gZmluZCBvdXQgd2hpY2ggbnVtYmVycyB5b3VyIGxhbmd1YWdlIGlzIGFzc2lnbmVkLCBhbmQKICAgICAgICBmaW5kIGl0IGluIHRoZSBkZWJ1Z21zZyBvdXRwdXQuIFRoZSBudW1iZXJzIHdpbGwgYmUKICAgICAgICA8bGl0ZXJhbD4oU1VCTEFORyAqIDB4NDAwICsgTEFORyk8L2xpdGVyYWw+LCBzbywgZm9yIGV4YW1wbGUKICAgICAgICB0aGUgY29tYmluYXRpb24gPGxpdGVyYWw+TEFOR19OT1JXRUdJQU4gKDB4MTQpPC9saXRlcmFsPiBhbmQKICAgICAgICA8bGl0ZXJhbD5TVUJMQU5HX0RFRkFVTFQgKDB4MSk8L2xpdGVyYWw+IHdpbGwgYmUgKGluIGhleCkKICAgICAgICA8bGl0ZXJhbD4xNCArIDEqNDAwID0gNDE0PC9saXRlcmFsPiwgc28gc2luY2UgSSdtIE5vcndlZ2lhbiwgSQogICAgICAgIGNvdWxkIGxvb2sgZm9yIDxsaXRlcmFsPjA0MTQ8L2xpdGVyYWw+IGluIHRoZSBkZWJ1Z21zZyBvdXRwdXQKICAgICAgICB0byBmaW5kIG91dCB3aHkgbXkga2V5Ym9hcmQgd29uJ3QgZGV0ZWN0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIE9uY2UgaXQgd29ya3MsIHN1Ym1pdCBpdCB0byB0aGUgV2luZSBwcm9qZWN0LiBJZiB5b3UgdXNlIENWUywKICAgICAgICB5b3Ugd2lsbCBqdXN0IGhhdmUgdG8gZG8KICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpjdnMgLXozIGRpZmYgLXUgZGxscy94MTFkcnYva2V5Ym9hcmQuYyA+IGxheW91dC5kaWZmCiAgICAgIDwvc2NyZWVuPgogICAgICA8cGFyYT4KICAgICAgICBmcm9tIHlvdXIgbWFpbiBXaW5lIGRpcmVjdG9yeSwgdGhlbiBzdWJtaXQKICAgICAgICA8ZmlsZW5hbWU+bGF5b3V0LmRpZmY8L2ZpbGVuYW1lPiB0bwogICAgICAgIDxlbWFpbD53aW5lLXBhdGNoZXNAd2luZWhxLmNvbTwvZW1haWw+IGFsb25nIHdpdGggYSBicmllZiBub3RlCiAgICAgICAgb2Ygd2hhdCBpdCBpcy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBJZiB5b3UgZG9uJ3QgdXNlIENWUywgeW91IG5lZWQgdG8gZG8KICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpkaWZmIC11IHRoZV9iYWNrdXBfZmlsZV95b3VfbWFkZSBkbGxzL3gxMWRydi9rZXlib2FyZC5jID4gbGF5b3V0LmRpZmYKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGFuZCBzdWJtaXQgaXQgYXMgZXhwbGFpbmVkIGFib3ZlLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSBkaWQgaXQgcmlnaHQsIGl0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG5leHQgV2luZQogICAgICAgIHJlbGVhc2UsIGFuZCBhbGwgdGhlIHRyb3VibGVzb21lIGFwcGxpY2F0aW9ucyAoZXNwZWNpYWxseQogICAgICAgIHJlbW90ZS1jb250cm9sIGFwcGxpY2F0aW9ucykgYW5kIGdhbWVzIHRoYXQgdXNlIHNjYW5jb2RlcyB3aWxsCiAgICAgICAgYmUgaGFwcGlseSB1c2luZyB5b3VyIGtleWJvYXJkIGxheW91dCwgYW5kIHlvdSB3b24ndCBnZXQgdGhvc2UKICAgICAgICBhbm5veWluZyBmaXhtZSBtZXNzYWdlcyBlaXRoZXIuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgR29vZCBsdWNrLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0ib2RiYyI+CiAgICAgIDx0aXRsZT5Vc2luZyBPREJDPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgT0RCQyB3b3JrcyB3aXRoaW4gV2luZSBhbmQgaG93IHRvIGNvbmZpZ3VyZQogICAgICAgIGl0IHRvIGRvIHdoYXQgeW91IHdhbnQgKGlmIGl0IGNhbiBkbyB3aGF0IHlvdSB3YW50KS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBUaGUgT0RCQyBzeXN0ZW0gd2l0aGluIHdpbmUsIGFzIHdpdGggdGhlIHByaW50aW5nIHN5c3RlbSwgaXMgZGVzaWduZWQKICAgICAgICB0byBob29rIGFjcm9zcyB0byB0aGUgVW5peCBzeXN0ZW0gYXQgYSBoaWdoIGxldmVsLiAgUmF0aGVyIHRoYW4gCiAgICAgICAgZW5zdXJpbmcgdGhhdCBhbGwgdGhlIHdpbmRvd3MgY29kZSB3b3JrcyB1bmRlciB3aW5lIGl0IHVzZXMgYSBzdWl0YWJsZQogICAgICAgIFVuaXggT0RCQyBwcm92aWRlciwgc3VjaCBhcyBVbml4T0RCQy4gIFRodXMgaWYgeW91IGNvbmZpZ3VyZSBXaW5lIHRvIAogICAgICAgIHVzZSB0aGUgYnVpbHRpbiBvZGJjMzIuZGxsIHRoYXQgd2luZSBkbGwgd2lsbCBpbnRlcmZhY2UgdG8geW91ciAKICAgICAgICBVbml4IE9EQkMgcGFja2FnZSBhbmQgbGV0IHRoYXQgZG8gdGhlIHdvcmssIHdoZXJlYXMgaWYgeW91IGNvbmZpZ3VyZSAKICAgICAgICBXaW5lIHRvIHVzZSB0aGUgbmF0aXZlIG9kYmMzMi5kbGwgaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBuYXRpdmUKICAgICAgICBPREJDMzIgZHJpdmVycyBldGMuCiAgICAgIDwvcGFyYT4KICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Vc2luZyBhIFVuaXggT0RCQyBzeXN0ZW0gd2l0aCBXaW5lPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBmaXJzdCBzdGVwIGluIHVzaW5nIGEgVW5peCBPREJDIHN5c3RlbSB3aXRoIFdpbmUgaXMsIG9mIGNvdXJzZSwKICAgICAgICAgIHRvIGdldCB0aGUgVW5peCBPREJDIHN5c3RlbSB3b3JraW5nIGl0c2VsZi4gIFRoaXMgbWF5IGludm9sdmUgCiAgICAgICAgICBkb3dubG9hZGluZyBjb2RlIG9yIHJwbXMgZXRjLiAgVGhlcmUgYXJlIHNldmVyYWwgVW5peCBPREJDIHN5c3RlbXMKICAgICAgICAgIGF2YWlsYWJsZTsgdGhlIG9uZSB0aGUgYXV0aG9yIGlzIHVzZWQgdG8gaXMgdW5peE9EQkMgKHdpdGggdGhlCiAgICAgICAgICBJQk0gREIyIGRyaXZlcikuIFR5cGljYWxseSBzdWNoIHN5c3RlbXMgd2lsbCBpbmNsdWRlIGEgdG9vbCwgc3VjaCAKICAgICAgICAgIGFzIGlzcWwsIHdoaWNoIHdpbGwgYWxsb3cgeW91IHRvIGFjY2VzcyB0aGUgZGF0YSBmcm9tIHRoZSBjb21tYW5kCiAgICAgICAgICBsaW5lIHNvIHRoYXQgeW91IGNhbiBjaGVjayB0aGF0IHRoZSBzeXN0ZW0gaXMgd29ya2luZy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgbmV4dCBzdGVwIGlzIHRvIGhvb2sgdGhlIFVuaXggT0RCQyBsaWJyYXJ5IHRvIHRoZSB3aW5lIGJ1aWx0aW4gCiAgICAgICAgICBvZGJjMzIgZGxsLiAgVGhlIGJ1aWx0aW4gb2RiYzMyIChjdXJyZW50bHkpIGxvb2tzIHRvIHRoZQogICAgICAgICAgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSA8ZW1waGFzaXM+TElCX09EQkNfRFJJVkVSX01BTkFHRVI8L2VtcGhhc2lzPgogICAgICAgICAgZm9yIHRoZSBuYW1lIG9mIHRoZSBvZGJjIGxpYnJhcnkuICBGb3IgZXhhbXBsZSBpbiB0aGUgYXV0aG9yJ3MKICAgICAgICAgIC5iYXNocmMgZmlsZSBpcyB0aGUgbGluZToKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHByb2dyYW1saXN0aW5nPgpleHBvcnQgTElCX09EQkNfRFJJVkVSX01BTkFHRVI9L3Vzci9saWIvbGlib2RiYy5zby4xLjAuMAogICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiB0aGF0IGVudmlyb25tZW50YWwgdmFyaWFibGUgaXMgbm90IHNldCB0aGVuIGl0IGxvb2tzIGZvciBhIAogICAgICAgICAgbGlicmFyeSBjYWxsZWQgbGlib2RiYy5zbyBhbmQgc28geW91IGNhbiBhZGQgYSBzeW1ib2xpYyBsaW5rIHRvCiAgICAgICAgICBlcXVhdGUgdGhhdCB0byB5b3VyIG93biBsaWJyYXJ5LiAgRm9yIGV4YW1wbGUgYXMgcm9vdCB5b3UgY291bGQKICAgICAgICAgIHJ1biB0aGUgY29tbWFuZHM6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwcm9ncmFtbGlzdGluZz4KbG4gLXMgbGlib2RiYy5zby4xLjAuMCAvdXNyL2xpYi9saWJvZGJjLnNvCi9zYmluL2xkY29uZmlnCiAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBsYXN0IHN0ZXAgaW4gY29uZmlndXJpbmcgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBXaW5lIGlzIHNldCB1cAogICAgICAgICAgdG8gcnVuIHRoZSBidWlsdGluIHZlcnNpb24gb2Ygb2RiYzMyLmRsbCwgYnkgbW9kaWZ5aW5nIHRoZSBETEwKICAgICAgICAgIGNvbmZpZ3VyYXRpb24uICBUaGlzIGJ1aWx0aW4gZGxsIG1lcmVseSBhY3RzIGFzIGEgc3R1YiBiZXR3ZWVuIHRoZQogICAgICAgICAgY2FsbGluZyBjb2RlIGFuZCB0aGUgVW5peCBPREJDIGxpYnJhcnkuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgeW91IGhhdmUgYW55IHByb2JsZW1zIHRoZW4geW91IGNhbiB1c2UgdGhlIGRlYnVnbXNnIGNoYW5uZWwKICAgICAgICAgIG9kYmMzMiB0byB0cmFjZSB3aGF0IGlzIGhhcHBlbmluZy4gIE9uZSB3b3JkIG9mIHdhcm5pbmcuICBTb21lCiAgICAgICAgICBwcm9ncmFtcyBhY3R1YWxseSBjaGVhdCBhIGxpdHRsZSBhbmQgYnlwYXNzIHRoZSBvZGJjIGxpYnJhcnkuICBGb3IKICAgICAgICAgIGV4YW1wbGUgdGhlIENyeXN0YWwgUmVwb3J0cyBlbmdpbmUgZ29lcyB0byB0aGUgcmVnaXN0cnkgdG8gY2hlY2sgb24KICAgICAgICAgIHRoZSBEU04uICBUaGUgZml4IGZvciB0aGlzIGlzIGRvY3VtZW50ZWQgYXQgdW5peE9EQkMncyBzaXRlIHdoZXJlIAogICAgICAgICAgdGhlcmUgaXMgYSBzZWN0aW9uIG9uIHVzaW5nIHVuaXhPREJDIHdpdGggV2luZS4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+VXNpbmcgV2luZG93cyBPREJDIGRyaXZlcnM8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgRG9lcyBhbnlvbmUgYWN0dWFsbHkgaGF2ZSBhbnkgZXhwZXJpZW5jZSBvZiB0aGlzIGFuZCBhbnl0aGluZyB0byAKICAgICAgICAgIGFkZD8KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICA8L2NoYXB0ZXI+Cgo8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKTG9jYWwgdmFyaWFibGVzOgptb2RlOiBzZ21sCnNnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgInNldCIgImJvb2siICJjaGFwdGVyIiAiIikKRW5kOgotLT4K