ZGlmZiAtLWdpdCBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ODVlYTcuLjAwMDAwMDAKLS0tIGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+Ci0KLSAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+Ci0KLTwhLS0KLQotICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgotCi0gIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+Ci0KLS0tPgotCi0gIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgotICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KLSAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KLSAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgotICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgotICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wiLz4KLQotICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSIndXNlci1tYW51YWwtc3R5bGUuY3NzJyIgLz4KLSAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgotICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+Ci0gIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KLSAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KLQotPCEtLSAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+ICAtLT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi5yc3QgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ucnN0CmluZGV4IDAxOWFmZDIuLmQ3NGU3NjggMTAwNjQ0Ci0tLSBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi5yc3QKKysrIGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnJzdApAQCAtMzE1LDcgKzMxNSw3IEBACiB0byBtYXJrIG5ld2VyIGFuZCBtb3JlIGV4cGVyaW1lbnRhbCByZWNpcGUgdmVyc2lvbnMgdW50aWwgdGhleSBoYXZlCiB1bmRlcmdvbmUgc3VmZmljaWVudCB0ZXN0aW5nIHRvIGJlIGNvbnNpZGVyZWQgc3RhYmxlLgogCi1XaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSDigJx2ZXJzaW9uc+KAnSBvZiBhIGdpdmVuIHJlY2lwZSwgQml0QmFrZSBkZWZhdWx0cworV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgInZlcnNpb25zIiBvZiBhIGdpdmVuIHJlY2lwZSwgQml0QmFrZSBkZWZhdWx0cwogdG8gc2VsZWN0aW5nIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gSWYgdGhlCiByZWNpcGUgaW4gcXVlc3Rpb24gaGFzIGEKIDp0ZXJtOmBERUZBVUxUX1BSRUZFUkVOQ0VgIHNldCBsb3dlciB0aGFuCkBAIC0zMjUsNyArMzI1LDcgQEAKIEFkZGl0aW9uYWxseSwgdGhlIHVzZXIgY2FuIHNwZWNpZnkgdGhlaXIgcHJlZmVycmVkIHZlcnNpb24uCiAKIElmIHRoZSBmaXJzdCByZWNpcGUgaXMgbmFtZWQgYGBhXzEuMS5iYmBgLCB0aGVuIHRoZQotOnRlcm06YFBOYCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byDigJxh4oCdLCBhbmQgdGhlCis6dGVybTpgUE5gIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvICJhIiwgYW5kIHRoZQogOnRlcm06YFBWYCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byAxLjEuCiAKIFRodXMsIGlmIGEgcmVjaXBlIG5hbWVkIGBgYV8xLjIuYmJgYCBleGlzdHMsIEJpdEJha2Ugd2lsbCBjaG9vc2UgMS4yIGJ5CmRpZmYgLS1naXQgYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sIGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRjNWEyNi4uMDAwMDAwMAotLS0gYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAyOSArMCwwIEBACi08IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCi0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KLQotPGNoYXB0ZXIgaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uIj4KLSAgICA8dGl0bGU+RXhlY3V0aW9uPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIGZvciBydW5uaW5nIEJpdEJha2UgaXMgdG8gcHJvZHVjZSBzb21lIGtpbmQKLSAgICAgICAgb2Ygb3V0cHV0IHN1Y2ggYXMgYSBzaW5nbGUgaW5zdGFsbGFibGUgcGFja2FnZSwgYSBrZXJuZWwsIGEgc29mdHdhcmUKLSAgICAgICAgZGV2ZWxvcG1lbnQga2l0LCBvciBldmVuIGEgZnVsbCwgYm9hcmQtc3BlY2lmaWMgYm9vdGFibGUgTGludXggaW1hZ2UsCi0gICAgICAgIGNvbXBsZXRlIHdpdGggYm9vdGxvYWRlciwga2VybmVsLCBhbmQgcm9vdCBmaWxlc3lzdGVtLgotICAgICAgICBPZiBjb3Vyc2UsIHlvdSBjYW4gZXhlY3V0ZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgotICAgICAgICBjb21tYW5kIHdpdGggb3B0aW9ucyB0aGF0IGNhdXNlIGl0IHRvIGV4ZWN1dGUgc2luZ2xlIHRhc2tzLAotICAgICAgICBjb21waWxlIHNpbmdsZSByZWNpcGUgZmlsZXMsIGNhcHR1cmUgb3IgY2xlYXIgZGF0YSwgb3Igc2ltcGx5Ci0gICAgICAgIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIEJpdEJha2UncyBleGVjdXRpb24gcHJvY2VzcyBmcm9tIHN0YXJ0Ci0gICAgICAgIHRvIGZpbmlzaCB3aGVuIHlvdSB1c2UgaXQgdG8gY3JlYXRlIGFuIGltYWdlLgotICAgICAgICBUaGUgZXhlY3V0aW9uIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kCi0gICAgICAgIGZvcm06Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgotICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQml0QmFrZSBjb21tYW5kIGFuZCBpdHMgb3B0aW9ucywKLSAgICAgICAgc2VlCi0gICAgICAgICI8bGluayBsaW5rZW5kPSdiaXRiYWtlLXVzZXItbWFudWFsLWNvbW1hbmQnPlRoZSBCaXRCYWtlIENvbW1hbmQ8L2xpbms+IgotICAgICAgICBzZWN0aW9uLgotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFByaW9yIHRvIGV4ZWN1dGluZyBCaXRCYWtlLCB5b3Ugc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgIHBhcmFsbGVsIHRocmVhZCBleGVjdXRpb24gb24geW91ciBidWlsZCBob3N0IGJ5IHNldHRpbmcgdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIHByb2plY3QncyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBIGNvbW1vbiBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUgZm9yIHlvdXIgYnVpbGQgaG9zdCBpcyB0byBydW4KLSAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBncmVwIHByb2Nlc3NvciAvcHJvYy9jcHVpbmZvCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycywgd2hpY2ggdGFrZXMgaW50bwotICAgICAgICAgICAgICAgIGFjY291bnQgaHlwZXItdGhyZWFkaW5nLgotICAgICAgICAgICAgICAgIFRodXMsIGEgcXVhZC1jb3JlIGJ1aWxkIGhvc3Qgd2l0aCBoeXBlci10aHJlYWRpbmcgbW9zdCBsaWtlbHkKLSAgICAgICAgICAgICAgICBzaG93cyBlaWdodCBwcm9jZXNzb3JzLCB3aGljaCBpcyB0aGUgdmFsdWUgeW91IHdvdWxkIHRoZW4gYXNzaWduIHRvCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEEgcG9zc2libHkgc2ltcGxlciBzb2x1dGlvbiBpcyB0aGF0IHNvbWUgTGludXggZGlzdHJpYnV0aW9ucwotICAgICAgICAgICAgICAgIChlLmcuIERlYmlhbiBhbmQgVWJ1bnR1KSBwcm92aWRlIHRoZSA8ZmlsZW5hbWU+bmNwdXM8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L25vdGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9J3BhcnNpbmctdGhlLWJhc2UtY29uZmlndXJhdGlvbi1tZXRhZGF0YSc+Ci0gICAgICAgIDx0aXRsZT5QYXJzaW5nIHRoZSBCYXNlIENvbmZpZ3VyYXRpb24gTWV0YWRhdGE8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIEJpdEJha2UgZG9lcyBpcyBwYXJzZSBiYXNlIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgIG1ldGFkYXRhLgotICAgICAgICAgICAgQmFzZSBjb25maWd1cmF0aW9uIG1ldGFkYXRhIGNvbnNpc3RzIG9mIHlvdXIgcHJvamVjdCdzCi0gICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gZGV0ZXJtaW5lIHdoYXQKLSAgICAgICAgICAgIGxheWVycyBCaXRCYWtlIG5lZWRzIHRvIHJlY29nbml6ZSwgYWxsIG5lY2Vzc2FyeQotICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyAob25lIGZyb20gZWFjaCBsYXllciksCi0gICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgVGhlIGRhdGEgaXRzZWxmIGlzIG9mIHZhcmlvdXMgdHlwZXM6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBEZXRhaWxzIGFib3V0IHBhcnRpY3VsYXIgcGllY2VzIG9mIHNvZnR3YXJlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNsYXNzIERhdGE6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQW4gYWJzdHJhY3Rpb24gb2YgY29tbW9uIGJ1aWxkIGluZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgIChlLmcuIGhvdyB0byBidWlsZCBhIExpbnV4IGtlcm5lbCkuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBEYXRhOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtc3BlY2lmaWMgc2V0dGluZ3MsIHBvbGljeSBkZWNpc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIGFjdHMgYXMgdGhlIGdsdWUgdG8gYmluZCBldmVyeXRoaW5nCi0gICAgICAgICAgICAgICAgICAgIHRvZ2V0aGVyLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGVzIGFyZSB1c2VkIHRvCi0gICAgICAgICAgICBjb25zdHJ1Y3Qga2V5IHZhcmlhYmxlcyBzdWNoIGFzCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICBhbmQKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPi4KLSAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIHNlYXJjaCBmb3IKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGNsYXNzIGZpbGVzIHVuZGVyIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgZGlyZWN0b3JpZXMsIHJlc3BlY3RpdmVseS4KLSAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaXMgdXNlZCB0byBsb2NhdGUgYm90aCByZWNpcGUKLSAgICAgICAgICAgIGFuZCByZWNpcGUgYXBwZW5kIGZpbGVzCi0gICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgSWYgdGhlcmUgaXMgbm8gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAotICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0aGUgdXNlciBoYXMgc2V0IHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGRpcmVjdGx5IGluIHRoZSBlbnZpcm9ubWVudC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgTmV4dCwgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIGxvY2F0ZWQKLSAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdGhhdCB3YXMKLSAgICAgICAgICAgIGp1c3QgY29uc3RydWN0ZWQuCi0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgbWF5IGFsc28gaW5jbHVkZSBvdGhlcgotICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB1c2luZyB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gZGlyZWN0aXZlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgUHJpb3IgdG8gcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzLCBCaXRCYWtlIGxvb2tzCi0gICAgICAgICAgICBhdCBjZXJ0YWluIHZhcmlhYmxlcywgaW5jbHVkaW5nOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9FTlZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfRU5WX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9FTlZfRVhUUkFXSElURSc+PGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX1BSRVNFUlZFX0VOVic+PGZpbGVuYW1lPkJCX1BSRVNFUlZFX0VOVjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9PUklHRU5WJz48ZmlsZW5hbWU+QkJfT1JJR0VOVjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CSVRCQUtFX1VJJz48ZmlsZW5hbWU+QklUQkFLRV9VSTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgVGhlIGZpcnN0IGZvdXIgdmFyaWFibGVzIGluIHRoaXMgbGlzdCByZWxhdGUgdG8gaG93IEJpdEJha2UgdHJlYXRzIHNoZWxsCi0gICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZHVyaW5nIHRhc2sgZXhlY3V0aW9uLgotICAgICAgICAgICAgQnkgZGVmYXVsdCwgQml0QmFrZSBjbGVhbnMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgcHJvdmlkZXMgdGlnaHQKLSAgICAgICAgICAgIGNvbnRyb2wgb3ZlciB0aGUgc2hlbGwgZXhlY3V0aW9uIGVudmlyb25tZW50LgotICAgICAgICAgICAgSG93ZXZlciwgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZXNlIGZpcnN0IGZvdXIgdmFyaWFibGVzLCB5b3UgY2FuCi0gICAgICAgICAgICBhcHBseSB5b3VyIGNvbnRyb2wgcmVnYXJkaW5nIHRoZQotICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFsbG93ZWQgdG8gYmUgdXNlZCBieSBCaXRCYWtlIGluIHRoZSBzaGVsbAotICAgICAgICAgICAgZHVyaW5nIGV4ZWN1dGlvbiBvZiB0YXNrcy4KLSAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXNzaW5nLWluZm9ybWF0aW9uLWludG8tdGhlLWJ1aWxkLXRhc2stZW52aXJvbm1lbnQnPlBhc3NpbmcgSW5mb3JtYXRpb24gSW50byB0aGUgQnVpbGQgVGFzayBFbnZpcm9ubWVudDwvbGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdmFyaWFibGVzIGluIHRoZQotICAgICAgICAgICAgdmFyaWFibGUgZ2xvc3NhcnkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoZXkgd29yayBhbmQKLSAgICAgICAgICAgIG9uIGhvdyB0byB1c2UgdGhlbS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGJhc2UgY29uZmlndXJhdGlvbiBtZXRhZGF0YSBpcyBnbG9iYWwKLSAgICAgICAgICAgIGFuZCB0aGVyZWZvcmUgYWZmZWN0cyBhbGwgcmVjaXBlcyBhbmQgdGFza3MgdGhhdCBhcmUgZXhlY3V0ZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJpdEJha2UgZmlyc3Qgc2VhcmNoZXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZm9yIGFuCi0gICAgICAgICAgICBvcHRpb25hbCA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgotICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlIHRoYXQgaXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiAnbGF5ZXInIGRpcmVjdG9yaWVzLgotICAgICAgICAgICAgUmVjYWxsIHRoYXQgaWYgQml0QmFrZSBjYW5ub3QgZmluZCBhIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGZpbGUsIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGUgdXNlciBoYXMgc2V0IHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlcyBkaXJlY3RseSBpbiB0aGUgZW52aXJvbm1lbnQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvciBlYWNoIGRpcmVjdG9yeSAobGF5ZXIpIGluIHRoaXMgbGlzdCwgYSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGZpbGUgaXMgbG9jYXRlZCBhbmQgcGFyc2VkIHdpdGggdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItTEFZRVJESVInPjxmaWxlbmFtZT5MQVlFUkRJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgdmFyaWFibGUgYmVpbmcgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxheWVyIHdhcyBmb3VuZC4KLSAgICAgICAgICAgIFRoZSBpZGVhIGlzIHRoZXNlIGZpbGVzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICBhbmQgb3RoZXIgdmFyaWFibGVzIGNvcnJlY3RseSBmb3IgYSBnaXZlbiBidWlsZCBkaXJlY3RvcnkuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJpdEJha2UgdGhlbiBleHBlY3RzIHRvIGZpbmQgdGhlIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBmaWxlIHNvbWV3aGVyZSBpbiB0aGUgdXNlci1zcGVjaWZpZWQgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgZ2VuZXJhbGx5IGhhcyBpbmNsdWRlIGRpcmVjdGl2ZXMgdG8gcHVsbAotICAgICAgICAgICAgaW4gYW55IG90aGVyIG1ldGFkYXRhIHN1Y2ggYXMgZmlsZXMgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSwKLSAgICAgICAgICAgIHRoZSBtYWNoaW5lLCB0aGUgbG9jYWwgZW52aXJvbm1lbnQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgT25seSB2YXJpYWJsZSBkZWZpbml0aW9ucyBhbmQgaW5jbHVkZSBkaXJlY3RpdmVzIGFyZSBhbGxvd2VkCi0gICAgICAgICAgICBpbiBCaXRCYWtlIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGVzLgotICAgICAgICAgICAgU29tZSB2YXJpYWJsZXMgZGlyZWN0bHkgaW5mbHVlbmNlIEJpdEJha2UncyBiZWhhdmlvci4KLSAgICAgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBtaWdodCBoYXZlIGJlZW4gc2V0IGZyb20gdGhlIGVudmlyb25tZW50Ci0gICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBwcmV2aW91c2x5Ci0gICAgICAgICAgICBtZW50aW9uZWQgb3Igc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWJiLXZhcmlhYmxlcy1nbG9zJz5WYXJpYWJsZXMgR2xvc3Nhcnk8L2xpbms+IgotICAgICAgICAgICAgY2hhcHRlciBwcmVzZW50cyBhIGZ1bGwgbGlzdCBvZiB2YXJpYWJsZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFmdGVyIHBhcnNpbmcgY29uZmlndXJhdGlvbiBmaWxlcywgQml0QmFrZSB1c2VzIGl0cyBydWRpbWVudGFyeQotICAgICAgICAgICAgaW5oZXJpdGFuY2UgbWVjaGFuaXNtLCB3aGljaCBpcyB0aHJvdWdoIGNsYXNzIGZpbGVzLCB0byBpbmhlcml0Ci0gICAgICAgICAgICBzb21lIHN0YW5kYXJkIGNsYXNzZXMuCi0gICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBhIGNsYXNzIHdoZW4gdGhlIGluaGVyaXQgZGlyZWN0aXZlIHJlc3BvbnNpYmxlCi0gICAgICAgICAgICBmb3IgZ2V0dGluZyB0aGF0IGNsYXNzIGlzIGVuY291bnRlcmVkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUgaXMgYWx3YXlzIGluY2x1ZGVkLgotICAgICAgICAgICAgT3RoZXIgY2xhc3NlcyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItSU5IRVJJVCc+PGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlIGFyZSBhbHNvIGluY2x1ZGVkLgotICAgICAgICAgICAgQml0QmFrZSBzZWFyY2hlcyBmb3IgY2xhc3MgZmlsZXMgaW4gYQotICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkgdW5kZXIKLSAgICAgICAgICAgIHRoZSBwYXRocyBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaW4gdGhlIHNhbWUgd2F5IGFzCi0gICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBIGdvb2Qgd2F5IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZAotICAgICAgICAgICAgdGhlIGNsYXNzIGZpbGVzIHVzZWQgaW4geW91ciBleGVjdXRpb24gZW52aXJvbm1lbnQgaXMgdG8KLSAgICAgICAgICAgIHJ1biB0aGUgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZDoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIC1lID4gbXliYi5sb2cKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIEV4YW1pbmluZyB0aGUgdG9wIG9mIHRoZSA8ZmlsZW5hbWU+bXliYi5sb2c8L2ZpbGVuYW1lPgotICAgICAgICAgICAgc2hvd3MgeW91IHRoZSBtYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNsYXNzIGZpbGVzCi0gICAgICAgICAgICB1c2VkIGluIHlvdXIgZXhlY3V0aW9uIGVudmlyb25tZW50LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgQml0QmFrZSBwYXJzZXMgY3VybHkgYnJhY2VzLgotICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIHVzZXMgYSBjbG9zaW5nIGN1cmx5IGJyYWNlIHdpdGhpbiB0aGUgZnVuY3Rpb24gYW5kCi0gICAgICAgICAgICAgICAgdGhlIGNoYXJhY3RlciBoYXMgbm8gbGVhZGluZyBzcGFjZXMsIEJpdEJha2UgcHJvZHVjZXMgYSBwYXJzaW5nCi0gICAgICAgICAgICAgICAgZXJyb3IuCi0gICAgICAgICAgICAgICAgSWYgeW91IHVzZSBhIHBhaXIgb2YgY3VybHkgYnJhY2VzIGluIGEgc2hlbGwgZnVuY3Rpb24sIHRoZQotICAgICAgICAgICAgICAgIGNsb3NpbmcgY3VybHkgYnJhY2UgbXVzdCBub3QgYmUgbG9jYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKLSAgICAgICAgICAgICAgICB3aXRob3V0IGxlYWRpbmcgc3BhY2VzLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjYXVzZXMgQml0QmFrZSB0byBwcm9kdWNlIGEgcGFyc2luZwotICAgICAgICAgICAgICAgIGVycm9yOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7Ci0gICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCi0gICAgIHVzYWdlKCkKLSAgICAgewotICAgICAgIGVjaG8gInRlc3QiCi0gICAgICAgIyMjIyMjIFRoZSBmb2xsb3dpbmcgIn0iIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBjYXVzZXMgYSBwYXJzaW5nIGVycm9yICMjIyMjIwotICAgICB9Ci0gICAgIEVPRgotICAgICB9Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFdyaXRpbmcgdGhlIHJlY2lwZSB0aGlzIHdheSBhdm9pZHMgdGhlIGVycm9yOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7Ci0gICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCi0gICAgIHVzYWdlKCkKLSAgICAgewotICAgICAgIGVjaG8gInRlc3QiCi0gICAgICAgIyMjIyMjVGhlIGZvbGxvd2luZyAifSIgd2l0aCBhIGxlYWRpbmcgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGF2b2lkcyB0aGUgZXJyb3IgIyMjIyMjCi0gICAgICB9Ci0gICAgIEVPRgotICAgICB9Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L25vdGU+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2xvY2F0aW5nLWFuZC1wYXJzaW5nLXJlY2lwZXMnPgotICAgICAgICA8dGl0bGU+TG9jYXRpbmcgYW5kIFBhcnNpbmcgUmVjaXBlczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBEdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcGhhc2UsIEJpdEJha2Ugd2lsbCBoYXZlIHNldAotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCRklMRVMnPjxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT48L2xpbms+LgotICAgICAgICAgICAgQml0QmFrZSBub3cgdXNlcyBpdCB0byBjb25zdHJ1Y3QgYSBsaXN0IG9mIHJlY2lwZXMgdG8gcGFyc2UsCi0gICAgICAgICAgICBhbG9uZyB3aXRoIGFueSBhcHBlbmQgZmlsZXMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgIHRvIGFwcGx5LgotICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCi0gICAgICAgICAgICBhdmFpbGFibGUgZmlsZXMgYW5kIHN1cHBvcnRzIHdpbGRjYXJkcy4KLSAgICAgICAgICAgIEFuIGV4YW1wbGUgd291bGQgYmU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCRklMRVMgPSAiL3BhdGgvdG8vYmJmaWxlcy8qLmJiIC9wYXRoL3RvL2FwcGVuZHMvKi5iYmFwcGVuZCIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIGVhY2ggcmVjaXBlIGFuZCBhcHBlbmQgZmlsZSBsb2NhdGVkCi0gICAgICAgICAgICB3aXRoIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gYW5kIHN0b3JlcyB0aGUgdmFsdWVzIG9mCi0gICAgICAgICAgICB2YXJpb3VzIHZhcmlhYmxlcyBpbnRvIHRoZSBkYXRhc3RvcmUuCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBBcHBlbmQgZmlsZXMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGVuY291bnRlcmVkIGluCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIEZvciBlYWNoIGZpbGUsIGEgZnJlc2ggY29weSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGlzCi0gICAgICAgICAgICBtYWRlLCB0aGVuIHRoZSByZWNpcGUgaXMgcGFyc2VkIGxpbmUgYnkgbGluZS4KLSAgICAgICAgICAgIEFueSBpbmhlcml0IHN0YXRlbWVudHMgY2F1c2UgQml0QmFrZSB0byBmaW5kIGFuZAotICAgICAgICAgICAgdGhlbiBwYXJzZSBjbGFzcyBmaWxlcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pCi0gICAgICAgICAgICB1c2luZwotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgYXMgdGhlIHNlYXJjaCBwYXRoLgotICAgICAgICAgICAgRmluYWxseSwgQml0QmFrZSBwYXJzZXMgaW4gb3JkZXIgYW55IGFwcGVuZCBmaWxlcyBmb3VuZCBpbgotICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgT25lIGNvbW1vbiBjb252ZW50aW9uIGlzIHRvIHVzZSB0aGUgcmVjaXBlIGZpbGVuYW1lIHRvIGRlZmluZQotICAgICAgICAgICAgcGllY2VzIG9mIG1ldGFkYXRhLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiB0aGUgcmVjaXBlCi0gICAgICAgICAgICBuYW1lIGFuZCB2ZXJzaW9uIGFyZSB1c2VkIHRvIHNldCB0aGUgdmFyaWFibGVzCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiBhbmQKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCi0gICAgIFBWID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsxXSBvciAnMS4wJ30iCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGEgcmVjaXBlIGNhbGxlZCAic29tZXRoaW5nXzEuMi4zLmJiIiB3b3VsZCBzZXQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IHRvICJzb21ldGhpbmciIGFuZAotICAgICAgICAgICAgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdG8gIjEuMi4zIi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQnkgdGhlIHRpbWUgcGFyc2luZyBpcyBjb21wbGV0ZSBmb3IgYSByZWNpcGUsIEJpdEJha2UKLSAgICAgICAgICAgIGhhcyBhIGxpc3Qgb2YgdGFza3MgdGhhdCB0aGUgcmVjaXBlIGRlZmluZXMgYW5kIGEgc2V0IG9mCi0gICAgICAgICAgICBkYXRhIGNvbnNpc3Rpbmcgb2Yga2V5cyBhbmQgdmFsdWVzIGFzIHdlbGwgYXMKLSAgICAgICAgICAgIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhc2tzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIGRvZXMgbm90IG5lZWQgYWxsIG9mIHRoaXMgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBJdCBvbmx5IG5lZWRzIGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbmZvcm1hdGlvbiB0byBtYWtlCi0gICAgICAgICAgICBkZWNpc2lvbnMgYWJvdXQgdGhlIHJlY2lwZS4KLSAgICAgICAgICAgIENvbnNlcXVlbnRseSwgQml0QmFrZSBjYWNoZXMgdGhlIHZhbHVlcyBpbiB3aGljaCBpdCBpcwotICAgICAgICAgICAgaW50ZXJlc3RlZCBhbmQgZG9lcyBub3Qgc3RvcmUgdGhlIHJlc3Qgb2YgdGhlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgRXhwZXJpZW5jZSBoYXMgc2hvd24gaXQgaXMgZmFzdGVyIHRvIHJlLXBhcnNlIHRoZSBtZXRhZGF0YSB0aGFuIHRvCi0gICAgICAgICAgICB0cnkgYW5kIHdyaXRlIGl0IG91dCB0byB0aGUgZGlzayBhbmQgdGhlbiByZWxvYWQgaXQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZXJlIHBvc3NpYmxlLCBzdWJzZXF1ZW50IEJpdEJha2UgY29tbWFuZHMgcmV1c2UgdGhpcyBjYWNoZSBvZgotICAgICAgICAgICAgcmVjaXBlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgVGhlIHZhbGlkaXR5IG9mIHRoaXMgY2FjaGUgaXMgZGV0ZXJtaW5lZCBieSBmaXJzdCBjb21wdXRpbmcgYQotICAgICAgICAgICAgY2hlY2tzdW0gb2YgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBkYXRhIChzZWUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9IQVNIQ09ORklHX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0hBU0hDT05GSUdfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+KQotICAgICAgICAgICAgYW5kIHRoZW4gY2hlY2tpbmcgaWYgdGhlIGNoZWNrc3VtIG1hdGNoZXMuCi0gICAgICAgICAgICBJZiB0aGF0IGNoZWNrc3VtIG1hdGNoZXMgd2hhdCBpcyBpbiB0aGUgY2FjaGUgYW5kIHRoZSByZWNpcGUKLSAgICAgICAgICAgIGFuZCBjbGFzcyBmaWxlcyBoYXZlIG5vdCBjaGFuZ2VkLCBCaXRCYWtlIGlzIGFibGUgdG8gdXNlCi0gICAgICAgICAgICB0aGUgY2FjaGUuCi0gICAgICAgICAgICBCaXRCYWtlIHRoZW4gcmVsb2FkcyB0aGUgY2FjaGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUKLSAgICAgICAgICAgIGluc3RlYWQgb2YgcmVwYXJzaW5nIGl0IGZyb20gc2NyYXRjaC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgUmVjaXBlIGZpbGUgY29sbGVjdGlvbnMgZXhpc3QgdG8gYWxsb3cgdGhlIHVzZXIgdG8KLSAgICAgICAgICAgIGhhdmUgbXVsdGlwbGUgcmVwb3NpdG9yaWVzIG9mCi0gICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMgdGhhdCBjb250YWluIHRoZSBzYW1lCi0gICAgICAgICAgICBleGFjdCBwYWNrYWdlLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBlYXNpbHkgdXNlIHRoZW0gdG8gbWFrZSBvbmUncwotICAgICAgICAgICAgb3duIGxvY2FsIGNvcHkgb2YgYW4gdXBzdHJlYW0gcmVwb3NpdG9yeSwgYnV0IHdpdGgKLSAgICAgICAgICAgIGN1c3RvbSBtb2RpZmljYXRpb25zIHRoYXQgb25lIGRvZXMgbm90IHdhbnQgdXBzdHJlYW0uCi0gICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgQkJGSUxFUyA9ICIvc3R1ZmYvb3BlbmVtYmVkZGVkLyovKi5iYiAvc3R1ZmYvb3BlbmVtYmVkZGVkLm1vZGlmaWVkLyovKi5iYiIKLSAgICBCQkZJTEVfQ09MTEVDVElPTlMgPSAidXBzdHJlYW0gbG9jYWwiCi0gICAgQkJGSUxFX1BBVFRFUk5fdXBzdHJlYW0gPSAiXi9zdHVmZi9vcGVuZW1iZWRkZWQvIgotICAgIEJCRklMRV9QQVRURVJOX2xvY2FsID0gIl4vc3R1ZmYvb3BlbmVtYmVkZGVkLm1vZGlmaWVkLyIKLSAgICBCQkZJTEVfUFJJT1JJVFlfdXBzdHJlYW0gPSAiNSIKLSAgICBCQkZJTEVfUFJJT1JJVFlfbG9jYWwgPSAiMTAiCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgbGF5ZXJzIG1lY2hhbmlzbSBpcyBub3cgdGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgY29sbGVjdGluZwotICAgICAgICAgICAgICAgIGNvZGUuCi0gICAgICAgICAgICAgICAgV2hpbGUgdGhlIGNvbGxlY3Rpb25zIGNvZGUgcmVtYWlucywgaXRzIG1haW4gdXNlIGlzIHRvIHNldCBsYXllcgotICAgICAgICAgICAgICAgIHByaW9yaXRpZXMgYW5kIHRvIGRlYWwgd2l0aCBvdmVybGFwIChjb25mbGljdHMpIGJldHdlZW4gbGF5ZXJzLgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2JiLWJpdGJha2UtcHJvdmlkZXJzJz4KLSAgICAgICAgPHRpdGxlPlByb3ZpZGVyczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBc3N1bWluZyBCaXRCYWtlIGhhcyBiZWVuIGluc3RydWN0ZWQgdG8gZXhlY3V0ZSBhIHRhcmdldAotICAgICAgICAgICAgYW5kIHRoYXQgYWxsIHRoZSByZWNpcGUgZmlsZXMgaGF2ZSBiZWVuIHBhcnNlZCwgQml0QmFrZQotICAgICAgICAgICAgc3RhcnRzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJ1aWxkIHRoZSB0YXJnZXQuCi0gICAgICAgICAgICBCaXRCYWtlIGxvb2tzIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QKLSAgICAgICAgICAgIGZvciBlYWNoIG9mIHRoZSByZWNpcGVzLgotICAgICAgICAgICAgQSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIHRoZSBsaXN0IG9mIG5hbWVzIGJ5IHdoaWNoCi0gICAgICAgICAgICB0aGUgcmVjaXBlIGNhbiBiZSBrbm93bi4KLSAgICAgICAgICAgIEVhY2ggcmVjaXBlJ3MgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdCBpcyBjcmVhdGVkCi0gICAgICAgICAgICBpbXBsaWNpdGx5IHRocm91Z2ggdGhlIHJlY2lwZSdzCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQotICAgICAgICAgICAgYW5kIGV4cGxpY2l0bHkgdGhyb3VnaCB0aGUgcmVjaXBlJ3MKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QUk9WSURFUyc+PGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgb3B0aW9uYWwuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gYSByZWNpcGUgdXNlcyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiwgdGhhdCByZWNpcGUncwotICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgZm91bmQgdW5kZXIgYW4gYWx0ZXJuYXRpdmUgbmFtZSBvciBuYW1lcyBvdGhlcgotICAgICAgICAgICAgdGhhbiB0aGUgaW1wbGljaXQgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gbmFtZS4KLSAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgYSByZWNpcGUgbmFtZWQgPGZpbGVuYW1lPmtleWJvYXJkXzEuMC5iYjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBjb250YWluZWQgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgUFJPVklERVMgKz0gImZ1bGxrZXlib2FyZCIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGZvciB0aGlzIHJlY2lwZSBiZWNvbWVzCi0gICAgICAgICAgICAia2V5Ym9hcmQiLCB3aGljaCBpcyBpbXBsaWNpdCwgYW5kICJmdWxsa2V5Ym9hcmQiLCB3aGljaCBpcyBleHBsaWNpdC4KLSAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIGZ1bmN0aW9uYWxpdHkgZm91bmQgaW4KLSAgICAgICAgICAgIDxmaWxlbmFtZT5rZXlib2FyZF8xLjAuYmI8L2ZpbGVuYW1lPiBjYW4gYmUgZm91bmQgdW5kZXIgdHdvCi0gICAgICAgICAgICBkaWZmZXJlbnQgbmFtZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1wcmVmZXJlbmNlcyc+Ci0gICAgICAgIDx0aXRsZT5QcmVmZXJlbmNlczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdCBpcyBvbmx5IHBhcnQgb2YgdGhlIHNvbHV0aW9uCi0gICAgICAgICAgICBmb3IgZmlndXJpbmcgb3V0IGEgdGFyZ2V0J3MgcmVjaXBlcy4KLSAgICAgICAgICAgIEJlY2F1c2UgdGFyZ2V0cyBtaWdodCBoYXZlIG11bHRpcGxlIHByb3ZpZGVycywgQml0QmFrZSBuZWVkcwotICAgICAgICAgICAgdG8gcHJpb3JpdGl6ZSBwcm92aWRlcnMgYnkgZGV0ZXJtaW5pbmcgcHJvdmlkZXIgcHJlZmVyZW5jZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEEgY29tbW9uIGV4YW1wbGUgaW4gd2hpY2ggYSB0YXJnZXQgaGFzIG11bHRpcGxlIHByb3ZpZGVycwotICAgICAgICAgICAgaXMgInZpcnR1YWwva2VybmVsIiwgd2hpY2ggaXMgb24gdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGZvciBlYWNoIGtlcm5lbCByZWNpcGUuCi0gICAgICAgICAgICBFYWNoIG1hY2hpbmUgb2Z0ZW4gc2VsZWN0cyB0aGUgYmVzdCBrZXJuZWwgcHJvdmlkZXIgYnkgdXNpbmcgYQotICAgICAgICAgICAgbGluZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8iCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGUgZGVmYXVsdAotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBSRUZFUlJFRF9QUk9WSURFUic+PGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgaXMgdGhlIHByb3ZpZGVyIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdGFyZ2V0LgotICAgICAgICAgICAgQml0QmFrZSBpdGVyYXRlcyB0aHJvdWdoIGVhY2ggdGFyZ2V0IGl0IG5lZWRzIHRvIGJ1aWxkIGFuZAotICAgICAgICAgICAgcmVzb2x2ZXMgdGhlbSBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHVzaW5nIHRoaXMgcHJvY2Vzcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVW5kZXJzdGFuZGluZyBob3cgcHJvdmlkZXJzIGFyZSBjaG9zZW4gaXMgbWFkZSBjb21wbGljYXRlZCBieSB0aGUgZmFjdAotICAgICAgICAgICAgdGhhdCBtdWx0aXBsZSB2ZXJzaW9ucyBtaWdodCBleGlzdCBmb3IgYSBnaXZlbiBwcm92aWRlci4KLSAgICAgICAgICAgIEJpdEJha2UgZGVmYXVsdHMgdG8gdGhlIGhpZ2hlc3QgdmVyc2lvbiBvZiBhIHByb3ZpZGVyLgotICAgICAgICAgICAgVmVyc2lvbiBjb21wYXJpc29ucyBhcmUgbWFkZSB1c2luZyB0aGUgc2FtZSBtZXRob2QgYXMgRGViaWFuLgotICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUFJFRkVSUkVEX1ZFUlNJT04nPjxmaWxlbmFtZT5QUkVGRVJSRURfVkVSU0lPTjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgdmVyc2lvbi4KLSAgICAgICAgICAgIFlvdSBjYW4gaW5mbHVlbmNlIHRoZSBvcmRlciBieSB1c2luZyB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCeSBkZWZhdWx0LCBmaWxlcyBoYXZlIGEgcHJlZmVyZW5jZSBvZiAiMCIuCi0gICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiB0byAiLTEiIG1ha2VzIHRoZQotICAgICAgICAgICAgcmVjaXBlIHVubGlrZWx5IHRvIGJlIHVzZWQgdW5sZXNzIGl0IGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4KLSAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICIxIiBtYWtlcyBpdAotICAgICAgICAgICAgbGlrZWx5IHRoZSByZWNpcGUgaXMgdXNlZC4KLSAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfVkVSU0lPTjwvZmlsZW5hbWU+IG92ZXJyaWRlcyBhbnkKLSAgICAgICAgICAgIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiBzZXR0aW5nLgotICAgICAgICAgICAgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IGlzIG9mdGVuIHVzZWQgdG8gbWFyayBuZXdlcgotICAgICAgICAgICAgYW5kIG1vcmUgZXhwZXJpbWVudGFsIHJlY2lwZSB2ZXJzaW9ucyB1bnRpbCB0aGV5IGhhdmUgdW5kZXJnb25lCi0gICAgICAgICAgICBzdWZmaWNpZW50IHRlc3RpbmcgdG8gYmUgY29uc2lkZXJlZCBzdGFibGUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIOKAnHZlcnNpb25z4oCdIG9mIGEgZ2l2ZW4gcmVjaXBlLAotICAgICAgICAgICAgQml0QmFrZSBkZWZhdWx0cyB0byBzZWxlY3RpbmcgdGhlIG1vc3QgcmVjZW50Ci0gICAgICAgICAgICB2ZXJzaW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4KLSAgICAgICAgICAgIElmIHRoZSByZWNpcGUgaW4gcXVlc3Rpb24gaGFzIGEKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHNldCBsb3dlciB0aGFuIHRoZSBvdGhlciByZWNpcGVzIChkZWZhdWx0IGlzIDApLCB0aGVuCi0gICAgICAgICAgICBpdCB3aWxsIG5vdCBiZSBzZWxlY3RlZC4KLSAgICAgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBwZXJzb24gb3IgcGVyc29ucyBtYWludGFpbmluZwotICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgb2YgcmVjaXBlIGZpbGVzIHRvIHNwZWNpZnkKLSAgICAgICAgICAgIHRoZWlyIHByZWZlcmVuY2UgZm9yIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHZlcnNpb24uCi0gICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSB1c2VyIGNhbiBzcGVjaWZ5IHRoZWlyIHByZWZlcnJlZCB2ZXJzaW9uLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJZiB0aGUgZmlyc3QgcmVjaXBlIGlzIG5hbWVkIDxmaWxlbmFtZT5hXzEuMS5iYjwvZmlsZW5hbWU+LCB0aGVuIHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKLSAgICAgICAgICAgIHdpbGwgYmUgc2V0IHRvIOKAnGHigJ0sIGFuZCB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byAxLjEuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRodXMsIGlmIGEgcmVjaXBlIG5hbWVkIDxmaWxlbmFtZT5hXzEuMi5iYjwvZmlsZW5hbWU+IGV4aXN0cywgQml0QmFrZQotICAgICAgICAgICAgd2lsbCBjaG9vc2UgMS4yIGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgaW4gYQotICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0IEJpdEJha2UgcGFyc2VzLCB5b3UKLSAgICAgICAgICAgIGNhbiBjaGFuZ2UgdGhhdCBwcmVmZXJlbmNlOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQUkVGRVJSRURfVkVSU0lPTl9hID0gIjEuMSIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxub3RlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSXQgaXMgY29tbW9uIGZvciBhIHJlY2lwZSB0byBwcm92aWRlIHR3byB2ZXJzaW9ucyAtLSBhIHN0YWJsZSwKLSAgICAgICAgICAgICAgICBudW1iZXJlZCAoYW5kIHByZWZlcnJlZCkgdmVyc2lvbiwgYW5kIGEgdmVyc2lvbiB0aGF0IGlzCi0gICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBjaGVja2VkIG91dCBmcm9tIGEgc291cmNlIGNvZGUgcmVwb3NpdG9yeSB0aGF0Ci0gICAgICAgICAgICAgICAgaXMgY29uc2lkZXJlZCBtb3JlICJibGVlZGluZyBlZGdlIiBidXQgY2FuIGJlIHNlbGVjdGVkIG9ubHkKLSAgICAgICAgICAgICAgICBleHBsaWNpdGx5LgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gdGhlIE9wZW5FbWJlZGRlZCBjb2RlYmFzZSwgdGhlcmUgaXMgYSBzdGFuZGFyZCwKLSAgICAgICAgICAgICAgICB2ZXJzaW9uZWQgcmVjaXBlIGZpbGUgZm9yIEJ1c3lCb3gsCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3hfMS4yMi4xLmJiPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgYnV0IHRoZXJlIGlzIGFsc28gYSBHaXQtYmFzZWQgdmVyc2lvbiwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF9naXQuYmI8L2ZpbGVuYW1lPiwgd2hpY2ggZXhwbGljaXRseSBjb250YWlucyB0aGUgbGluZQotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICBERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIHRvIGVuc3VyZSB0aGF0IHRoZSBudW1iZXJlZCwgc3RhYmxlIHZlcnNpb24gaXMgYWx3YXlzIHByZWZlcnJlZAotICAgICAgICAgICAgICAgIHVubGVzcyB0aGUgZGV2ZWxvcGVyIHNlbGVjdHMgb3RoZXJ3aXNlLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L25vdGU+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2JiLWJpdGJha2UtZGVwZW5kZW5jaWVzJz4KLSAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBFYWNoIHRhcmdldCBCaXRCYWtlIGJ1aWxkcyBjb25zaXN0cyBvZiBtdWx0aXBsZSB0YXNrcyBzdWNoIGFzCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnVucGFjazwvZmlsZW5hbWU+LAotICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Y29tcGlsZTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgRm9yIGJlc3QgcGVyZm9ybWFuY2Ugb24gbXVsdGktY29yZSBzeXN0ZW1zLCBCaXRCYWtlIGNvbnNpZGVycyBlYWNoCi0gICAgICAgICAgICB0YXNrIGFzIGFuIGluZGVwZW5kZW50Ci0gICAgICAgICAgICBlbnRpdHkgd2l0aCBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIERlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCB0aHJvdWdoIHNldmVyYWwgdmFyaWFibGVzLgotICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHZhcmlhYmxlcyBCaXRCYWtlIHVzZXMgaW4KLSAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSdyZWYtYmItdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz4KLSAgICAgICAgICAgIG5lYXIgdGhlIGVuZCBvZiB0aGlzIG1hbnVhbC4KLSAgICAgICAgICAgIEF0IGEgYmFzaWMgbGV2ZWwsIGl0IGlzIHN1ZmZpY2llbnQgdG8ga25vdyB0aGF0IEJpdEJha2UgdXNlcyB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiBhbmQKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlcyB3aGVuCi0gICAgICAgICAgICBjYWxjdWxhdGluZyBkZXBlbmRlbmNpZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBCaXRCYWtlIGhhbmRsZXMgZGVwZW5kZW5jaWVzLCBzZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGVwZW5kZW5jaWVzJz5EZXBlbmRlbmNpZXM8L2xpbms+IiBzZWN0aW9uLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXRhc2tsaXN0Jz4KLSAgICAgICAgPHRpdGxlPlRoZSBUYXNrIExpc3Q8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQmFzZWQgb24gdGhlIGdlbmVyYXRlZCBsaXN0IG9mIHByb3ZpZGVycyBhbmQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24sCi0gICAgICAgICAgICBCaXRCYWtlIGNhbiBub3cgY2FsY3VsYXRlIGV4YWN0bHkgd2hhdCB0YXNrcyBpdCBuZWVkcyB0byBydW4gYW5kIGluIHdoYXQKLSAgICAgICAgICAgIG9yZGVyIGl0IG5lZWRzIHRvIHJ1biB0aGVtLgotICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZXhlY3V0aW5nLXRhc2tzJz5FeGVjdXRpbmcgVGFza3M8L2xpbms+IiBzZWN0aW9uIGhhcyBtb3JlCi0gICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgQml0QmFrZSBjaG9vc2VzIHdoaWNoIHRhc2sgdG8gZXhlY3V0ZSBuZXh0LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgYnVpbGQgbm93IHN0YXJ0cyB3aXRoIEJpdEJha2UgZm9ya2luZyBvZmYgdGhyZWFkcyB1cCB0byB0aGUgbGltaXQgc2V0IGluIHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICAgICAgQml0QmFrZSBjb250aW51ZXMgdG8gZm9yayB0aHJlYWRzIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHRhc2tzIHJlYWR5IHRvIHJ1biwKLSAgICAgICAgICAgIHRob3NlIHRhc2tzIGhhdmUgYWxsIHRoZWlyIGRlcGVuZGVuY2llcyBtZXQsIGFuZCB0aGUgdGhyZWFkIHRocmVzaG9sZCBoYXMgbm90IGJlZW4KLSAgICAgICAgICAgIGV4Y2VlZGVkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB5b3UgY2FuIGdyZWF0bHkgc3BlZWQgdXAgdGhlIGJ1aWxkIHRpbWUgYnkgcHJvcGVybHkgc2V0dGluZwotICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBcyBlYWNoIHRhc2sgY29tcGxldGVzLCBhIHRpbWVzdGFtcCBpcyB3cml0dGVuIHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNUQU1QJz48ZmlsZW5hbWU+U1RBTVA8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCi0gICAgICAgICAgICBPbiBzdWJzZXF1ZW50IHJ1bnMsIEJpdEJha2UgbG9va3MgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSB3aXRoaW4KLSAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvc3RhbXBzPC9maWxlbmFtZT4gYW5kIGRvZXMgbm90IHJlcnVuCi0gICAgICAgICAgICB0YXNrcyB0aGF0IGFyZSBhbHJlYWR5IGNvbXBsZXRlZCB1bmxlc3MgYSB0aW1lc3RhbXAgaXMgZm91bmQgdG8gYmUgaW52YWxpZC4KLSAgICAgICAgICAgIEN1cnJlbnRseSwgaW52YWxpZCB0aW1lc3RhbXBzIGFyZSBvbmx5IGNvbnNpZGVyZWQgb24gYSBwZXIKLSAgICAgICAgICAgIHJlY2lwZSBmaWxlIGJhc2lzLgotICAgICAgICAgICAgU28sIGZvciBleGFtcGxlLCBpZiB0aGUgY29uZmlndXJlIHN0YW1wIGhhcyBhIHRpbWVzdGFtcCBncmVhdGVyIHRoYW4gdGhlCi0gICAgICAgICAgICBjb21waWxlIHRpbWVzdGFtcCBmb3IgYSBnaXZlbiB0YXJnZXQsIHRoZW4gdGhlIGNvbXBpbGUgdGFzayB3b3VsZCByZXJ1bi4KLSAgICAgICAgICAgIFJ1bm5pbmcgdGhlIGNvbXBpbGUgdGFzayBhZ2FpbiwgaG93ZXZlciwgaGFzIG5vIGVmZmVjdCBvbiBvdGhlciBwcm92aWRlcnMKLSAgICAgICAgICAgIHRoYXQgZGVwZW5kIG9uIHRoYXQgdGFyZ2V0LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBzdGFtcHMgaXMgcGFydGx5IGNvbmZpZ3VyYWJsZS4KLSAgICAgICAgICAgIEluIG1vZGVybiB2ZXJzaW9ucyBvZiBCaXRCYWtlLCBhIGhhc2ggaXMgYXBwZW5kZWQgdG8gdGhlCi0gICAgICAgICAgICBzdGFtcCBzbyB0aGF0IGlmIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMsIHRoZSBzdGFtcCBiZWNvbWVzCi0gICAgICAgICAgICBpbnZhbGlkIGFuZCB0aGUgdGFzayBpcyBhdXRvbWF0aWNhbGx5IHJlcnVuLgotICAgICAgICAgICAgVGhpcyBoYXNoLCBvciBzaWduYXR1cmUgdXNlZCwgaXMgZ292ZXJuZWQgYnkgdGhlIHNpZ25hdHVyZSBwb2xpY3kKLSAgICAgICAgICAgIHRoYXQgaXMgY29uZmlndXJlZCAoc2VlIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoZWNrc3Vtcyc+Q2hlY2tzdW1zIChTaWduYXR1cmVzKTwvbGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbikuCi0gICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFwcGVuZCBleHRyYSBtZXRhZGF0YSB0byB0aGUgc3RhbXAgdXNpbmcKLSAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+W3N0YW1wLWV4dHJhLWluZm9dPC9maWxlbmFtZT4gdGFzayBmbGFnLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIE9wZW5FbWJlZGRlZCB1c2VzIHRoaXMgZmxhZyB0byBtYWtlIHNvbWUgdGFza3MgbWFjaGluZS1zcGVjaWZpYy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxub3RlPgotICAgICAgICAgICAgU29tZSB0YXNrcyBhcmUgbWFya2VkIGFzICJub3N0YW1wIiB0YXNrcy4KLSAgICAgICAgICAgIE5vIHRpbWVzdGFtcCBmaWxlIGlzIGNyZWF0ZWQgd2hlbiB0aGVzZSB0YXNrcyBhcmUgcnVuLgotICAgICAgICAgICAgQ29uc2VxdWVudGx5LCAibm9zdGFtcCIgdGFza3MgYXJlIGFsd2F5cyByZXJ1bi4KLSAgICAgICAgPC9ub3RlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGFza3MsIHNlZSB0aGUKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0YXNrcyc+VGFza3M8L2xpbms+IiBzZWN0aW9uLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2V4ZWN1dGluZy10YXNrcyc+Ci0gICAgICAgIDx0aXRsZT5FeGVjdXRpbmcgVGFza3M8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGFza3MgY2FuIGJlIGVpdGhlciBhIHNoZWxsIHRhc2sgb3IgYSBQeXRob24gdGFzay4KLSAgICAgICAgICAgIEZvciBzaGVsbCB0YXNrcywgQml0QmFrZSB3cml0ZXMgYSBzaGVsbCBzY3JpcHQgdG8KLSAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLWJiLVQnPjxmaWxlbmFtZT5UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vcnVuLmRvX3Rhc2tuYW1lLjxyZXBsYWNlYWJsZT5waWQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBhbmQgdGhlbiBleGVjdXRlcyB0aGUgc2NyaXB0LgotICAgICAgICAgICAgVGhlIGdlbmVyYXRlZCBzaGVsbCBzY3JpcHQgY29udGFpbnMgYWxsIHRoZSBleHBvcnRlZCB2YXJpYWJsZXMsCi0gICAgICAgICAgICBhbmQgdGhlIHNoZWxsIGZ1bmN0aW9ucyB3aXRoIGFsbCB2YXJpYWJsZXMgZXhwYW5kZWQuCi0gICAgICAgICAgICBPdXRwdXQgZnJvbSB0aGUgc2hlbGwgc2NyaXB0IGdvZXMgdG8gdGhlIGZpbGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT4ke1R9L2xvZy5kb190YXNrbmFtZS48cmVwbGFjZWFibGU+cGlkPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIExvb2tpbmcgYXQgdGhlIGV4cGFuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiB0aGUgcnVuIGZpbGUgYW5kCi0gICAgICAgICAgICB0aGUgb3V0cHV0IGluIHRoZSBsb2cgZmlsZXMgaXMgYSB1c2VmdWwgZGVidWdnaW5nIHRlY2huaXF1ZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9yIFB5dGhvbiB0YXNrcywgQml0QmFrZSBleGVjdXRlcyB0aGUgdGFzayBpbnRlcm5hbGx5IGFuZCBsb2dzCi0gICAgICAgICAgICBpbmZvcm1hdGlvbiB0byB0aGUgY29udHJvbGxpbmcgdGVybWluYWwuCi0gICAgICAgICAgICBGdXR1cmUgdmVyc2lvbnMgb2YgQml0QmFrZSB3aWxsIHdyaXRlIHRoZSBmdW5jdGlvbnMgdG8gZmlsZXMKLSAgICAgICAgICAgIHNpbWlsYXIgdG8gdGhlIHdheSBzaGVsbCB0YXNrcyBhcmUgaGFuZGxlZC4KLSAgICAgICAgICAgIExvZ2dpbmcgd2lsbCBiZSBoYW5kbGVkIGluIGEgd2F5IHNpbWlsYXIgdG8gc2hlbGwgdGFza3MgYXMgd2VsbC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIG9yZGVyIGluIHdoaWNoIEJpdEJha2UgcnVucyB0aGUgdGFza3MgaXMgY29udHJvbGxlZCBieSBpdHMKLSAgICAgICAgICAgIHRhc2sgc2NoZWR1bGVyLgotICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIHRoZSBzY2hlZHVsZXIgYW5kIGRlZmluZSBjdXN0b20KLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLgotICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGVzZSB2YXJpYWJsZXMgdGhhdCBjb250cm9sIHRoZQotICAgICAgICAgICAgYmVoYXZpb3I6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX1NDSEVEVUxFUic+PGZpbGVuYW1lPkJCX1NDSEVEVUxFUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9TQ0hFRFVMRVJTJz48ZmlsZW5hbWU+QkJfU0NIRURVTEVSUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBmdW5jdGlvbnMgcnVuIGJlZm9yZSBhbmQgYWZ0ZXIgYSB0YXNrJ3MgbWFpbgotICAgICAgICAgICAgZnVuY3Rpb24uCi0gICAgICAgICAgICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIDxmaWxlbmFtZT5bcHJlZnVuY3NdPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+W3Bvc3RmdW5jc108L2ZpbGVuYW1lPiBmbGFncyBvZiB0aGUgdGFzawotICAgICAgICAgICAgdGhhdCBsaXN0cyB0aGUgZnVuY3Rpb25zIHRvIHJ1bi4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdjaGVja3N1bXMnPgotICAgICAgICA8dGl0bGU+Q2hlY2tzdW1zIChTaWduYXR1cmVzKTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBIGNoZWNrc3VtIGlzIGEgdW5pcXVlIHNpZ25hdHVyZSBvZiBhIHRhc2sncyBpbnB1dHMuCi0gICAgICAgICAgICBUaGUgc2lnbmF0dXJlIG9mIGEgdGFzayBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSB0YXNrCi0gICAgICAgICAgICBuZWVkcyB0byBiZSBydW4uCi0gICAgICAgICAgICBCZWNhdXNlIGl0IGlzIGEgY2hhbmdlIGluIGEgdGFzaydzIGlucHV0cyB0aGF0IHRyaWdnZXJzIHJ1bm5pbmcKLSAgICAgICAgICAgIHRoZSB0YXNrLCBCaXRCYWtlIG5lZWRzIHRvIGRldGVjdCBhbGwgdGhlIGlucHV0cyB0byBhIGdpdmVuIHRhc2suCi0gICAgICAgICAgICBGb3Igc2hlbGwgdGFza3MsIHRoaXMgdHVybnMgb3V0IHRvIGJlIGZhaXJseSBlYXN5IGJlY2F1c2UKLSAgICAgICAgICAgIEJpdEJha2UgZ2VuZXJhdGVzIGEgInJ1biIgc2hlbGwgc2NyaXB0IGZvciBlYWNoIHRhc2sgYW5kCi0gICAgICAgICAgICBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBjaGVja3N1bSB0aGF0IGdpdmVzIHlvdSBhIGdvb2QgaWRlYSBvZiB3aGVuCi0gICAgICAgICAgICB0aGUgdGFzaydzIGRhdGEgY2hhbmdlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVG8gY29tcGxpY2F0ZSB0aGUgcHJvYmxlbSwgc29tZSB0aGluZ3Mgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbgotICAgICAgICAgICAgdGhlIGNoZWNrc3VtLgotICAgICAgICAgICAgRmlyc3QsIHRoZXJlIGlzIHRoZSBhY3R1YWwgc3BlY2lmaWMgYnVpbGQgcGF0aCBvZiBhIGdpdmVuIHRhc2sgLQotICAgICAgICAgICAgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgotICAgICAgICAgICAgSXQgZG9lcyBub3QgbWF0dGVyIGlmIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzIGJlY2F1c2UgaXQgc2hvdWxkIG5vdAotICAgICAgICAgICAgYWZmZWN0IHRoZSBvdXRwdXQgZm9yIHRhcmdldCBwYWNrYWdlcy4KLSAgICAgICAgICAgIFRoZSBzaW1wbGlzdGljIGFwcHJvYWNoIGZvciBleGNsdWRpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHRvIHNldAotICAgICAgICAgICAgaXQgdG8gc29tZSBmaXhlZCB2YWx1ZSBhbmQgY3JlYXRlIHRoZSBjaGVja3N1bSBmb3IgdGhlICJydW4iIHNjcmlwdC4KLSAgICAgICAgICAgIEJpdEJha2UgZ29lcyBvbmUgc3RlcCBiZXR0ZXIgYW5kIHVzZXMgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfSEFTSEJBU0VfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfSEFTSEJBU0VfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZSB0byBkZWZpbmUgYSBsaXN0IG9mIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZAotICAgICAgICAgICAgd2hlbiBnZW5lcmF0aW5nIHRoZSBzaWduYXR1cmVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBbm90aGVyIHByb2JsZW0gcmVzdWx0cyBmcm9tIHRoZSAicnVuIiBzY3JpcHRzIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRoYXQKLSAgICAgICAgICAgIG1pZ2h0IG9yIG1pZ2h0IG5vdCBnZXQgY2FsbGVkLgotICAgICAgICAgICAgVGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaWd1cmVzIG91dCBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAgIGJldHdlZW4gc2hlbGwgZnVuY3Rpb25zLgotICAgICAgICAgICAgVGhpcyBjb2RlIGlzIHVzZWQgdG8gcHJ1bmUgdGhlICJydW4iIHNjcmlwdHMgZG93biB0byB0aGUgbWluaW11bSBzZXQsCi0gICAgICAgICAgICB0aGVyZWJ5IGFsbGV2aWF0aW5nIHRoaXMgcHJvYmxlbSBhbmQgbWFraW5nIHRoZSAicnVuIiBzY3JpcHRzIG11Y2ggbW9yZQotICAgICAgICAgICAgcmVhZGFibGUgYXMgYSBib251cy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgU28gZmFyIHdlIGhhdmUgc29sdXRpb25zIGZvciBzaGVsbCBzY3JpcHRzLgotICAgICAgICAgICAgV2hhdCBhYm91dCBQeXRob24gdGFza3M/Ci0gICAgICAgICAgICBUaGUgc2FtZSBhcHByb2FjaCBhcHBsaWVzIGV2ZW4gdGhvdWdoIHRoZXNlIHRhc2tzIGFyZSBtb3JlIGRpZmZpY3VsdC4KLSAgICAgICAgICAgIFRoZSBwcm9jZXNzIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YXJpYWJsZXMgYSBQeXRob24gZnVuY3Rpb24gYWNjZXNzZXMKLSAgICAgICAgICAgIGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscy4KLSAgICAgICAgICAgIEFnYWluLCB0aGUgaW5jcmVtZW50YWwgYnVpbGQgc29sdXRpb24gY29udGFpbnMgY29kZSB0aGF0IGZpcnN0IGZpZ3VyZXMgb3V0Ci0gICAgICAgICAgICB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIGRlcGVuZGVuY2llcywgYW5kIHRoZW4gY3JlYXRlcyBhIGNoZWNrc3VtIGZvciB0aGUgZGF0YQotICAgICAgICAgICAgdXNlZCBhcyB0aGUgaW5wdXQgdG8gdGhlIHRhc2suCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIExpa2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhc2UsIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICBzaG91bGQgYmUgaWdub3JlZC4KLSAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91IGNhbiBpbnN0cnVjdCB0aGUgYnVpbGQgcHJvY2VzcyB0byBpZ25vcmUgYSBkZXBlbmRlbmN5Ci0gICAgICAgICAgICBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuc3VyZXMgdGhhdCB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkb2VzIG5vdAotICAgICAgICAgICAgZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+LCBldmVuIGlmIGl0IGRvZXMgcmVmZXJlbmNlIGl0LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBFcXVhbGx5LCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhZGQgZGVwZW5kZW5jaWVzIEJpdEJha2UKLSAgICAgICAgICAgIGlzIG5vdCBhYmxlIHRvIGZpbmQuCi0gICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAgUEFDS0FHRV9BUkNIU1t2YXJkZXBzXSA9ICJNQUNISU5FIgotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgVGhpcyBleGFtcGxlIGV4cGxpY2l0bHkgYWRkcyB0aGUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcyBhCi0gICAgICAgICAgICBkZXBlbmRlbmN5IGZvciA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBDb25zaWRlciBhIGNhc2Ugd2l0aCBpbi1saW5lIFB5dGhvbiwgZm9yIGV4YW1wbGUsIHdoZXJlIEJpdEJha2UgaXMgbm90Ci0gICAgICAgICAgICBhYmxlIHRvIGZpZ3VyZSBvdXQgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgV2hlbiBydW5uaW5nIGluIGRlYnVnIG1vZGUgKGkuZS4gdXNpbmcgPGZpbGVuYW1lPi1EREQ8L2ZpbGVuYW1lPiksIEJpdEJha2UKLSAgICAgICAgICAgIHByb2R1Y2VzIG91dHB1dCB3aGVuIGl0IGRpc2NvdmVycyBzb21ldGhpbmcgZm9yIHdoaWNoIGl0IGNhbm5vdCBmaWd1cmUgb3V0Ci0gICAgICAgICAgICBkZXBlbmRlbmNpZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRodXMgZmFyLCB0aGlzIHNlY3Rpb24gaGFzIGxpbWl0ZWQgZGlzY3Vzc2lvbiB0byB0aGUgZGlyZWN0IGlucHV0cyBpbnRvIGEgdGFzay4KLSAgICAgICAgICAgIEluZm9ybWF0aW9uIGJhc2VkIG9uIGRpcmVjdCBpbnB1dHMgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICJiYXNlaGFzaCIgaW4gdGhlCi0gICAgICAgICAgICBjb2RlLgotICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgdGhlIHF1ZXN0aW9uIG9mIGEgdGFzaydzIGluZGlyZWN0IGlucHV0cyAtIHRoZQotICAgICAgICAgICAgdGhpbmdzIHRoYXQgd2VyZSBhbHJlYWR5IGJ1aWx0IGFuZCBwcmVzZW50IGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICAgICAgICAgICBUaGUgY2hlY2tzdW0gKG9yIHNpZ25hdHVyZSkgZm9yIGEgcGFydGljdWxhciB0YXNrIG5lZWRzIHRvIGFkZCB0aGUgaGFzaGVzCi0gICAgICAgICAgICBvZiBhbGwgdGhlIHRhc2tzIG9uIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHRhc2sgZGVwZW5kcy4KLSAgICAgICAgICAgIENob29zaW5nIHdoaWNoIGRlcGVuZGVuY2llcyB0byBhZGQgaXMgYSBwb2xpY3kgZGVjaXNpb24uCi0gICAgICAgICAgICBIb3dldmVyLCB0aGUgZWZmZWN0IGlzIHRvIGdlbmVyYXRlIGEgbWFzdGVyIGNoZWNrc3VtIHRoYXQgY29tYmluZXMgdGhlIGJhc2VoYXNoCi0gICAgICAgICAgICBhbmQgdGhlIGhhc2hlcyBvZiB0aGUgdGFzaydzIGRlcGVuZGVuY2llcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXQgdGhlIGNvZGUgbGV2ZWwsIHRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygd2F5cyBib3RoIHRoZSBiYXNlaGFzaCBhbmQgdGhlCi0gICAgICAgICAgICBkZXBlbmRlbnQgdGFzayBoYXNoZXMgY2FuIGJlIGluZmx1ZW5jZWQuCi0gICAgICAgICAgICBXaXRoaW4gdGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlLCB3ZSBjYW4gZ2l2ZSBCaXRCYWtlIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24KLSAgICAgICAgICAgIHRvIGhlbHAgaXQgY29uc3RydWN0IHRoZSBiYXNlaGFzaC4KLSAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGVmZmVjdGl2ZWx5IHJlc3VsdHMgaW4gYSBsaXN0IG9mIGdsb2JhbCB2YXJpYWJsZQotICAgICAgICAgICAgZGVwZW5kZW5jeSBleGNsdWRlcyAtIHZhcmlhYmxlcyBuZXZlciBpbmNsdWRlZCBpbiBhbnkgY2hlY2tzdW0uCi0gICAgICAgICAgICBUaGlzIGV4YW1wbGUgdXNlcyB2YXJpYWJsZXMgZnJvbSBPcGVuRW1iZWRkZWQgdG8gaGVscCBpbGx1c3RyYXRlCi0gICAgICAgICAgICB0aGUgY29uY2VwdDoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQkJfSEFTSEJBU0VfV0hJVEVMSVNUID89ICJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFwKLSAgICAgICAgIFNTVEFURV9ESVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhPTUUgTE9HTkFNRSBTSEVMTCBcCi0gICAgICAgICBVU0VSIEZJTEVTUEFUSCBTVEFHSU5HX0RJUl9IT1NUIFNUQUdJTkdfRElSX1RBUkdFVCBDT1JFQkFTRSBQUlNFUlZfSE9TVCBcCi0gICAgICAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAotICAgICAgICAgQ0NBQ0hFX0RJUiBFWFRFUk5BTF9UT09MQ0hBSU4gQ0NBQ0hFIENDQUNIRV9ESVNBQkxFIExJQ0VOU0VfUEFUSCBTREtQS0dTVUZGSVgiCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBleGNsdWRlcyB0aGUgd29yayBkaXJlY3RvcnksIHdoaWNoIGlzIHBhcnQgb2YKLSAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIHJ1bGVzIGZvciBkZWNpZGluZyB3aGljaCBoYXNoZXMgb2YgZGVwZW5kZW50IHRhc2tzIHRvIGluY2x1ZGUgdGhyb3VnaAotICAgICAgICAgICAgZGVwZW5kZW5jeSBjaGFpbnMgYXJlIG1vcmUgY29tcGxleCBhbmQgYXJlIGdlbmVyYWxseSBhY2NvbXBsaXNoZWQgd2l0aCBhCi0gICAgICAgICAgICBQeXRob24gZnVuY3Rpb24uCi0gICAgICAgICAgICBUaGUgY29kZSBpbiA8ZmlsZW5hbWU+bWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5PC9maWxlbmFtZT4gc2hvd3MgdHdvIGV4YW1wbGVzCi0gICAgICAgICAgICBvZiB0aGlzIGFuZCBhbHNvIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIGluc2VydCB5b3VyIG93biBwb2xpY3kgaW50byB0aGUgc3lzdGVtCi0gICAgICAgICAgICBpZiBzbyBkZXNpcmVkLgotICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycyBPcGVuRW1iZWRkZWQtQ29yZQotICAgICAgICAgICAgdXNlczogICJPRUJhc2ljIiBhbmQgIk9FQmFzaWNIYXNoIi4KLSAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZXJlIGlzIGEgZHVtbXkgIm5vb3AiIHNpZ25hdHVyZSBoYW5kbGVyIGVuYWJsZWQgaW4gQml0QmFrZS4KLSAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy4KLSAgICAgICAgICAgIDxmaWxlbmFtZT5PRS1Db3JlPC9maWxlbmFtZT4gdXNlcyB0aGUgIk9FQmFzaWNIYXNoIiBzaWduYXR1cmUgaGFuZGxlciBieSBkZWZhdWx0Ci0gICAgICAgICAgICB0aHJvdWdoIHRoaXMgc2V0dGluZyBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRoZSAiT0VCYXNpY0hhc2giIDxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+IGlzIHRoZSBzYW1lIGFzIHRoZQotICAgICAgICAgICAgIk9FQmFzaWMiIHZlcnNpb24gYnV0IGFkZHMgdGhlIHRhc2sgaGFzaCB0byB0aGUgc3RhbXAgZmlsZXMuCi0gICAgICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYW55IG1ldGFkYXRhIGNoYW5nZSB0aGF0IGNoYW5nZXMgdGhlIHRhc2sgaGFzaCwgYXV0b21hdGljYWxseQotICAgICAgICAgICAgY2F1c2luZyB0aGUgdGFzayB0byBiZSBydW4gYWdhaW4uCi0gICAgICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgdG8gYnVtcAotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhbHVlcywgYW5kIGNoYW5nZXMgdG8gbWV0YWRhdGEgYXV0b21hdGljYWxseSByaXBwbGUgYWNyb3NzIHRoZSBidWlsZC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgZW5kIHJlc3VsdCBvZiB0aGVzZSBzaWduYXR1cmUgZ2VuZXJhdG9ycyBpcyB0bwotICAgICAgICAgICAgbWFrZSBzb21lIGRlcGVuZGVuY3kgYW5kIGhhc2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZSBidWlsZC4KLSAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXM6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfQkFTRUhBU0hfdGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgotICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggdGFzayBpbiB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIGhhc2hlcyBmb3IgZWFjaCBkZXBlbmRlbnQgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQkhBU0hERVBTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGRlcGVuZGVuY2llcyBmb3IgZWFjaCB0YXNrLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1RBU0tIQVNIPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBoYXNoIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCBCaXRCYWtlJ3MgIi1TIiBvcHRpb24gbGV0cyB5b3UKLSAgICAgICAgICAgIGRlYnVnIEJpdEJha2UncyBwcm9jZXNzaW5nIG9mIHNpZ25hdHVyZXMuCi0gICAgICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gLVMgYWxsb3cgZGlmZmVyZW50IGRlYnVnZ2luZyBtb2RlcwotICAgICAgICAgICAgdG8gYmUgdXNlZCwgZWl0aGVyIHVzaW5nIEJpdEJha2UncyBvd24gZGVidWcgZnVuY3Rpb25zCi0gICAgICAgICAgICBvciBwb3NzaWJseSB0aG9zZSBkZWZpbmVkIGluIHRoZSBtZXRhZGF0YS9zaWduYXR1cmUgaGFuZGxlcgotICAgICAgICAgICAgaXRzZWxmLgotICAgICAgICAgICAgVGhlIHNpbXBsZXN0IHBhcmFtZXRlciB0byBwYXNzIGlzICJub25lIiwgd2hpY2ggY2F1c2VzIGEKLSAgICAgICAgICAgIHNldCBvZiBzaWduYXR1cmUgaW5mb3JtYXRpb24gdG8gYmUgd3JpdHRlbiBvdXQgaW50bwotICAgICAgICAgICAgPGZpbGVuYW1lPlNUQU1QU19ESVI8L2ZpbGVuYW1lPgotICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0cyBzcGVjaWZpZWQuCi0gICAgICAgICAgICBUaGUgb3RoZXIgY3VycmVudGx5IGF2YWlsYWJsZSBwYXJhbWV0ZXIgaXMgInByaW50ZGlmZiIsCi0gICAgICAgICAgICB3aGljaCBjYXVzZXMgQml0QmFrZSB0byB0cnkgdG8gZXN0YWJsaXNoIHRoZSBjbG9zZXN0Ci0gICAgICAgICAgICBzaWduYXR1cmUgbWF0Y2ggaXQgY2FuIChlLmcuIGluIHRoZSBzc3RhdGUgY2FjaGUpIGFuZCB0aGVuCi0gICAgICAgICAgICBydW4gPGZpbGVuYW1lPmJpdGJha2UtZGlmZnNpZ3M8L2ZpbGVuYW1lPiBvdmVyIHRoZSBtYXRjaGVzCi0gICAgICAgICAgICB0byBkZXRlcm1pbmUgdGhlIHN0YW1wcyBhbmQgZGVsdGEgd2hlcmUgdGhlc2UgdHdvCi0gICAgICAgICAgICBzdGFtcCB0cmVlcyBkaXZlcmdlLgotICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgSXQgaXMgbGlrZWx5IHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIEJpdEJha2Ugd2lsbAotICAgICAgICAgICAgICAgIHByb3ZpZGUgb3RoZXIgc2lnbmF0dXJlIGhhbmRsZXJzIHRyaWdnZXJlZCB0aHJvdWdoCi0gICAgICAgICAgICAgICAgYWRkaXRpb25hbCAiLVMiIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGNoZWNrc3VtIG1ldGFkYXRhIGluIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+VGFzayBDaGVja3N1bXMgYW5kIFNldHNjZW5lPC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2V0c2NlbmUnPgotICAgICAgICA8dGl0bGU+U2V0c2NlbmU8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIHNldHNjZW5lIHByb2Nlc3MgZW5hYmxlcyBCaXRCYWtlIHRvIGhhbmRsZSAicHJlLWJ1aWx0IiBhcnRpZmFjdHMuCi0gICAgICAgICAgICBUaGUgYWJpbGl0eSB0byBoYW5kbGUgYW5kIHJldXNlIHRoZXNlIGFydGlmYWN0cyBhbGxvd3MgQml0QmFrZQotICAgICAgICAgICAgdGhlIGx1eHVyeSBvZiBub3QgaGF2aW5nIHRvIGJ1aWxkIHNvbWV0aGluZyBmcm9tIHNjcmF0Y2ggZXZlcnkgdGltZS4KLSAgICAgICAgICAgIEluc3RlYWQsIEJpdEJha2UgY2FuIHVzZSwgd2hlbiBwb3NzaWJsZSwgZXhpc3RpbmcgYnVpbGQgYXJ0aWZhY3RzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHRvIGhhdmUgcmVsaWFibGUgZGF0YSBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IGFuCi0gICAgICAgICAgICBhcnRpZmFjdCBpcyBjb21wYXRpYmxlLgotICAgICAgICAgICAgU2lnbmF0dXJlcywgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBwcm92aWRlIGFuIGlkZWFsCi0gICAgICAgICAgICB3YXkgb2YgcmVwcmVzZW50aW5nIHdoZXRoZXIgYW4gYXJ0aWZhY3QgaXMgY29tcGF0aWJsZS4KLSAgICAgICAgICAgIElmIGEgc2lnbmF0dXJlIGlzIHRoZSBzYW1lLCBhbiBvYmplY3QgY2FuIGJlIHJldXNlZC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgYW4gb2JqZWN0IGNhbiBiZSByZXVzZWQsIHRoZSBwcm9ibGVtIHRoZW4gYmVjb21lcyBob3cgdG8KLSAgICAgICAgICAgIHJlcGxhY2UgYSBnaXZlbiB0YXNrIG9yIHNldCBvZiB0YXNrcyB3aXRoIHRoZSBwcmUtYnVpbHQgYXJ0aWZhY3QuCi0gICAgICAgICAgICBCaXRCYWtlIHNvbHZlcyB0aGUgcHJvYmxlbSB3aXRoIHRoZSAic2V0c2NlbmUiIHByb2Nlc3MuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gQml0QmFrZSBpcyBhc2tlZCB0byBidWlsZCBhIGdpdmVuIHRhcmdldCwgYmVmb3JlIGJ1aWxkaW5nIGFueXRoaW5nLAotICAgICAgICAgICAgaXQgZmlyc3QgYXNrcyB3aGV0aGVyIGNhY2hlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgZm9yIGFueSBvZiB0aGUKLSAgICAgICAgICAgIHRhcmdldHMgaXQncyBidWlsZGluZywgb3IgYW55IG9mIHRoZSBpbnRlcm1lZGlhdGUgdGFyZ2V0cy4KLSAgICAgICAgICAgIElmIGNhY2hlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUsIEJpdEJha2UgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGluc3RlYWQgb2YKLSAgICAgICAgICAgIHJ1bm5pbmcgdGhlIG1haW4gdGFza3MuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJpdEJha2UgZmlyc3QgY2FsbHMgdGhlIGZ1bmN0aW9uIGRlZmluZWQgYnkgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZSB3aXRoIGEgbGlzdCBvZiB0YXNrcyBhbmQgY29ycmVzcG9uZGluZwotICAgICAgICAgICAgaGFzaGVzIGl0IHdhbnRzIHRvIGJ1aWxkLgotICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBmYXN0IGFuZCByZXR1cm5zIGEgbGlzdAotICAgICAgICAgICAgb2YgdGhlIHRhc2tzIGZvciB3aGljaCBpdCBiZWxpZXZlcyBpbiBjYW4gb2J0YWluIGFydGlmYWN0cy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgTmV4dCwgZm9yIGVhY2ggb2YgdGhlIHRhc2tzIHRoYXQgd2VyZSByZXR1cm5lZCBhcyBwb3NzaWJpbGl0aWVzLAotICAgICAgICAgICAgQml0QmFrZSBleGVjdXRlcyBhIHNldHNjZW5lIHZlcnNpb24gb2YgdGhlIHRhc2sgdGhhdCB0aGUgcG9zc2libGUKLSAgICAgICAgICAgIGFydGlmYWN0IGNvdmVycy4KLSAgICAgICAgICAgIFNldHNjZW5lIHZlcnNpb25zIG9mIGEgdGFzayBoYXZlIHRoZSBzdHJpbmcgIl9zZXRzY2VuZSIgYXBwZW5kZWQgdG8gdGhlCi0gICAgICAgICAgICB0YXNrIG5hbWUuCi0gICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIHRoZSB0YXNrIHdpdGggdGhlIG5hbWUgPGZpbGVuYW1lPnh4eDwvZmlsZW5hbWU+IGhhcwotICAgICAgICAgICAgYSBzZXRzY2VuZSB0YXNrIG5hbWVkIDxmaWxlbmFtZT54eHhfc2V0c2NlbmU8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIFRoZSBzZXRzY2VuZSB2ZXJzaW9uIG9mIHRoZSB0YXNrIGV4ZWN1dGVzIGFuZCBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5Ci0gICAgICAgICAgICBhcnRpZmFjdHMgcmV0dXJuaW5nIGVpdGhlciBzdWNjZXNzIG9yIGZhaWx1cmUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFzIHByZXZpb3VzbHkgbWVudGlvbmVkLCBhbiBhcnRpZmFjdCBjYW4gY292ZXIgbW9yZSB0aGFuIG9uZSB0YXNrLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGl0IGlzIHBvaW50bGVzcyB0byBvYnRhaW4gYSBjb21waWxlciBpZiB5b3UKLSAgICAgICAgICAgIGFscmVhZHkgaGF2ZSB0aGUgY29tcGlsZWQgYmluYXJ5LgotICAgICAgICAgICAgVG8gaGFuZGxlIHRoaXMsIEJpdEJha2UgY2FsbHMgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfU0VUU0NFTkVfREVQVkFMSUQnPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9ERVBWQUxJRDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgZnVuY3Rpb24gZm9yIGVhY2ggc3VjY2Vzc2Z1bCBzZXRzY2VuZSB0YXNrIHRvIGtub3cgd2hldGhlciBvciBub3QgaXQgbmVlZHMKLSAgICAgICAgICAgIHRvIG9idGFpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgdGFzay4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRmluYWxseSwgYWZ0ZXIgYWxsIHRoZSBzZXRzY2VuZSB0YXNrcyBoYXZlIGV4ZWN1dGVkLCBCaXRCYWtlIGNhbGxzIHRoZQotICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVkIGluCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OMic+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjI8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHdpdGggdGhlIGxpc3Qgb2YgdGFza3MgQml0QmFrZSB0aGlua3MgaGFzIGJlZW4gImNvdmVyZWQiLgotICAgICAgICAgICAgVGhlIG1ldGFkYXRhIGNhbiB0aGVuIGVuc3VyZSB0aGF0IHRoaXMgbGlzdCBpcyBjb3JyZWN0IGFuZCBjYW4KLSAgICAgICAgICAgIGluZm9ybSBCaXRCYWtlIHRoYXQgaXQgd2FudHMgc3BlY2lmaWMgdGFza3MgdG8gYmUgcnVuIHJlZ2FyZGxlc3MKLSAgICAgICAgICAgIG9mIHRoZSBzZXRzY2VuZSByZXN1bHQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHNjZW5lIG1ldGFkYXRhIGluIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+VGFzayBDaGVja3N1bXMgYW5kIFNldHNjZW5lPC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ibG9nZ2luZyI+Ci0gICAgICAgIDx0aXRsZT5Mb2dnaW5nPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgY29tbWFuZCBsaW5lIG9wdGlvbiB0byBjb250cm9sIGhvdwotICAgICAgICAgICAgdmVyYm9zZSBidWlsZHMgYXJlIHdoZW4gZXhlY3V0ZSwgYml0YmFrZSBhbHNvIHN1cHBvcnRzIHVzZXIgZGVmaW5lZAotICAgICAgICAgICAgY29uZmlndXJhdGlvbiBvZiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwnPlB5dGhvbiBsb2dnaW5nPC91bGluaz4KLSAgICAgICAgICAgIGZhY2lsaXRpZXMgdGhyb3VnaCB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZhci1iYi1CQl9MT0dDT05GSUciPjxmaWxlbmFtZT5CQl9MT0dDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlLiBUaGlzIHZhcmlhYmxlIGRlZmluZXMgYSBqc29uIG9yIHlhbWwKLSAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sJz5sb2dnaW5nIGNvbmZpZ3VyYXRpb248L3VsaW5rPgotICAgICAgICAgICAgdGhhdCB3aWxsIGJlIGludGVsbGlnZW50bHkgbWVyZ2VkIGludG8gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgIFRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gaXMgbWVyZ2VkIHVzaW5nIHRoZSBmb2xsb3dpbmcgcnVsZXM6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHVzZXIgZGVmaW5lZCBjb25maWd1cmF0aW9uIHdpbGwgY29tcGxldGVseSByZXBsYWNlIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaWYgdG9wIGxldmVsIGtleQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZV9tZXJnZTwvZmlsZW5hbWU+IGlzIHNldCB0byB0aGUgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZhbHNlPC9maWxlbmFtZT4uIEluIHRoaXMgY2FzZSwgYWxsIG90aGVyIHJ1bGVzCi0gICAgICAgICAgICAgICAgICAgIGFyZSBpZ25vcmVkLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHVzZXIgY29uZmlndXJhdGlvbiBtdXN0IGhhdmUgYSB0b3AgbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnZlcnNpb248L2ZpbGVuYW1lPiB3aGljaCBtdXN0IG1hdGNoIHRoZSB2YWx1ZSBvZgotICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQW55IGtleXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmhhbmRsZXJzPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtYXR0ZXJzPC9maWxlbmFtZT4sIG9yIDxmaWxlbmFtZT5maWx0ZXJzPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIHNhbWUgc2VjdGlvbiBpbiB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB3aXRoIHRoZSB1c2VyIHNwZWNpZmllZCBrZXlzIHRha2luZwotICAgICAgICAgICAgICAgICAgICByZXBsYWNpbmcgYSBkZWZhdWx0IG9uZSBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0LiBJbgotICAgICAgICAgICAgICAgICAgICBwcmFjdGljZSwgdGhpcyBtZWFucyB0aGF0IGlmIGJvdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBhbmQgdXNlciBjb25maWd1cmF0aW9uIHNwZWNpZnkgYSBoYW5kbGVyIG5hbWVkCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWhhbmRsZXI8L2ZpbGVuYW1lPiwgdGhlIHVzZXIgZGVmaW5lZCBvbmUgd2lsbAotICAgICAgICAgICAgICAgICAgICByZXBsYWNlIHRoZSBkZWZhdWx0LiBUbyBwcmV2ZW50IHRoZSB1c2VyIGZyb20gaW5hZHZlcnRlbnRseQotICAgICAgICAgICAgICAgICAgICByZXBsYWNpbmcgYSBkZWZhdWx0IGhhbmRsZXIsIGZvcm1hdHRlciwgb3IgZmlsdGVyLCBhbGwgb2YKLSAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgb25lcyBhcmUgbmFtZWQgd2l0aCBhIHByZWZpeCBvZgotICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPkJpdEJha2UuPC9maWxlbmFtZT4iCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBJZiBhIGxvZ2dlciBpcyBkZWZpbmVkIGJ5IHRoZSB1c2VyIHdpdGggdGhlIGtleQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZV9tZXJnZTwvZmlsZW5hbWU+IHNldCB0bwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RmFsc2U8L2ZpbGVuYW1lPiwgdGhhdCBsb2dnZXIgd2lsbCBiZSBjb21wbGV0ZWx5Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkIGJ5IHVzZXIgY29uZmlndXJhdGlvbi4gSW4gdGhpcyBjYXNlLCBubyBvdGhlcgotICAgICAgICAgICAgICAgICAgICBydWxlcyB3aWxsIGFwcGx5IHRvIHRoYXQgbG9nZ2VyLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQWxsIHVzZXIgZGVmaW5lZCA8ZmlsZW5hbWU+ZmlsdGVyPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oYW5kbGVyczwvZmlsZW5hbWU+IHByb3BlcnRpZXMgZm9yIGEgZ2l2ZW4gbG9nZ2VyCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgbWVyZ2VkIHdpdGggY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgbG9nZ2VyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIgY29uZmlndXJhdGlvbiBhZGRzCi0gICAgICAgICAgICAgICAgICAgIGEgZmlsdGVyIGNhbGxlZCA8ZmlsZW5hbWU+bXlGaWx0ZXI8L2ZpbGVuYW1lPiB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJpdEJha2UuU2lnR2VuPC9maWxlbmFtZT4sIGFuZCB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFkZHMgYSBmaWx0ZXIgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CaXRCYWtlLmRlZmF1bHRGaWx0ZXI8L2ZpbGVuYW1lPiwgYm90aCBmaWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgbG9nZ2VyCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB1c2VyIGxvZ2dpbmcgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgZmlsZSB3aGljaCBsb2dzIGFsbCBIYXNoIEVxdWl2YWxlbmNlIHJlbGF0ZWQgbWVzc2FnZXMgb2YgVkVSQk9TRSBvcgotICAgICAgICAgICAgaGlnaGVyIHRvIGEgZmlsZSBjYWxsZWQgPGZpbGVuYW1lPmhhc2hlcXVpdi5sb2c8L2ZpbGVuYW1lPgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgIHsKLSAgICAgICAgInZlcnNpb24iOiAxLAotICAgICAgICAiaGFuZGxlcnMiOiB7Ci0gICAgICAgICAgICAiYXV0b2J1aWxkZXJsb2ciOiB7Ci0gICAgICAgICAgICAgICAgImNsYXNzIjogImxvZ2dpbmcuRmlsZUhhbmRsZXIiLAotICAgICAgICAgICAgICAgICJmb3JtYXR0ZXIiOiAibG9nZmlsZUZvcm1hdHRlciIsCi0gICAgICAgICAgICAgICAgImxldmVsIjogIkRFQlVHIiwKLSAgICAgICAgICAgICAgICAiZmlsZW5hbWUiOiAiaGFzaGVxdWl2LmxvZyIsCi0gICAgICAgICAgICAgICAgIm1vZGUiOiAidyIKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImZvcm1hdHRlcnMiOiB7Ci0gICAgICAgICAgICAgICAgImxvZ2ZpbGVGb3JtYXR0ZXIiOiB7Ci0gICAgICAgICAgICAgICAgICAgICJmb3JtYXQiOiAiJShuYW1lKXM6ICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImxvZ2dlcnMiOiB7Ci0gICAgICAgICAgICAiQml0QmFrZS5TaWdHZW4uSGFzaEVxdWl2IjogewotICAgICAgICAgICAgICAgICJsZXZlbCI6ICJWRVJCT1NFIiwKLSAgICAgICAgICAgICAgICAiaGFuZGxlcnMiOiBbImF1dG9idWlsZGVybG9nIl0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiQml0QmFrZS5SdW5RdWV1ZS5IYXNoRXF1aXYiOiB7Ci0gICAgICAgICAgICAgICAgImxldmVsIjogIlZFUkJPU0UiLAotICAgICAgICAgICAgICAgICJoYW5kbGVycyI6IFsiYXV0b2J1aWxkZXJsb2ciXQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcucnN0IGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcucnN0CmluZGV4IGY2MmRkZmYuLjY3NjBiMTAgMTAwNjQ0Ci0tLSBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnJzdAorKysgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy5yc3QKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAtICAqInJldiI6KiBUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHRvIGNoZWNrb3V0LgogCi0tICAqInNjbWRhdGEiOiogQ2F1c2VzIHRoZSDigJwuc3Zu4oCdIGRpcmVjdG9yaWVzIHRvIGJlIGF2YWlsYWJsZSBkdXJpbmcKKy0gICoic2NtZGF0YSI6KiBDYXVzZXMgdGhlICIuc3ZuIiBkaXJlY3RvcmllcyB0byBiZSBhdmFpbGFibGUgZHVyaW5nCiAgICBjb21waWxlLXRpbWUgd2hlbiBzZXQgdG8gImtlZXAiLiBCeSBkZWZhdWx0LCB0aGVzZSBkaXJlY3RvcmllcyBhcmUKICAgIHJlbW92ZWQuCiAKZGlmZiAtLWdpdCBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbCBiL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU0MzcyYS4uMDAwMDAwMAotLS0gYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MjggKzAsMCBAQAotPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgotImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+Ci0KLTxjaGFwdGVyPgotPHRpdGxlPkZpbGUgRG93bmxvYWQgU3VwcG9ydDwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgQml0QmFrZSdzIGZldGNoIG1vZHVsZSBpcyBhIHN0YW5kYWxvbmUgcGllY2Ugb2YgbGlicmFyeSBjb2RlCi0gICAgICAgIHRoYXQgZGVhbHMgd2l0aCB0aGUgaW50cmljYWNpZXMgb2YgZG93bmxvYWRpbmcgc291cmNlIGNvZGUKLSAgICAgICAgYW5kIGZpbGVzIGZyb20gcmVtb3RlIHN5c3RlbXMuCi0gICAgICAgIEZldGNoaW5nIHNvdXJjZSBjb2RlIGlzIG9uZSBvZiB0aGUgY29ybmVyc3RvbmVzIG9mIGJ1aWxkaW5nIHNvZnR3YXJlLgotICAgICAgICBBcyBzdWNoLCB0aGlzIG1vZHVsZSBmb3JtcyBhbiBpbXBvcnRhbnQgcGFydCBvZiBCaXRCYWtlLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgY3VycmVudCBmZXRjaCBtb2R1bGUgaXMgY2FsbGVkICJmZXRjaDIiIGFuZCByZWZlcnMgdG8gdGhlCi0gICAgICAgIGZhY3QgdGhhdCBpdCBpcyB0aGUgc2Vjb25kIG1ham9yIHZlcnNpb24gb2YgdGhlIEFQSS4KLSAgICAgICAgVGhlIG9yaWdpbmFsIHZlcnNpb24gaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29kZWJhc2UuCi0gICAgICAgIFRodXMsIGluIGFsbCBjYXNlcywgImZldGNoIiByZWZlcnMgdG8gImZldGNoMiIgaW4gdGhpcwotICAgICAgICBtYW51YWwuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9J3RoZS1kb3dubG9hZC1mZXRjaCc+Ci0gICAgICAgIDx0aXRsZT5UaGUgRG93bmxvYWQgKEZldGNoKTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIHRha2VzIHNldmVyYWwgc3RlcHMgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZSBvciBmaWxlcy4KLSAgICAgICAgICAgIFRoZSBmZXRjaGVyIGNvZGViYXNlIGRlYWxzIHdpdGggdHdvIGRpc3RpbmN0IHByb2Nlc3NlcyBpbiBvcmRlcjoKLSAgICAgICAgICAgIG9idGFpbmluZyB0aGUgZmlsZXMgZnJvbSBzb21ld2hlcmUgKGNhY2hlZCBvciBvdGhlcndpc2UpCi0gICAgICAgICAgICBhbmQgdGhlbiB1bnBhY2tpbmcgdGhvc2UgZmlsZXMgaW50byBhIHNwZWNpZmljIGxvY2F0aW9uIGFuZAotICAgICAgICAgICAgcGVyaGFwcyBpbiBhIHNwZWNpZmljIHdheS4KLSAgICAgICAgICAgIEdldHRpbmcgYW5kIHVucGFja2luZyB0aGUgZmlsZXMgaXMgb2Z0ZW4gb3B0aW9uYWxseSBmb2xsb3dlZAotICAgICAgICAgICAgYnkgcGF0Y2hpbmcuCi0gICAgICAgICAgICBQYXRjaGluZywgaG93ZXZlciwgaXMgbm90IGNvdmVyZWQgYnkgdGhpcyBtb2R1bGUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBjb2RlIHRvIGV4ZWN1dGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBwcm9jZXNzLCBhIGZldGNoLAotICAgICAgICAgICAgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScpIG9yICIiKS5zcGxpdCgpCi0gICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKLSAgICAgZmV0Y2hlci5kb3dubG9hZCgpCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGlzIGNvZGUgc2V0cyB1cCBhbiBpbnN0YW5jZSBvZiB0aGUgZmV0Y2ggY2xhc3MuCi0gICAgICAgICAgICBUaGUgaW5zdGFuY2UgdXNlcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSTHMgZnJvbSB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZW4gY2FsbHMgdGhlIDxmaWxlbmFtZT5kb3dubG9hZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBtZXRob2QgdG8gZG93bmxvYWQgdGhlIGZpbGVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgZmV0Y2ggY2xhc3MgaXMgdXN1YWxseSBmb2xsb3dlZCBieToKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcm9vdGRpciA9IGwuZ2V0VmFyKCdXT1JLRElSJykKLSAgICAgZmV0Y2hlci51bnBhY2socm9vdGRpcikKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRoaXMgY29kZSB1bnBhY2tzIHRoZSBkb3dubG9hZGVkIGZpbGVzIHRvIHRoZQotICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBGb3IgY29udmVuaWVuY2UsIHRoZSBuYW1pbmcgaW4gdGhlc2UgZXhhbXBsZXMgbWF0Y2hlcwotICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZXMgdXNlZCBieSBPcGVuRW1iZWRkZWQuCi0gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBhYm92ZSBjb2RlIGluIGFjdGlvbiwgZXhhbWluZQotICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgY2xhc3MgZmlsZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPgotICAgICAgICAgICAgdmFyaWFibGVzIGFyZSBub3QgaGFyZGNvZGVkIGludG8gdGhlIGZldGNoZXIsIHNpbmNlIHRob3NlIGZldGNoZXIKLSAgICAgICAgICAgIG1ldGhvZHMgY2FuIGJlIChhbmQgYXJlKSBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMuCi0gICAgICAgICAgICBJbiBPcGVuRW1iZWRkZWQgZm9yIGV4YW1wbGUsIHRoZSBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY29kZSB1c2VzCi0gICAgICAgICAgICB0aGUgZmV0Y2ggbW9kdWxlIHRvIGZldGNoIHRoZSBzc3RhdGUgZmlsZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZCwKLSAgICAgICAgICAgIEJpdEJha2UgdHJpZXMgdG8gcmVzb2x2ZSB0aGUgVVJMcyBieSBsb29raW5nIGZvciBzb3VyY2UgZmlsZXMKLSAgICAgICAgICAgIGluIGEgc3BlY2lmaWMgc2VhcmNoIG9yZGVyOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZS1taXJyb3IgU2l0ZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBmaXJzdCB1c2VzIHByZS1taXJyb3JzIHRvIHRyeSBhbmQgZmluZCBzb3VyY2UgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgIFRoZXNlIGxvY2F0aW9ucyBhcmUgZGVmaW5lZCB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBVUkk6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgSWYgcHJlLW1pcnJvcnMgZmFpbCwgQml0QmFrZSB1c2VzIHRoZSBvcmlnaW5hbCBVUkwgKGUuZyBmcm9tCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1pcnJvciBTaXRlczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBJZiBmZXRjaCBmYWlsdXJlcyBvY2N1ciwgQml0QmFrZSBuZXh0IHVzZXMgbWlycm9yIGxvY2F0aW9ucyBhcwotICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvciBlYWNoIFVSTCBwYXNzZWQgdG8gdGhlIGZldGNoZXIsIHRoZSBmZXRjaGVyCi0gICAgICAgICAgICBjYWxscyB0aGUgc3VibW9kdWxlIHRoYXQgaGFuZGxlcyB0aGF0IHBhcnRpY3VsYXIgVVJMIHR5cGUuCi0gICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGNhbiBiZSB0aGUgc291cmNlIG9mIHNvbWUgY29uZnVzaW9uIHdoZW4geW91Ci0gICAgICAgICAgICBhcmUgcHJvdmlkaW5nIFVSTHMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIFVSTHM6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvcG9reTtwcm90b2NvbD1naXQKLSAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L3Bva3k7cHJvdG9jb2w9aHR0cAotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgVVJMIGlzIHBhc3NlZCB0byB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT53Z2V0PC9maWxlbmFtZT4gZmV0Y2hlciwgd2hpY2ggZG9lcyBub3QKLSAgICAgICAgICAgIHVuZGVyc3RhbmQgImdpdCIuCi0gICAgICAgICAgICBUaGVyZWZvcmUsIHRoZSBsYXR0ZXIgY2FzZSBpcyB0aGUgY29ycmVjdCBmb3JtIHNpbmNlIHRoZQotICAgICAgICAgICAgR2l0IGZldGNoZXIgZG9lcyBrbm93IGhvdyB0byB1c2UgSFRUUCBhcyBhIHRyYW5zcG9ydC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyB0aGF0IHNob3cgY29tbW9ubHkgdXNlZCBtaXJyb3IKLSAgICAgICAgICAgIGRlZmluaXRpb25zOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQUkVNSVJST1JTID89ICJcCi0gICAgICAgICBienI6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBjdnM6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBnaXQ6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBoZzovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBvc2M6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBwNDovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBzdm46Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKLQotICAgICBNSVJST1JTID0rICJcCi0gICAgICAgICBmdHA6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBodHRwOi8vLiovLiogICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgICAgICBodHRwczovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIEl0IGlzIHVzZWZ1bCB0byBub3RlIHRoYXQgQml0QmFrZSBzdXBwb3J0cwotICAgICAgICAgICAgY3Jvc3MtVVJMcy4KLSAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIG1pcnJvciBhIEdpdCByZXBvc2l0b3J5IG9uIGFuIEhUVFAKLSAgICAgICAgICAgIHNlcnZlciBhcyBhIHRhcmJhbGwuCi0gICAgICAgICAgICBUaGlzIGlzIHdoYXQgdGhlIDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPiBtYXBwaW5nIGluCi0gICAgICAgICAgICB0aGUgcHJldmlvdXMgZXhhbXBsZSBkb2VzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTaW5jZSBuZXR3b3JrIGFjY2Vzc2VzIGFyZSBzbG93LCBCaXRCYWtlIG1haW50YWlucyBhCi0gICAgICAgICAgICBjYWNoZSBvZiBmaWxlcyBkb3dubG9hZGVkIGZyb20gdGhlIG5ldHdvcmsuCi0gICAgICAgICAgICBBbnkgc291cmNlIGZpbGVzIHRoYXQgYXJlIG5vdCBsb2NhbCAoaS5lLgotICAgICAgICAgICAgZG93bmxvYWRlZCBmcm9tIHRoZSBJbnRlcm5ldCkgYXJlIHBsYWNlZCBpbnRvIHRoZSBkb3dubG9hZAotICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBzcGVjaWZpZWQgYnkgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRmlsZSBpbnRlZ3JpdHkgaXMgb2Yga2V5IGltcG9ydGFuY2UgZm9yIHJlcHJvZHVjaW5nIGJ1aWxkcy4KLSAgICAgICAgICAgIEZvciBub24tbG9jYWwgYXJjaGl2ZSBkb3dubG9hZHMsIHRoZSBmZXRjaGVyIGNvZGUgY2FuIHZlcmlmeQotICAgICAgICAgICAgU0hBLTI1NiBhbmQgTUQ1IGNoZWNrc3VtcyB0byBlbnN1cmUgdGhlIGFyY2hpdmVzIGhhdmUgYmVlbgotICAgICAgICAgICAgZG93bmxvYWRlZCBjb3JyZWN0bHkuCi0gICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhlc2UgY2hlY2tzdW1zIGJ5IHVzaW5nIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZQotICAgICAgICAgICAgdmFyZmxhZ3MgYXMgZm9sbG93czoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgU1JDX1VSSVttZDVzdW1dID0gIjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IgotICAgICBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4iCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgY2hlY2tzdW1zIGFzIHBhcmFtZXRlcnMgb24gdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFzIHNob3duIGJlbG93OgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJID0gImh0dHA6Ly9leGFtcGxlLmNvbS9mb29iYXIudGFyLmJ6MjttZDVzdW09NGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQiCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBJZiBtdWx0aXBsZSBVUklzIGV4aXN0LCB5b3UgY2FuIHNwZWNpZnkgdGhlIGNoZWNrc3VtcyBlaXRoZXIKLSAgICAgICAgICAgIGRpcmVjdGx5IGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBvciB5b3UgY2FuIG5hbWUgdGhlIFVSTHMuCi0gICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN5bnRheCBzaG93cyBob3cgeW91IG5hbWUgdGhlIFVSSXM6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAiaHR0cDovL2V4YW1wbGUuY29tL2Zvb2Jhci50YXIuYnoyO25hbWU9Zm9vIgotICAgICBTUkNfVVJJW2Zvby5tZDVzdW1dID0gNGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIEFmdGVyIGEgZmlsZSBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCBoYXMgaGFkIGl0cyBjaGVja3N1bSBjaGVja2VkLAotICAgICAgICAgICAgYSAiLmRvbmUiIHN0YW1wIGlzIHBsYWNlZCBpbiA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4uCi0gICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhpcyBzdGFtcCBkdXJpbmcgc3Vic2VxdWVudCBidWlsZHMgdG8gYXZvaWQKLSAgICAgICAgICAgIGRvd25sb2FkaW5nIG9yIGNvbXBhcmluZyBhIGNoZWNrc3VtIGZvciB0aGUgZmlsZSBhZ2Fpbi4KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCBsb2NhbCBzdG9yYWdlIGlzIHNhZmUgZnJvbSBkYXRhIGNvcnJ1cHRpb24uCi0gICAgICAgICAgICAgICAgSWYgdGhpcyB3ZXJlIG5vdCB0aGUgY2FzZSwgdGhlcmUgd291bGQgYmUgYmlnZ2VyIGlzc3VlcyB0byB3b3JyeSBhYm91dC4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9TVFJJQ1RfQ0hFQ0tTVU0nPjxmaWxlbmFtZT5CQl9TVFJJQ1RfQ0hFQ0tTVU08L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIGlzIHNldCwgYW55IGRvd25sb2FkIHdpdGhvdXQgYSBjaGVja3N1bSB0cmlnZ2VycyBhbgotICAgICAgICAgICAgZXJyb3IgbWVzc2FnZS4KLSAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX05PX05FVFdPUksnPjxmaWxlbmFtZT5CQl9OT19ORVRXT1JLPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBtYWtlIGFueSBhdHRlbXB0ZWQgbmV0d29yayBhY2Nlc3MgYSBmYXRhbAotICAgICAgICAgICAgZXJyb3IsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgY2hlY2tpbmcgdGhhdCBtaXJyb3JzIGFyZSBjb21wbGV0ZQotICAgICAgICAgICAgYXMgd2VsbCBhcyBvdGhlciB0aGluZ3MuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nYmItdGhlLXVucGFjayc+Ci0gICAgICAgIDx0aXRsZT5UaGUgVW5wYWNrPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSB1bnBhY2sgcHJvY2VzcyB1c3VhbGx5IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGRvd25sb2FkLgotICAgICAgICAgICAgRm9yIGFsbCBVUkxzIGV4Y2VwdCBHaXQgVVJMcywgQml0QmFrZSB1c2VzIHRoZSBjb21tb24KLSAgICAgICAgICAgIDxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiBtZXRob2QuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZXhpc3QgdGhhdCB5b3UgY2FuIHNwZWNpZnkgd2l0aGluIHRoZQotICAgICAgICAgICAgVVJMIHRvIGdvdmVybiB0aGUgYmVoYXZpb3Igb2YgdGhlIHVucGFjayBzdGFnZToKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51bnBhY2s6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgVVJMIGNvbXBvbmVudHMgYXJlIHVucGFja2VkLgotICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhlIGNvbXBvbmVudHMKLSAgICAgICAgICAgICAgICAgICAgYXJlIHVucGFja2VkLgotICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjAiLCB0aGUgdW5wYWNrIHN0YWdlIGxlYXZlcyB0aGUgZmlsZSBhbG9uZS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgYW4gYXJjaGl2ZSB0byBiZQotICAgICAgICAgICAgICAgICAgICBjb3BpZWQgaW4gYW5kIG5vdCBiZSB1bnBhY2tlZC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kb3M6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0byA8ZmlsZW5hbWU+LnppcDwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmphcjwvZmlsZW5hbWU+IGZpbGVzIGFuZCBzcGVjaWZpZXMgd2hldGhlciB0bwotICAgICAgICAgICAgICAgICAgICB1c2UgRE9TIGxpbmUgZW5kaW5nIGNvbnZlcnNpb24gb24gdGV4dCBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5iYXNlcGF0aDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdHMgdGhlIHVucGFjayBzdGFnZSB0byBzdHJpcCB0aGUgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZyb20gdGhlIHNvdXJjZSBwYXRoIHdoZW4gdW5wYWNraW5nLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnN1YmRpcjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBVbnBhY2tzIHRoZSBzcGVjaWZpYyBVUkwgdG8gdGhlIHNwZWNpZmllZCBzdWJkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByb290IGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIFRoZSB1bnBhY2sgY2FsbCBhdXRvbWF0aWNhbGx5IGRlY29tcHJlc3NlcyBhbmQgZXh0cmFjdHMgZmlsZXMKLSAgICAgICAgICAgIHdpdGggIi5aIiwgIi56IiwgIi5neiIsICIueHoiLCAiLnppcCIsICIuamFyIiwgIi5pcGsiLCAiLnJwbSIuCi0gICAgICAgICAgICAiLnNycG0iLCAiLmRlYiIgYW5kICIuYnoyIiBleHRlbnNpb25zIGFzIHdlbGwgYXMgdmFyaW91cyBjb21iaW5hdGlvbnMKLSAgICAgICAgICAgIG9mIHRhcmJhbGwgZXh0ZW5zaW9ucy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXMgbWVudGlvbmVkLCB0aGUgR2l0IGZldGNoZXIgaGFzIGl0cyBvd24gdW5wYWNrIG1ldGhvZCB0aGF0Ci0gICAgICAgICAgICBpcyBvcHRpbWl6ZWQgdG8gd29yayB3aXRoIEdpdCB0cmVlcy4KLSAgICAgICAgICAgIEJhc2ljYWxseSwgdGhpcyBtZXRob2Qgd29ya3MgYnkgY2xvbmluZyB0aGUgdHJlZSBpbnRvIHRoZSBmaW5hbAotICAgICAgICAgICAgZGlyZWN0b3J5LgotICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgY29tcGxldGVkIHVzaW5nIHJlZmVyZW5jZXMgc28gdGhhdCB0aGVyZSBpcwotICAgICAgICAgICAgb25seSBvbmUgY2VudHJhbCBjb3B5IG9mIHRoZSBHaXQgbWV0YWRhdGEgbmVlZGVkLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2JiLWZldGNoZXJzJz4KLSAgICAgICAgPHRpdGxlPkZldGNoZXJzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgVVJMIHByZWZpeCBkZXRlcm1pbmVzIHdoaWNoCi0gICAgICAgICAgICBmZXRjaGVyIHN1Ym1vZHVsZSBCaXRCYWtlIHVzZXMuCi0gICAgICAgICAgICBFYWNoIHN1Ym1vZHVsZSBjYW4gc3VwcG9ydCBkaWZmZXJlbnQgVVJMIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtZmlsZS1mZXRjaGVyJz4KLSAgICAgICAgICAgIDx0aXRsZT5Mb2NhbCBmaWxlIGZldGNoZXIgKDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBVUkxzIHRoYXQgYmVnaW4gd2l0aAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lIHlvdSBzcGVjaWZ5IHdpdGhpbiB0aGUgVVJMIGNhbiBiZQotICAgICAgICAgICAgICAgIGVpdGhlciBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGEgZmlsZS4KLSAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZW5hbWUgaXMgcmVsYXRpdmUsIHRoZSBjb250ZW50cyBvZiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgc2FtZSB3YXkKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gZmluZCBleGVjdXRhYmxlcy4KLSAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgZm91bmQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBpcyBhdmFpbGFibGUgaW4KLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgYnkgdGhlIHRpbWUgdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYSBkaXJlY3RvcnksIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGlzCi0gICAgICAgICAgICAgICAgdW5wYWNrZWQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIGV4YW1wbGUgVVJMcywgdGhlIGZpcnN0IHJlbGF0aXZlIGFuZAotICAgICAgICAgICAgICAgIHRoZSBzZWNvbmQgYWJzb2x1dGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJID0gImZpbGU6Ly9yZWxhdGl2ZWZpbGUucGF0Y2giCi0gICAgIFNSQ19VUkkgPSAiZmlsZTovLy9Vc2Vycy9pY2gvdmVyeV9pbXBvcnRhbnRfc29mdHdhcmUiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2h0dHAtZnRwLWZldGNoZXInPgotICAgICAgICAgICAgPHRpdGxlPkhUVFAvRlRQIHdnZXQgZmV0Y2hlciAoPGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cHM6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgb2J0YWlucyBmaWxlcyBmcm9tIHdlYiBhbmQgRlRQIHNlcnZlcnMuCi0gICAgICAgICAgICAgICAgSW50ZXJuYWxseSwgdGhlIGZldGNoZXIgdXNlcyB0aGUgd2dldCB1dGlsaXR5LgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbmQgcGFyYW1ldGVycyB1c2VkIGFyZSBzcGVjaWZpZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFVENIQ01EX3dnZXQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgd2hpY2ggZGVmYXVsdHMKLSAgICAgICAgICAgICAgICB0byBzZW5zaWJsZSB2YWx1ZXMuCi0gICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgc3VwcG9ydHMgYSBwYXJhbWV0ZXIgImRvd25sb2FkZmlsZW5hbWUiIHRoYXQKLSAgICAgICAgICAgICAgICBhbGxvd3MgdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZSB0byBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlIGlzIHVzZWZ1bAotICAgICAgICAgICAgICAgIGZvciBhdm9pZGluZyBjb2xsaXNpb25zIGluCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIGZpbGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGUgVVJMcyBhcmUgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAiaHR0cDovL29lLmhhbmRoZWxkcy5vcmcvbm90X3RoZXJlLmFhYyIKLSAgICAgU1JDX1VSSSA9ICJmdHA6Ly9vZS5oYW5kaGVsZHMub3JnL25vdF90aGVyZV9hc193ZWxsLmFhYyIKLSAgICAgU1JDX1VSSSA9ICJmdHA6Ly95b3VAb2UuaGFuZGhlbGRzLm9yZy9ob21lL3lvdS9zZWNyZXQucGxhbiIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgIEJlY2F1c2UgVVJMIHBhcmFtZXRlcnMgYXJlIGRlbGltaXRlZCBieSBzZW1pLWNvbG9ucywgdGhpcyBjYW4KLSAgICAgICAgICAgICAgIGludHJvZHVjZSBhbWJpZ3VpdHkgd2hlbiBwYXJzaW5nIFVSTHMgdGhhdCBhbHNvIGNvbnRhaW4gc2VtaS1jb2xvbnMsCi0gICAgICAgICAgICAgICBmb3IgZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAiaHR0cDovL2FiYzEyMy5vcmcvZ2l0Lz9wPWdjYy9nY2MuZ2l0O2E9c25hcHNob3Q7aD1hNWRkNDciCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgU3VjaCBVUkxzIHNob3VsZCBzaG91bGQgYmUgbW9kaWZpZWQgYnkgcmVwbGFjaW5nIHNlbWktY29sb25zIHdpdGggJyZhbXA7JyBjaGFyYWN0ZXJzOgotICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDciCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEluIG1vc3QgY2FzZXMgdGhpcyBzaG91bGQgd29yay4gVHJlYXRpbmcgc2VtaS1jb2xvbnMgYW5kICcmYW1wOycgaW4gcXVlcmllcwotICAgICAgICAgICAgICAgIGlkZW50aWNhbGx5IGlzIHJlY29tbWVuZGVkIGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIChXM0MpLgotICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgVVJMLCB5b3UgbWF5IGhhdmUgdG8gc3BlY2lmeSB0aGUgbmFtZQotICAgICAgICAgICAgICAgIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUgYXMgd2VsbDoKLSAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDc7ZG93bmxvYWRmaWxlbmFtZT1teWZpbGUuYnoyIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdjdnMtZmV0Y2hlcic+Ci0gICAgICAgICAgICA8dGl0bGU+Q1ZTIGZldGNoZXIgKDxmaWxlbmFtZT4oY3ZzOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBjaGVja2luZyBvdXQgZmlsZXMgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICBDVlMgdmVyc2lvbiBjb250cm9sIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSBpdCB1c2luZyBhIG51bWJlciBvZiBkaWZmZXJlbnQgdmFyaWFibGVzOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkZFVENIQ01EX2N2czwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSB0byB1c2Ugd2hlbiBydW5uaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5hbWUgaXMgdXN1YWxseSAiY3ZzIi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBDVlMgc291cmNlIGNvZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpYWwgdmFsdWUgb2YgIm5vdyIgY2F1c2VzIHRoZSBjaGVja291dCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXBkYXRlZCBvbiBldmVyeSBidWlsZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1DVlNESVInPjxmaWxlbmFtZT5DVlNESVI8L2ZpbGVuYW1lPjwvbGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGVyZSBhIHRlbXBvcmFyeSBjaGVja291dCBpcyBzYXZlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBvZnRlbiA8ZmlsZW5hbWU+RExfRElSL2N2czwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9IT1NUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHRvIHVzZSBhcyBhICJwcm94eT0iIHBhcmFtZXRlciB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jdnM8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9QT1JUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3J0IG51bWJlciB0byB1c2UgYXMgYSAicHJveHlwb3J0PSIgcGFyYW1ldGVyIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICBBcyB3ZWxsIGFzIHRoZSBzdGFuZGFyZCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgVVJMIHN5bnRheCwKLSAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gY29uZmlndXJlIHRoZSBmZXRjaGVyIHdpdGggdmFyaW91cyBVUkwgcGFyYW1ldGVyczoKLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1ldGhvZCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCBvdmVyIHdoaWNoIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIENWUwotICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLgotICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBwcm90b2NvbCBpcyAicHNlcnZlciIuCi0gICAgICAgICAgICAgICAgICAgICAgICBJZiAibWV0aG9kIiBpcyBzZXQgdG8gImV4dCIsIEJpdEJha2UgZXhhbWluZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAicnNoIiBwYXJhbWV0ZXIgYW5kIHNldHMgPGZpbGVuYW1lPkNWU19SU0g8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlICJkaXIiIGZvciBsb2NhbCBkaXJlY3Rvcmllcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJtb2R1bGUiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1vZHVsZSB0byBjaGVjayBvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzdXBwbHkgdGhpcyBwYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4idGFnIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVzIHdoaWNoIENWUyBUQUcgc2hvdWxkIGJlIHVzZWQgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2hlY2tvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgVEFHIGlzIGVtcHR5LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImRhdGUiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBkYXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gImRhdGUiIGlzIHNwZWNpZmllZCwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItU1JDREFURSc+PGZpbGVuYW1lPlNSQ0RBVEU8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjb25maWd1cmF0aW9uIGlzIHVzZWQgdG8gY2hlY2tvdXQgYSBzcGVjaWZpYyBkYXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpYWwgdmFsdWUgb2YgIm5vdyIgY2F1c2VzIHRoZSBjaGVja291dCB0byBiZQotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCBvbiBldmVyeSBidWlsZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJsb2NhbGRpciI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gcmVuYW1lIHRoZSBtb2R1bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVseSwgeW91IGFyZSByZW5hbWluZyB0aGUgb3V0cHV0IGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2hpY2ggdGhlIG1vZHVsZSBpcyB1bnBhY2tlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgZm9yY2luZyB0aGUgbW9kdWxlIGludG8gYSBzcGVjaWFsCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgcmVsYXRpdmUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1DVlNESVInPjxmaWxlbmFtZT5DVlNESVI8L2ZpbGVuYW1lPjwvbGluaz4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icnNoIjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlICJtZXRob2QiIHBhcmFtZXRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzY21kYXRhIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBDVlMgbWV0YWRhdGEgdG8gYmUgbWFpbnRhaW5lZCBpbiB0aGUgdGFyYmFsbAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZldGNoZXIgY3JlYXRlcyB3aGVuIHNldCB0byAia2VlcCIuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyYmFsbCBpcyBleHBhbmRlZCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBDVlMgbWV0YWRhdGEgaXMgcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJmdWxscGF0aCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdGhlIHJlc3VsdGluZyBjaGVja291dCBpcyBhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBsZXZlbCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIG9yIGlzIGF0IGRlZXBlcgotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibm9yZWN1cnNlIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBmZXRjaGVyIHRvIG9ubHkgY2hlY2tvdXQgdGhlIHNwZWNpZmllZAotICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpdGggbm8gcmVjdXJzZSBpbnRvIGFueSBzdWJkaXJlY3Rvcmllcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJwb3J0Ijo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBvcnQgdG8gd2hpY2ggdGhlIENWUyBzZXJ2ZXIgY29ubmVjdHMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGUgVVJMcyBhcmUgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAiY3ZzOi8vQ1ZTUk9PVDttb2R1bGU9bXltb2R1bGU7dGFnPXNvbWUtdmVyc2lvbjttZXRob2Q9ZXh0IgotICAgICBTUkNfVVJJID0gImN2czovL0NWU1JPT1Q7bW9kdWxlPW15bW9kdWxlO2RhdGU9MjAwNjAxMjY7bG9jYWxkaXI9dXNldGhhdCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nc3ZuLWZldGNoZXInPgotICAgICAgICAgICAgPHRpdGxlPlN1YnZlcnNpb24gKFNWTikgRmV0Y2hlciAoPGZpbGVuYW1lPnN2bjovLzwvZmlsZW5hbWU+KTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgU3VidmVyc2lvbiBzb3VyY2UgY29udHJvbCBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgVGhlIGV4ZWN1dGFibGUgdXNlZCBpcyBzcGVjaWZpZWQgYnkKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkVUQ0hDTURfc3ZuPC9maWxlbmFtZT4sIHdoaWNoIGRlZmF1bHRzCi0gICAgICAgICAgICAgICAgdG8gInN2biIuCi0gICAgICAgICAgICAgICAgVGhlIGZldGNoZXIncyB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgaXMgc2V0IGJ5Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNWTkRJUic+PGZpbGVuYW1lPlNWTkRJUjwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IDxmaWxlbmFtZT5ETF9ESVIvc3ZuPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJtb2R1bGUiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgc3ZuIG1vZHVsZSB0byBjaGVja291dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgdGhpcyBwYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoaXMgcGFyYW1ldGVyIGFzIHRoZSB0b3AtbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUgcmVwb3NpdG9yeSBkYXRhIHlvdSB3YW50LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InBhdGhfc3BlYyI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEEgc3BlY2lmaWMgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGNoZWNrb3V0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHN2biBtb2R1bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icHJvdG9jb2wiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wgdG8gdXNlLCB3aGljaCBkZWZhdWx0cyB0byAic3ZuIi4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmICJwcm90b2NvbCIgaXMgc2V0IHRvICJzdm4rc3NoIiwgdGhlICJzc2giCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgYWxzbyB1c2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJldiI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdG8gY2hlY2tvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic2NtZGF0YSI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUg4oCcLnN2buKAnSBkaXJlY3RvcmllcyB0byBiZSBhdmFpbGFibGUgZHVyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlLXRpbWUgd2hlbiBzZXQgdG8gImtlZXAiLgotICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic3NoIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHVzZWQgd2hlbiAicHJvdG9jb2wiIGlzIHNldAotICAgICAgICAgICAgICAgICAgICAgICAgdG8gInN2bitzc2giLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc3NoCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtIHVzZWQgYnkgc3ZuLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InRyYW5zcG9ydHVzZXIiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHJlcXVpcmVkLCBzZXRzIHRoZSB1c2VybmFtZSBmb3IgdGhlIHRyYW5zcG9ydC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFyYW1ldGVyIGlzIGVtcHR5LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRyYW5zcG9ydCB1c2VybmFtZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXNlcm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIG1haW4gVVJMLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIHN1YnZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHRocmVlIGV4YW1wbGVzIHVzaW5nIHN2bjoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAic3ZuOi8vbXlyZXBvcy9wcm9qMTttb2R1bGU9dmlwO3Byb3RvY29sPWh0dHA7cmV2PTY2NyIKLSAgICAgU1JDX1VSSSA9ICJzdm46Ly9teXJlcG9zL3Byb2oxO21vZHVsZT1vcGllO3Byb3RvY29sPXN2bitzc2giCi0gICAgIFNSQ19VUkkgPSAic3ZuOi8vbXlyZXBvcy9wcm9qMTttb2R1bGU9dHJ1bms7cHJvdG9jb2w9aHR0cDtwYXRoX3NwZWM9JHtNWV9ESVJ9L3Byb2oxIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdnaXQtZmV0Y2hlcic+Ci0gICAgICAgICAgICA8dGl0bGU+R2l0IEZldGNoZXIgKDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgc3VibW9kdWxlIGZldGNoZXMgY29kZSBmcm9tIHRoZSBHaXQKLSAgICAgICAgICAgICAgICBzb3VyY2UgY29udHJvbCBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgd29ya3MgYnkgY3JlYXRpbmcgYSBiYXJlIGNsb25lIG9mIHRoZQotICAgICAgICAgICAgICAgIHJlbW90ZSBpbnRvCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUdJVERJUic+PGZpbGVuYW1lPkdJVERJUjwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IDxmaWxlbmFtZT5ETF9ESVIvZ2l0MjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFRoaXMgYmFyZSBjbG9uZSBpcyB0aGVuIGNsb25lZCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeSBkdXJpbmcgdGhlCi0gICAgICAgICAgICAgICAgdW5wYWNrIHN0YWdlIHdoZW4gYSBzcGVjaWZpYyB0cmVlIGlzIGNoZWNrZWQgb3V0LgotICAgICAgICAgICAgICAgIFRoaXMgaXMgZG9uZSB1c2luZyBhbHRlcm5hdGVzIGFuZCBieSByZWZlcmVuY2UgdG8KLSAgICAgICAgICAgICAgICBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZSBkYXRhIG9uIHRoZSBkaXNrIGFuZAotICAgICAgICAgICAgICAgIG1ha2UgdGhlIHVucGFjayBwcm9jZXNzIGZhc3QuCi0gICAgICAgICAgICAgICAgVGhlIGV4ZWN1dGFibGUgdXNlZCBjYW4gYmUgc2V0IHdpdGgKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkVUQ0hDTURfZ2l0PC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icHJvdG9jb2wiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wgdXNlZCB0byBmZXRjaCB0aGUgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiZ2l0IiB3aGVuIGEgaG9zdG5hbWUgaXMgc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgYSBob3N0bmFtZSBpcyBub3Qgc2V0LCB0aGUgR2l0IHByb3RvY29sIGlzICJmaWxlIi4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgImh0dHAiLCAiaHR0cHMiLCAic3NoIiBhbmQgInJzeW5jIi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJub2NoZWNrb3V0Ijo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGVsbHMgdGhlIGZldGNoZXIgdG8gbm90IGNoZWNrb3V0IHNvdXJjZSBjb2RlIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHVucGFja2luZyB3aGVuIHNldCB0byAiMSIuCi0gICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyBvcHRpb24gZm9yIHRoZSBVUkwgd2hlcmUgdGhlcmUgaXMgYSBjdXN0b20KLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRpbmUgdG8gY2hlY2tvdXQgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICIwIi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJyZWJhc2VhYmxlIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5IGNhbiBiZSByZWJhc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gIjEiIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbnMgY2FuIGJlY29tZSBkZXRhY2hlZCBmcm9tIGJyYW5jaGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgc291cmNlIG1pcnJvciB0YXJiYWxsIGlzIGRvbmUgcGVyCi0gICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiwgd2hpY2ggaGFzIGEgbG9zcyBvZiBlZmZpY2llbmN5LgotICAgICAgICAgICAgICAgICAgICAgICAgUmViYXNpbmcgdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5IGNvdWxkIGNhdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCByZXZpc2lvbiB0byBkaXNhcHBlYXIgZnJvbSB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIHJlbWluZHMgdGhlIGZldGNoZXIgdG8gcHJlc2VydmUgdGhlIGxvY2FsIGNhY2hlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJlZnVsbHkgZm9yIGZ1dHVyZSB1c2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgIjAiLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im5vYnJhbmNoIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGVsbHMgdGhlIGZldGNoZXIgdG8gbm90IGNoZWNrIHRoZSBTSEEgdmFsaWRhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBicmFuY2ggd2hlbiBzZXQgdG8gIjEiLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIjAiLgotICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlIHRoYXQgcmVmZXJzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWl0IHRoYXQgaXMgdmFsaWQgZm9yIGEgdGFnIGluc3RlYWQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBicmFuY2guCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iYmFyZWNsb25lIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGVsbHMgdGhlIGZldGNoZXIgdG8gY2xvbmUgYSBiYXJlIGNsb25lIGludG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBkaXJlY3Rvcnkgd2l0aG91dCBjaGVja2luZyBvdXQgYSB3b3JraW5nIHRyZWUuCi0gICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSByYXcgR2l0IG1ldGFkYXRhIGlzIHByb3ZpZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaW1wbGllcyB0aGUgIm5vY2hlY2tvdXQiIHBhcmFtZXRlciBhcyB3ZWxsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImJyYW5jaCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2goZXMpIG9mIHRoZSBHaXQgdHJlZSB0byBjbG9uZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHVuc2V0LCB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgIm1hc3RlciIuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJyYW5jaCBwYXJhbWV0ZXJzIG11Y2ggbWF0Y2ggdGhlIG51bWJlciBvZgotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJldiI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiB0byB1c2UgZm9yIHRoZSBjaGVja291dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICJtYXN0ZXIiLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InRhZyI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHRhZyB0byB1c2UgZm9yIHRoZSBjaGVja291dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNvcnJlY3RseSByZXNvbHZlIHRhZ3MsIEJpdEJha2UgbXVzdCBhY2Nlc3MgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoYXQgcmVhc29uLCB0YWdzIGFyZSBvZnRlbiBub3QgdXNlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzIGZhciBhcyBHaXQgaXMgY29uY2VybmVkLCB0aGUgInRhZyIgcGFyYW1ldGVyIGJlaGF2ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIHRoZSAicmV2IiBwYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic3VicGF0aCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIExpbWl0cyB0aGUgY2hlY2tvdXQgdG8gYSBzcGVjaWZpYyBzdWJwYXRoIG9mIHRoZSB0cmVlLgotICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHdob2xlIHRyZWUgaXMgY2hlY2tlZCBvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGVzdHN1ZmZpeCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwYXRoIGluIHdoaWNoIHRvIHBsYWNlIHRoZSBjaGVja291dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBwYXRoIGlzIDxmaWxlbmFtZT5naXQvPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4idXNlaGVhZCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgbG9jYWwgPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+IFVSTHMgdG8gdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBicmFuY2ggSEVBRCBhcyB0aGUgcmV2aXNpb24gZm9yIHVzZSB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QVVUT1JFVjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJ1c2VoZWFkIiBwYXJhbWV0ZXIgaW1wbGllcyBubyBicmFuY2ggYW5kIG9ubHkgd29ya3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHRyYW5zZmVyIHByb3RvY29sIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlIFVSTHM6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5vZS5oYW5kaGVsZHMub3JnL2dpdC92aXAuZ2l0O3RhZz12ZXJzaW9uLTEiCi0gICAgIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lm9lLmhhbmRoZWxkcy5vcmcvZ2l0L3ZpcC5naXQ7cHJvdG9jb2w9aHR0cCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZ2l0c20tZmV0Y2hlcic+Ci0gICAgICAgICAgICA8dGl0bGU+R2l0IFN1Ym1vZHVsZSBGZXRjaGVyICg8ZmlsZW5hbWU+Z2l0c206Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgc3VibW9kdWxlIGluaGVyaXRzIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0LWZldGNoZXInPkdpdCBmZXRjaGVyPC9saW5rPiBhbmQgZXh0ZW5kcwotICAgICAgICAgICAgICAgIHRoYXQgZmV0Y2hlcidzIGJlaGF2aW9yIGJ5IGZldGNoaW5nIGEgcmVwb3NpdG9yeSdzIHN1Ym1vZHVsZXMuCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgaXMgcGFzc2VkIHRvIHRoZSBHaXQgZmV0Y2hlciBhcyBkZXNjcmliZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dpdC1mZXRjaGVyJz5HaXQgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+KTwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgPHRpdGxlPk5vdGVzIGFuZCBXYXJuaW5nczwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2xlYW4gYSByZWNpcGUgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAgICAgJzxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPicgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAnPGZpbGVuYW1lPmdpdHNtOi8vPC9maWxlbmFtZT4nIFVSTHMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBHaXQgU3VibW9kdWxlcyBmZXRjaGVyIGlzIG5vdCBhIGNvbXBsZXRlIGZldGNoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgaGFzIGtub3duIGlzc3VlcyB3aGVyZSBpdCBkb2VzIG5vdCB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwgc291cmNlIG1pcnJvcmluZyBpbmZyYXN0cnVjdHVyZSBwcm9wZXJseS4gRnVydGhlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdWJtb2R1bGUgc291cmNlcyBpdCBmZXRjaGVzIGFyZSBub3QgdmlzaWJsZSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2luZyBhbmQgc291cmNlIGFyY2hpdmluZyBpbmZyYXN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nY2xlYXJjYXNlLWZldGNoZXInPgotICAgICAgICAgICAgPHRpdGxlPkNsZWFyQ2FzZSBGZXRjaGVyICg8ZmlsZW5hbWU+Y2NyYzovLzwvZmlsZW5hbWU+KTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gYQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmF0aW9uYWxfQ2xlYXJDYXNlJz5DbGVhckNhc2U8L3VsaW5rPgotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIGZldGNoZXIsIG1ha2Ugc3VyZSB5b3VyIHJlY2lwZSBoYXMgcHJvcGVyCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LAotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHNldHRpbmdzLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAiY2NyYzovL2NjLmV4YW1wbGUub3JnL2NjcmM7dm9iPS9leGFtcGxlX3ZvYjttb2R1bGU9L2V4YW1wbGVfbW9kdWxlIgotICAgICBTUkNSRVYgPSAiRVhBTVBMRV9DTEVBUkNBU0VfVEFHIgotICAgICBQViA9ICIke0BkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpLnJlcGxhY2UoIi8iLCAiKyIpfSIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgdXNlcyB0aGUgPGZpbGVuYW1lPnJjbGVhcnRvb2w8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiByZW1vdGUgY2xpZW50LCBkZXBlbmRpbmcgb24KLSAgICAgICAgICAgICAgICB3aGljaCBvbmUgaXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIG9wdGlvbnMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgc3RhdGVtZW50OgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZGluZyAiLyIgY2hhcmFjdGVyLCBvZiB0aGUgQ2xlYXJDYXNlIFZPQi4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kaW5nICIvIiBjaGFyYWN0ZXIsIGluIHRoZSBzZWxlY3RlZCBWT0IuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGFyZSBjb21iaW5lZCB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5sb2FkPC9maWxlbmFtZT4gcnVsZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2aWV3IGNvbmZpZyBzcGVjLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IHZhbHVlcyBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGF0IHRoZSBzdGFydCBvZiB0aGlzIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluaW5nIHRob3NlIHZhbHVlcyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBsb2FkIC9leGFtcGxlX3ZvYi9leGFtcGxlX21vZHVsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wcm90bzwvZmlsZW5hbWU+PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wsIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGZpbGVuYW1lPmh0dHA8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmh0dHBzPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGZldGNoZXIgY3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhdGlvbi4KLSAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGlzIHNwZWNpZmljYXRpb24gd3JpdHRlbiB0byBhbiBhcmVhIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQsCi0gICAgICAgICAgICAgICAgdXNlIHRoZSA8ZmlsZW5hbWU+Q0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDPC9maWxlbmFtZT4gdmFyaWFibGUKLSAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZSB0byBkZWZpbmUgd2hlcmUgdGhlIHNwZWNpZmljYXRpb24gaXMgd3JpdHRlbi4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiBsb3NlcyBpdHMgZnVuY3Rpb25hbGl0eSBpZiB5b3UKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGlzIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gaXMgc3RpbGwgdXNlZCB0byBsYWJlbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSBhZnRlciBhIGZldGNoIGV2ZW4gdGhvdWdoIGl0IGRvZXMgbm90IGRlZmluZSB3aGF0IGlzCi0gICAgICAgICAgICAgICAgICAgIGZldGNoZWQuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBIZXJlIGFyZSBhIGNvdXBsZSBvZiBvdGhlciBiZWhhdmlvcnMgd29ydGggbWVudGlvbmluZzoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiwgdGhlIGxvZ2luIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xlYXJ0b29sPC9maWxlbmFtZT4gaXMgaGFuZGxlZCBieSB0aGUgc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxvZ2luIHJlcXVpcmUgbm8gc3BlY2lhbCBzdGVwcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciB0byB1c2UgPGZpbGVuYW1lPnJjbGVhcnRvb2w8L2ZpbGVuYW1lPiB3aXRoIGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLCBhbiAicmNsZWFydG9vbCBsb2dpbiIgaXMgbmVjZXNzYXJ5IGJlZm9yZSB1c2luZyB0aGUgZmV0Y2hlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3BlcmZvcmNlLWZldGNoZXInPgotICAgICAgICAgICAgPHRpdGxlPlBlcmZvcmNlIEZldGNoZXIgKDxmaWxlbmFtZT5wNDovLzwvZmlsZW5hbWU+KTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cucGVyZm9yY2UuY29tLyc+UGVyZm9yY2U8L3VsaW5rPgotICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGlzIHNwZWNpZmllZCBieQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9wNDwvZmlsZW5hbWU+LCB3aGljaCBkZWZhdWx0cwotICAgICAgICAgICAgICAgIHRvICJwNCIuCi0gICAgICAgICAgICAgICAgVGhlIGZldGNoZXIncyB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgaXMgc2V0IGJ5Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVA0RElSJz48ZmlsZW5hbWU+UDRESVI8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgd2hpY2ggZGVmYXVsdHMgdG8gIkRMX0RJUi9wNCIuCi0gICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgZG9lcyBub3QgbWFrZSB1c2Ugb2YgYSBwZXJmb3JjZSBjbGllbnQsIGluc3RlYWQgaXQKLSAgICAgICAgICAgICAgICByZWxpZXMgb24gPGZpbGVuYW1lPnA0IGZpbGVzPC9maWxlbmFtZT4gdG8gcmV0cmlldmUgYSBsaXN0IG9mCi0gICAgICAgICAgICAgICAgZmlsZXMgYW5kIDxmaWxlbmFtZT5wNCBwcmludDwvZmlsZW5hbWU+IHRvIHRyYW5zZmVyIHRoZSBjb250ZW50Ci0gICAgICAgICAgICAgICAgb2YgdGhvc2UgZmlsZXMgbG9jYWxseS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVG8gdXNlIHRoaXMgZmV0Y2hlciwgbWFrZSBzdXJlIHlvdXIgcmVjaXBlIGhhcyBwcm9wZXIKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4gdmFsdWVzLgotICAgICAgICAgICAgICAgIFRoZSBwNCBleGVjdXRhYmxlIGlzIGFibGUgdG8gdXNlIHRoZSBjb25maWcgZmlsZSBkZWZpbmVkIGJ5IHlvdXIKLSAgICAgICAgICAgICAgICBzeXN0ZW0ncyA8ZmlsZW5hbWU+UDRDT05GSUc8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbgotICAgICAgICAgICAgICAgIG9yZGVyIHRvIGRlZmluZSB0aGUgUGVyZm9yY2Ugc2VydmVyIFVSTCBhbmQgcG9ydCwgdXNlcm5hbWUsIGFuZAotICAgICAgICAgICAgICAgIHBhc3N3b3JkIGlmIHlvdSBkbyBub3Qgd2lzaCB0byBrZWVwIHRob3NlIHZhbHVlcyBpbiBhIHJlY2lwZQotICAgICAgICAgICAgICAgIGl0c2VsZi4KLSAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIG5vdCB0byB1c2UgPGZpbGVuYW1lPlA0Q09ORklHPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgb3IgdG8gZXhwbGljaXRseSBzZXQgdmFyaWFibGVzIHRoYXQgPGZpbGVuYW1lPlA0Q09ORklHPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjYW4gY29udGFpbiwgeW91IGNhbiBzcGVjaWZ5IHRoZSA8ZmlsZW5hbWU+UDRQT1JUPC9maWxlbmFtZT4gdmFsdWUsCi0gICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIHNlcnZlcidzIFVSTCBhbmQgcG9ydCBudW1iZXIsIGFuZCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgc3BlY2lmeSBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBkaXJlY3RseSBpbiB5b3VyIHJlY2lwZSB3aXRoaW4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCByZWxpZXMgb24gPGZpbGVuYW1lPlA0Q09ORklHPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB0byBzcGVjaWZ5IHRoZSBzZXJ2ZXIgVVJMIGFuZCBwb3J0LCB1c2VybmFtZSwgYW5kIHBhc3N3b3JkLCBhbmQKLSAgICAgICAgICAgICAgICBmZXRjaGVzIHRoZSBIZWFkIFJldmlzaW9uOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICBTUkNfVVJJID0gInA0Oi8vZXhhbXBsZS1kZXBvdC9tYWluL3NvdXJjZS8uLi4iCi0gICAgU1JDUkVWID0gIiR7QVVUT1JFVn0iCi0gICAgUFYgPSAicDQtJHtTUkNQVn0iCi0gICAgUyA9ICIke1dPUktESVJ9L3A0IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc3BlY2lmaWVzIHRoZSBzZXJ2ZXIgVVJMIGFuZCBwb3J0LAotICAgICAgICAgICAgICAgIHVzZXJuYW1lLCBhbmQgcGFzc3dvcmQsIGFuZCBmZXRjaGVzIGEgUmV2aXNpb24gYmFzZWQgb24gYSBMYWJlbDoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgUDRQT1JUID0gInRjcDpwNHNlcnZlci5leGFtcGxlLm5ldDoxNjY2IgotICAgIFNSQ19VUkkgPSAicDQ6Ly91c2VyOnBhc3N3ZEBleGFtcGxlLWRlcG90L21haW4vc291cmNlLy4uLiIKLSAgICBTUkNSRVYgPSAicmVsZWFzZS0xLjAiCi0gICAgUFYgPSAicDQtJHtTUkNQVn0iCi0gICAgUyA9ICIke1dPUktESVJ9L3A0IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgc2V0IDxmaWxlbmFtZT5TPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiIke1dPUktESVJ9L3A0IjwvZmlsZW5hbWU+IGluIHlvdXIgcmVjaXBlLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGZldGNoZXIgc3RyaXBzIHRoZSBkZXBvdCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICAgICAgICAgICAgIGxvY2FsIGZpbGUgcGF0aHMuIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgY29udGVudCBvZgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leGFtcGxlLWRlcG90L21haW4vc291cmNlLzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgd2lsbCBiZSBwbGFjZWQgaW4gPGZpbGVuYW1lPiR7V09SS0RJUn0vcDQ8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBGb3Igc2l0dWF0aW9ucyB3aGVyZSBwcmVzZXJ2aW5nIHBhcnRzIG9mIHRoZSByZW1vdGUgZGVwb3QgcGF0aHMKLSAgICAgICAgICAgICAgICBsb2NhbGx5IGlzIGRlc2lyYWJsZSwgdGhlIGZldGNoZXIgc3VwcG9ydHMgdHdvIHBhcmFtZXRlcnM6Ci0KLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Im1vZHVsZSI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgZGVwb3QgbG9jYXRpb24gb3IgZGlyZWN0b3J5IHRvIGZldGNoLiBUaGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGNhbiBhbHNvIHBvaW50IHRvIGEgc2luZ2xlIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgZGVwb3QsIGluIHdoaWNoIGNhc2UgdGhlIGxvY2FsIGZpbGUgcGF0aCB3aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBtb2R1bGUgcGF0aC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4icmVtb3RlcGF0aCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCB3aXRoIHRoZSB2YWx1ZSAiPGZpbGVuYW1lPmtlZXA8L2ZpbGVuYW1lPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmV0Y2hlciB3aWxsIG1pcnJvciB0aGUgZnVsbCBkZXBvdCBwYXRocyBsb2NhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiwgZXZlbiBpbiBjb21iaW5hdGlvbiB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IHBhcmFtZXRlci4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2Ugb2YgdGhlIHRoZSA8ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXI6Ci0KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgU1JDX1VSSSA9ICJwNDovL3VzZXI6cGFzc3dkQGV4YW1wbGUtZGVwb3QvbWFpbjttb2R1bGU9c291cmNlLy4uLiIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0KLSAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjb250ZW50IG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvdXJjZS88L2ZpbGVuYW1lPiAgd2lsbCBiZSBmZXRjaGVkIHRvCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UDRESVJ9PC9maWxlbmFtZT4sIGluY2x1ZGluZyB0aGUgZGlyZWN0b3J5IGl0c2VsZi4KLSAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIGRpcmVjdG9yeSB3aWxsIGJlIGFjY2VzaWJsZSBhdAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1A0RElSfS9zb3VyY2UvPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2Ugb2YgdGhlIHRoZSA8ZmlsZW5hbWU+cmVtb3RlcGF0aDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyOgotCi0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgIFNSQ19VUkkgPSAicDQ6Ly91c2VyOnBhc3N3ZEBleGFtcGxlLWRlcG90L21haW47bW9kdWxlPXNvdXJjZS8uLi47cmVtb3RlcGF0aD1rZWVwIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLQotICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvbnRlbnQgb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlLzwvZmlsZW5hbWU+ICB3aWxsIGJlIGZldGNoZWQgdG8KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQNERJUn08L2ZpbGVuYW1lPiwgYnV0IHRoZSBjb21wbGV0ZSBkZXBvdCBwYXRocyB3aWxsCi0gICAgICAgICAgICAgICAgYmUgbWlycm9yZWQgbG9jYWxseS4gVGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgd2lsbCBiZSBhY2Nlc3NpYmxlCi0gICAgICAgICAgICAgICAgYXQgPGZpbGVuYW1lPiR7UDRESVJ9L2V4YW1wbGUtZGVwb3QvbWFpbi9zb3VyY2UvPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ncmVwby1mZXRjaGVyJz4KLSAgICAgICAgICAgIDx0aXRsZT5SZXBvIEZldGNoZXIgKDxmaWxlbmFtZT5yZXBvOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBmZXRjaGVzIGNvZGUgZnJvbQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nb29nbGUtcmVwbzwvZmlsZW5hbWU+IHNvdXJjZSBjb250cm9sIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlciB3b3JrcyBieSBpbml0aWF0aW5nIGFuZCBzeW5jaW5nIHNvdXJjZXMgb2YgdGhlCi0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbnRvCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVJFUE9ESVInPjxmaWxlbmFtZT5SRVBPRElSPC9maWxlbmFtZT48L2xpbms+LAotICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPi9yZXBvPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPiJwcm90b2NvbCI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIHRvIGZldGNoIHRoZSByZXBvc2l0b3J5IG1hbmlmZXN0IChkZWZhdWx0OiBnaXQpLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4iYnJhbmNoIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoIG9yIHRhZyBvZiByZXBvc2l0b3J5IHRvIGdldCAoZGVmYXVsdDogbWFzdGVyKS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Im1hbmlmZXN0Ijo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSBvZiB0aGUgbWFuaWZlc3QgZmlsZSAoZGVmYXVsdDogPGZpbGVuYW1lPmRlZmF1bHQueG1sPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlIFVSTHM6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgIFNSQ19VUkkgPSAicmVwbzovL1JFUE9ST09UO3Byb3RvY29sPWdpdDticmFuY2g9c29tZV9icmFuY2g7bWFuaWZlc3Q9bXlfbWFuaWZlc3QueG1sIgotICAgIFNSQ19VUkkgPSAicmVwbzovL1JFUE9ST09UO3Byb3RvY29sPWZpbGU7YnJhbmNoPXNvbWVfYnJhbmNoO21hbmlmZXN0PW15X21hbmlmZXN0LnhtbCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItZmV0Y2hlcnMnPgotICAgICAgICAgICAgPHRpdGxlPk90aGVyIEZldGNoZXJzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRmV0Y2ggc3VibW9kdWxlcyBhbHNvIGV4aXN0IGZvciB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJhemFhciAoPGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIE1lcmN1cmlhbCAoPGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgbnBtICg8ZmlsZW5hbWU+bnBtOi8vPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgT1NDICg8ZmlsZW5hbWU+b3NjOi8vPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgU2VjdXJlIEZUUCAoPGZpbGVuYW1lPnNmdHA6Ly88L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZWN1cmUgU2hlbGwgKDxmaWxlbmFtZT5zc2g6Ly88L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUcmVlcyB1c2luZyBHaXQgQW5uZXggKDxmaWxlbmFtZT5naXRhbm5leDovLzwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgTm8gZG9jdW1lbnRhdGlvbiBjdXJyZW50bHkgZXhpc3RzIGZvciB0aGVzZSBsZXNzZXIgdXNlZAotICAgICAgICAgICAgICAgIGZldGNoZXIgc3VibW9kdWxlcy4KLSAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgZmluZCB0aGUgY29kZSBoZWxwZnVsIGFuZCByZWFkYWJsZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdhdXRvLXJldmlzaW9ucyc+Ci0gICAgICAgIDx0aXRsZT5BdXRvIFJldmlzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXZSBuZWVkIHRvIGRvY3VtZW50IDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IGhlcmUuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWIzNmEuLjAwMDAwMDAKLS0tIGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEzICswLDAgQEAKLTwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKLSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgotCi08YXBwZW5kaXggaWQ9J2hlbGxvLXdvcmxkLWV4YW1wbGUnPgotICAgIDx0aXRsZT5IZWxsbyBXb3JsZCBFeGFtcGxlPC90aXRsZT4KLQotICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLWhlbGxvLXdvcmxkJz4KLSAgICAgICAgPHRpdGxlPkJpdEJha2UgSGVsbG8gV29ybGQ8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIHNpbXBsZXN0IGV4YW1wbGUgY29tbW9ubHkgdXNlZCB0byBkZW1vbnN0cmF0ZSBhbnkgbmV3Ci0gICAgICAgICAgICBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciB0b29sIGlzIHRoZQotICAgICAgICAgICAgIjx1bGluayB1cmw9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVsbG9fd29ybGRfcHJvZ3JhbSI+SGVsbG8gV29ybGQ8L3VsaW5rPiIKLSAgICAgICAgICAgIGV4YW1wbGUuCi0gICAgICAgICAgICBUaGlzIGFwcGVuZGl4IGRlbW9uc3RyYXRlcywgaW4gdHV0b3JpYWwgZm9ybSwgSGVsbG8KLSAgICAgICAgICAgIFdvcmxkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBCaXRCYWtlLgotICAgICAgICAgICAgVGhlIHR1dG9yaWFsIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIGEgbmV3IHByb2plY3QKLSAgICAgICAgICAgIGFuZCB0aGUgYXBwbGljYWJsZSBtZXRhZGF0YSBmaWxlcyBuZWNlc3NhcnkgdG8gYWxsb3cKLSAgICAgICAgICAgIEJpdEJha2UgdG8gYnVpbGQgaXQuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nZXhhbXBsZS1vYnRhaW5pbmctYml0YmFrZSc+Ci0gICAgICAgIDx0aXRsZT5PYnRhaW5pbmcgQml0QmFrZTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nb2J0YWluaW5nLWJpdGJha2UnPk9idGFpbmluZyBCaXRCYWtlPC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gQml0QmFrZS4KLSAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIHNvdXJjZSBjb2RlIG9uIHlvdXIgbWFjaGluZSwgdGhlIEJpdEJha2UgZGlyZWN0b3J5Ci0gICAgICAgICAgICBhcHBlYXJzIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgbHMgLWFsCi0gICAgIHRvdGFsIDEwMAotICAgICBkcnd4cnd4ci14LiA5IHdtYXQgd21hdCAgNDA5NiBKYW4gMzEgMTM6NDQgLgotICAgICBkcnd4cnd4ci14LiAzIHdtYXQgd21hdCAgNDA5NiBGZWIgIDQgMTA6NDUgLi4KLSAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICAzNjUgTm92IDI2IDA0OjU1IEFVVEhPUlMKLSAgICAgZHJ3eHJ3eHIteC4gMiB3bWF0IHdtYXQgIDQwOTYgTm92IDI2IDA0OjU1IGJpbgotICAgICBkcnd4cnd4ci14LiA0IHdtYXQgd21hdCAgNDA5NiBKYW4gMzEgMTM6NDQgYnVpbGQKLSAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgMTY1MDEgTm92IDI2IDA0OjU1IENoYW5nZUxvZwotICAgICBkcnd4cnd4ci14LiAyIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgY2xhc3NlcwotICAgICBkcnd4cnd4ci14LiAyIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgY29uZgotICAgICBkcnd4cnd4ci14LiAzIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgY29udHJpYgotICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAxNzk4NyBOb3YgMjYgMDQ6NTUgQ09QWUlORwotICAgICBkcnd4cnd4ci14LiAzIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgZG9jCi0gICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgIDY5IE5vdiAyNiAwNDo1NSAuZ2l0aWdub3JlCi0gICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgODQ5IE5vdiAyNiAwNDo1NSBIRUFERVIKLSAgICAgZHJ3eHJ3eHIteC4gNSB3bWF0IHdtYXQgIDQwOTYgSmFuIDMxIDEzOjQ0IGxpYgotICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgIDE5NSBOb3YgMjYgMDQ6NTUgTUFOSUZFU1QuaW4KLSAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgIDI4ODcgTm92IDI2IDA0OjU1IFRPRE8KLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IHNob3VsZCBoYXZlIEJpdEJha2UgY2xvbmVkIHRvCi0gICAgICAgICAgICBhIGRpcmVjdG9yeSB0aGF0IG1hdGNoZXMgdGhlIHByZXZpb3VzIGxpc3RpbmcgZXhjZXB0IGZvcgotICAgICAgICAgICAgZGF0ZXMgYW5kIHVzZXIgbmFtZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtYml0YmFrZS1lbnZpcm9ubWVudCc+Ci0gICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBCaXRCYWtlIEVudmlyb25tZW50PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZpcnN0LCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgeW91IGNhbiBydW4gQml0QmFrZS4KLSAgICAgICAgICAgIFNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHdoZXJlIHlvdXIgbG9jYWwgQml0QmFrZQotICAgICAgICAgICAgZmlsZXMgYXJlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIC4vYmluL2JpdGJha2UgLS12ZXJzaW9uCi0gICAgIEJpdEJha2UgQnVpbGQgVG9vbCBDb3JlIHZlcnNpb24gMS4yMy4wLCBiaXRiYWtlIHZlcnNpb24gMS4yMy4wCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGUgY29uc29sZSBvdXRwdXQgdGVsbHMgeW91IHdoYXQgdmVyc2lvbiB5b3UgYXJlIHJ1bm5pbmcuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgdG8gcnVuIEJpdEJha2UgaXMgZnJvbSBhIGRpcmVjdG9yeSBvZiB5b3VyCi0gICAgICAgICAgICBjaG9pY2UuCi0gICAgICAgICAgICBUbyBiZSBhYmxlIHRvIHJ1biBCaXRCYWtlIGZyb20gYW55IGRpcmVjdG9yeSwgeW91IG5lZWQgdG8gYWRkIHRoZQotICAgICAgICAgICAgZXhlY3V0YWJsZSBiaW5hcnkgdG8geW91ciBiaW5hcnkgdG8geW91ciBzaGVsbCdzIGVudmlyb25tZW50Ci0gICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgotICAgICAgICAgICAgRmlyc3QsIGxvb2sgYXQgeW91ciBjdXJyZW50IDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUKLSAgICAgICAgICAgIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZWNobyAkUEFUSAotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgTmV4dCwgYWRkIHRoZSBkaXJlY3RvcnkgbG9jYXRpb24gZm9yIHRoZSBCaXRCYWtlIGJpbmFyeSB0byB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4uCi0gICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhZGRzIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjwvZmlsZW5hbWU+IGRpcmVjdG9yeQotICAgICAgICAgICAgdG8gdGhlIGZyb250IG9mIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGV4cG9ydCBQQVRIPS9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjokUEFUSAotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgWW91IHNob3VsZCBub3cgYmUgYWJsZSB0byBlbnRlciB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgotICAgICAgICAgICAgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgd29ya2luZyBmcm9tIGFueSBkaXJlY3RvcnkuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ndGhlLWhlbGxvLXdvcmxkLWV4YW1wbGUnPgotICAgICAgICA8dGl0bGU+VGhlIEhlbGxvIFdvcmxkIEV4YW1wbGU8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIG92ZXJhbGwgZ29hbCBvZiB0aGlzIGV4ZXJjaXNlIGlzIHRvIGJ1aWxkIGEKLSAgICAgICAgICAgIGNvbXBsZXRlICJIZWxsbyBXb3JsZCIgZXhhbXBsZSB1dGlsaXppbmcgdGFzayBhbmQgbGF5ZXIKLSAgICAgICAgICAgIGNvbmNlcHRzLgotICAgICAgICAgICAgQmVjYXVzZSB0aGlzIGlzIGhvdyBtb2Rlcm4gcHJvamVjdHMgc3VjaCBhcyBPcGVuRW1iZWRkZWQgYW5kCi0gICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCB1dGlsaXplIEJpdEJha2UsIHRoZSBleGFtcGxlCi0gICAgICAgICAgICBwcm92aWRlcyBhbiBleGNlbGxlbnQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcKLSAgICAgICAgICAgIEJpdEJha2UuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHRvIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRhcmdldHMsCi0gICAgICAgICAgICB0aGUgZXhhbXBsZSBzdGFydHMgd2l0aCBub3RoaW5nIGJ1dCB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgotICAgICAgICAgICAgY29tbWFuZCwgd2hpY2ggY2F1c2VzIEJpdEJha2UgdG8gZmFpbCBhbmQgcmVwb3J0IHByb2JsZW1zLgotICAgICAgICAgICAgVGhlIGV4YW1wbGUgcHJvZ3Jlc3NlcyBieSBhZGRpbmcgcGllY2VzIHRvIHRoZSBidWlsZCB0bwotICAgICAgICAgICAgZXZlbnR1YWxseSBjb25jbHVkZSB3aXRoIGEgd29ya2luZywgbWluaW1hbCAiSGVsbG8gV29ybGQiCi0gICAgICAgICAgICBleGFtcGxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGlsZSBldmVyeSBhdHRlbXB0IGlzIG1hZGUgdG8gZXhwbGFpbiB3aGF0IGlzIGhhcHBlbmluZyBkdXJpbmcKLSAgICAgICAgICAgIHRoZSBleGFtcGxlLCB0aGUgZGVzY3JpcHRpb25zIGNhbm5vdCBjb3ZlciBldmVyeXRoaW5nLgotICAgICAgICAgICAgWW91IGNhbiBmaW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGlzIG1hbnVhbC4KLSAgICAgICAgICAgIEFsc28sIHlvdSBjYW4gYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPjwvdWxpbms+Ci0gICAgICAgICAgICBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCB0aGUgQml0QmFrZSBidWlsZCB0b29sLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICBUaGlzIGV4YW1wbGUgd2FzIGluc3BpcmVkIGJ5IGFuZCBkcmV3IGhlYXZpbHkgZnJvbQotICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3lvY3RvQHlvY3RvcHJvamVjdC5vcmcvbXNnMDkzNzkuaHRtbCI+TWFpbGluZyBMaXN0IHBvc3QgLSBUaGUgQml0QmFrZSBlcXVpdmFsZW50IG9mICJIZWxsbywgV29ybGQhIjwvdWxpbms+LgotICAgICAgICA8L25vdGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBcyBzdGF0ZWQgZWFybGllciwgdGhlIGdvYWwgb2YgdGhpcyBleGFtcGxlCi0gICAgICAgICAgICBpcyB0byBldmVudHVhbGx5IGNvbXBpbGUgIkhlbGxvIFdvcmxkIi4KLSAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIHVua25vd24gd2hhdCBCaXRCYWtlIG5lZWRzIGFuZCB3aGF0IHlvdSBoYXZlCi0gICAgICAgICAgICB0byBwcm92aWRlIGluIG9yZGVyIHRvIGFjaGlldmUgdGhhdCBnb2FsLgotICAgICAgICAgICAgUmVjYWxsIHRoYXQgQml0QmFrZSB1dGlsaXplcyB0aHJlZSB0eXBlcyBvZiBtZXRhZGF0YSBmaWxlczoKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NvbmZpZ3VyYXRpb24tZmlsZXMnPkNvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+LAotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz4sIGFuZAotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVjaXBlcyc+UmVjaXBlczwvbGluaz4uCi0gICAgICAgICAgICBCdXQgd2hlcmUgZG8gdGhleSBnbz8KLSAgICAgICAgICAgIEhvdyBkb2VzIEJpdEJha2UgZmluZCB0aGVtPwotICAgICAgICAgICAgQml0QmFrZSdzIGVycm9yIG1lc3NhZ2luZyBoZWxwcyB5b3UgYW5zd2VyIHRoZXNlIHR5cGVzIG9mIHF1ZXN0aW9ucwotICAgICAgICAgICAgYW5kIGhlbHBzIHlvdSBiZXR0ZXIgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXMgZ29pbmcgb24uCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgY29tcGxldGUgIkhlbGxvIFdvcmxkIiBleGFtcGxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBQcm9qZWN0IERpcmVjdG9yeTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIEZpcnN0LCBzZXQgdXAgYSBkaXJlY3RvcnkgZm9yIHRoZSAiSGVsbG8gV29ybGQiIHByb2plY3QuCi0gICAgICAgICAgICAgICAgSGVyZSBpcyBob3cgeW91IGNhbiBkbyBzbyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBta2RpciB+L2hlbGxvCi0gICAgICQgY2Qgfi9oZWxsbwotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdGhhdCBCaXRCYWtlIHdpbGwgdXNlIHRvIGRvIGFsbCBvZgotICAgICAgICAgICAgICAgIGl0cyB3b3JrLgotICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgZGlyZWN0b3J5IHRvIGtlZXAgYWxsIHRoZSBtZXRhZmlsZXMgbmVlZGVkCi0gICAgICAgICAgICAgICAgYnkgQml0QmFrZS4KLSAgICAgICAgICAgICAgICBIYXZpbmcgYSBwcm9qZWN0IGRpcmVjdG9yeSBpcyBhIGdvb2Qgd2F5IHRvIGlzb2xhdGUgeW91cgotICAgICAgICAgICAgICAgIHByb2plY3QuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRCYWtlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IGhhdmUgbm90aGluZyBidXQgYSBwcm9qZWN0IGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBSdW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgc2VlIHdoYXQKLSAgICAgICAgICAgICAgICBpdCBkb2VzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlCi0gICAgIFRoZSBCQlBBVEggdmFyaWFibGUgaXMgbm90IHNldCBhbmQgYml0YmFrZSBkaWQgbm90Ci0gICAgIGZpbmQgYSBjb25mL2JibGF5ZXJzLmNvbmYgZmlsZSBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uCi0gICAgIE1heWJlIHlvdSBhY2NpZGVudGFsbHkgaW52b2tlZCBiaXRiYWtlIGZyb20gdGhlIHdyb25nIGRpcmVjdG9yeT8KLSAgICAgREVCVUc6IFJlbW92ZWQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQ6Ci0gICAgIEdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCwgWERHX0NVUlJFTlRfREVTS1RPUCwKLSAgICAgR05PTUVfS0VZUklOR19DT05UUk9MLCBESVNQTEFZLCBTU0hfQUdFTlRfUElELCBMQU5HLCBub19wcm94eSwKLSAgICAgWERHX1NFU1NJT05fUEFUSCwgWEFVVEhPUklUWSwgU0VTU0lPTl9NQU5BR0VSLCBTSExWTCwKLSAgICAgTUFOREFUT1JZX1BBVEgsIENPTVBJWl9DT05GSUdfUFJPRklMRSwgV0lORE9XSUQsIEVESVRPUiwKLSAgICAgR1BHX0FHRU5UX0lORk8sIFNTSF9BVVRIX1NPQ0ssIEdETVNFU1NJT04sIEdOT01FX0tFWVJJTkdfUElELAotICAgICBYREdfU0VBVF9QQVRILCBYREdfQ09ORklHX0RJUlMsIExFU1NPUEVOLCBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MsCi0gICAgIF8sIFhER19TRVNTSU9OX0NPT0tJRSwgREVTS1RPUF9TRVNTSU9OLCBMRVNTQ0xPU0UsIERFRkFVTFRTX1BBVEgsCi0gICAgIFVCVU5UVV9NRU5VUFJPWFksIE9MRFBXRCwgWERHX0RBVEFfRElSUywgQ09MT1JURVJNLCBMU19DT0xPUlMKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIG1ham9yaXR5IG9mIHRoaXMgb3V0cHV0IGlzIHNwZWNpZmljIHRvIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgICAgICAgICAgIHRoYXQgYXJlIG5vdCBkaXJlY3RseSByZWxldmFudCB0byBCaXRCYWtlLgotICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSB2ZXJ5IGZpcnN0IG1lc3NhZ2UgcmVnYXJkaW5nIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUKLSAgICAgICAgICAgICAgICBpcyByZWxldmFudC48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2hlbiB5b3UgcnVuIEJpdEJha2UsIGl0IGJlZ2lucyBsb29raW5nIGZvciBtZXRhZGF0YSBmaWxlcy4KLSAgICAgICAgICAgICAgICBUaGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgd2hhdCB0ZWxscyBCaXRCYWtlIHdoZXJlIHRvIGxvb2sgZm9yIHRob3NlIGZpbGVzLgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpcyBub3Qgc2V0IGFuZCB5b3UgbmVlZCB0byBzZXQgaXQuCi0gICAgICAgICAgICAgICAgV2l0aG91dCA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4sIEJpdEJha2UgY2Fubm90Ci0gICAgICAgICAgICAgICAgZmluZCBhbnkgY29uZmlndXJhdGlvbiBmaWxlcyAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgb3IgcmVjaXBlIGZpbGVzICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGF0IGFsbC4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIGFsc28gY2Fubm90IGZpbmQgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGZpbGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldHRpbmcgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwgeW91IGNhbiBzZXQgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgbWFubmVyIHRoYXQgeW91IHNldCA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZWFybGllciBpbiB0aGUgYXBwZW5kaXguCi0gICAgICAgICAgICAgICAgWW91IHNob3VsZCByZWFsaXplLCB0aG91Z2gsIHRoYXQgaXQgaXMgbXVjaCBtb3JlIGZsZXhpYmxlIHRvIHNldCB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdXAgaW4gYSBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgZmlsZSBmb3IgZWFjaCBwcm9qZWN0LjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5Gcm9tIHlvdXIgc2hlbGwsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gc2V0IGFuZAotICAgICAgICAgICAgICAgIGV4cG9ydCB0aGUgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBCQlBBVEg9IjxyZXBsYWNlYWJsZT5wcm9qZWN0ZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4iCi0gICAgICQgZXhwb3J0IEJCUEFUSAotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBVc2UgeW91ciBhY3R1YWwgcHJvamVjdCBkaXJlY3RvcnkgaW4gdGhlIGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoYXQgZGlyZWN0b3J5IHRvIGZpbmQgdGhlIG1ldGFkYXRhIGl0IG5lZWRzIGZvcgotICAgICAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHlvdXIgcHJvamVjdCBkaXJlY3RvcnksIGRvIG5vdCB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIHRpbGRlICgifiIpIGNoYXJhY3RlciBhcyBCaXRCYWtlIGRvZXMgbm90IGV4cGFuZCB0aGF0IGNoYXJhY3RlcgotICAgICAgICAgICAgICAgICAgICBhcyB0aGUgc2hlbGwgd291bGQuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0QmFrZTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBkZWZpbmVkLCBydW4KLSAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFnYWluOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlCi0gICAgIEVSUk9SOiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE2MywgaW4gd3JhcHBlZAotICAgICAgICAgcmV0dXJuIGZ1bmMoZm4sICphcmdzKQotICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNzMsIGluIHBhcnNlX2NvbmZpZ19maWxlCi0gICAgICAgICByZXR1cm4gYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBpbmNsdWRlKQotICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9fX2luaXRfXy5weSIsIGxpbmUgOTksIGluIGhhbmRsZQotICAgICAgICAgcmV0dXJuIGhbJ2hhbmRsZSddKGZuLCBkYXRhLCBpbmNsdWRlKQotICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSIsIGxpbmUgMTIwLCBpbiBoYW5kbGUKLSAgICAgICAgIGFic19mbiA9IHJlc29sdmVfZmlsZShmbiwgZGF0YSkKLSAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkiLCBsaW5lIDExNywgaW4gcmVzb2x2ZV9maWxlCi0gICAgICAgICByYWlzZSBJT0Vycm9yKCJmaWxlICVzIG5vdCBmb3VuZCBpbiAlcyIgJSAoZm4sIGJicGF0aCkpCi0gICAgIElPRXJyb3I6IGZpbGUgY29uZi9iaXRiYWtlLmNvbmYgbm90IGZvdW5kIGluIC9ob21lL3Njb3R0LWxlbm92by9oZWxsbwotCi0gICAgIEVSUk9SOiBVbmFibGUgdG8gcGFyc2UgY29uZi9iaXRiYWtlLmNvbmY6IGZpbGUgY29uZi9iaXRiYWtlLmNvbmYgbm90IGZvdW5kIGluIC9ob21lL3Njb3R0LWxlbm92by9oZWxsbwotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGlzIHNhbXBsZSBvdXRwdXQgc2hvd3MgdGhhdCBCaXRCYWtlIGNvdWxkIG5vdCBmaW5kIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlIHByb2plY3QKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHRoZSBmaXJzdCB0aGluZyBCaXRCYWtlIG11c3QgZmluZCBpbiBvcmRlcgotICAgICAgICAgICAgICAgIHRvIGJ1aWxkIGEgdGFyZ2V0LgotICAgICAgICAgICAgICAgIEFuZCwgc2luY2UgdGhlIHByb2plY3QgZGlyZWN0b3J5IGZvciB0aGlzIGV4YW1wbGUgaXMKLSAgICAgICAgICAgICAgICBlbXB0eSwgeW91IG5lZWQgdG8gcHJvdmlkZSBhIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZmlsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRpbmcgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gaW5jbHVkZXMgYSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBCaXRCYWtlIHVzZXMgZm9yIG1ldGFkYXRhIGFuZCByZWNpcGUKLSAgICAgICAgICAgICAgICBmaWxlcy4KLSAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB5b3UgbmVlZCB0byBjcmVhdGUgdGhlIGZpbGUgaW4geW91ciBwcm9qZWN0IGRpcmVjdG9yeQotICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgc29tZSBrZXkgQml0QmFrZSB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAotICAgICAgICAgICAgICAgIHNlZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3RyZWUvY29uZi9iaXRiYWtlLmNvbmYnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5Vc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBta2RpciBjb25mCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEZyb20gd2l0aGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgdXNlCi0gICAgICAgICAgICAgICAgc29tZSBlZGl0b3IgdG8gY3JlYXRlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBzbyB0aGF0IGl0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUE4nPlBOPC9saW5rPiAgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzBdIG9yICdkZWZhdWx0cGtnbmFtZSd9IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFRNUERJUiAgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItYmItVE9QRElSJz5UT1BESVI8L2xpbms+fS90bXAiCi0gICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1DQUNIRSc+Q0FDSEU8L2xpbms+ICAgPSAiJHtUTVBESVJ9L2NhY2hlIgotICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItU1RBTVAnPlNUQU1QPC9saW5rPiAgID0gIiR7VE1QRElSfS8ke1BOfS9zdGFtcHMiCi0gICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1UJz5UPC9saW5rPiAgICAgICA9ICIke1RNUERJUn0vJHtQTn0vd29yayIKLSAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUInPkI8L2xpbms+ICAgICAgID0gIiR7VE1QRElSfS8ke1BOfSIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgYSB2YWx1ZSBmb3IgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4sIHRoZQotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgPGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UPC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICBwcmV2ZW50IG1vcmUgdGhhbiBvbmUgcmVjaXBlIGZyb20gd29ya2luZy4gWW91IGNhbiBmaXgKLSAgICAgICAgICAgICAgICAgICAgdGhpcyBieSBlaXRoZXIgc2V0dGluZyA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiB0byBoYXZlCi0gICAgICAgICAgICAgICAgICAgIGEgdmFsdWUgc2ltaWxhciB0byB3aGF0IE9wZW5FbWJlZGRlZCBhbmQgQml0QmFrZSB1c2UKLSAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRlZmF1bHQgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUKLSAgICAgICAgICAgICAgICAgICAgKHNlZSBwcmV2aW91cyBleGFtcGxlKS4gT3IsIGJ5IG1hbnVhbGx5IHVwZGF0aW5nIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHNldCA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPi4gWW91IHdpbGwgYWxzbwotICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGluY2x1ZGUgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gYXMgcGFydCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5UPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IHZhcmlhYmxlIGRlZmluaXRpb25zIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gdmFyaWFibGUgZXN0YWJsaXNoZXMgYSBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICB0aGF0IEJpdEJha2UgdXNlcyBmb3IgYnVpbGQgb3V0cHV0IGFuZCBpbnRlcm1lZGlhdGUgZmlsZXMgb3RoZXIKLSAgICAgICAgICAgICAgICB0aGFuIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzZXRzY2VuZSc+U2V0c2NlbmU8L2xpbms+IHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgSGVyZSwgdGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgc2V0IHRvCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvL3RtcDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsd2F5cyBzYWZlbHkgZGVsZXRlIHRoZSA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIG9yZGVyIHRvIHJlYnVpbGQgYSBCaXRCYWtlIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IGZvciB5b3UKLSAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgcnVuIEJpdEJha2UuCi0gICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvZiB0aGUgb3RoZXIgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhpcwotICAgICAgICAgICAgICAgIGV4YW1wbGUsIGNsaWNrIG9uIHRoZSBsaW5rcyB0byB0YWtlIHlvdSB0byB0aGUgZGVmaW5pdGlvbnMgaW4KLSAgICAgICAgICAgICAgICB0aGUgZ2xvc3NhcnkuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRCYWtlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBmaWxlIGV4aXN0cywgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjb21tYW5kIGFnYWluOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlCi0gICAgIEVSUk9SOiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE2MywgaW4gd3JhcHBlZAotICAgICAgICAgcmV0dXJuIGZ1bmMoZm4sICphcmdzKQotICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNzcsIGluIF9pbmhlcml0Ci0gICAgICAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChiYmNsYXNzLCAiY29uZmlndXJhdGlvbiBJTkhFUklUcyIsIDAsIGRhdGEpCi0gICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weSIsIGxpbmUgOTIsIGluIGluaGVyaXQKLSAgICAgICAgIGluY2x1ZGUoZm4sIGZpbGUsIGxpbmVubywgZCwgImluaGVyaXQiKQotICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSIsIGxpbmUgMTAwLCBpbiBpbmNsdWRlCi0gICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJDb3VsZCBub3QgJShlcnJvcl9vdXQpcyBmaWxlICUoZm4pcyIgJSB2YXJzKCksIG9sZGZuLCBsaW5lbm8pCi0gICAgIFBhcnNlRXJyb3I6IFBhcnNlRXJyb3IgaW4gY29uZmlndXJhdGlvbiBJTkhFUklUczogQ291bGQgbm90IGluaGVyaXQgZmlsZSBjbGFzc2VzL2Jhc2UuYmJjbGFzcwotCi0gICAgIEVSUk9SOiBVbmFibGUgdG8gcGFyc2UgYmFzZTogUGFyc2VFcnJvciBpbiBjb25maWd1cmF0aW9uIElOSEVSSVRzOiBDb3VsZCBub3QgaW5oZXJpdCBmaWxlIGNsYXNzZXMvYmFzZS5iYmNsYXNzCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEluIHRoZSBzYW1wbGUgb3V0cHV0LCBCaXRCYWtlIGNvdWxkIG5vdCBmaW5kIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIHRoYXQgZmlsZSBuZXh0LgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyBjbGFzcyBmaWxlcyB0byBwcm92aWRlIGNvbW1vbiBjb2RlIGFuZCBmdW5jdGlvbmFsaXR5LgotICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsbHkgcmVxdWlyZWQgY2xhc3MgZm9yIEJpdEJha2UgaXMgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvYmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbXBsaWNpdGx5IGluaGVyaXRlZCBieQotICAgICAgICAgICAgICAgIGV2ZXJ5IHJlY2lwZS4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIGxvb2tzIGZvciB0aGUgY2xhc3MgaW4gdGhlIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QgKGkuZSA8ZmlsZW5hbWU+aGVsbG8vY2xhc3NlczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgaW4gdGhpcyBleGFtcGxlKS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Q3JlYXRlIHRoZSA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBjZCAkSE9NRS9oZWxsbwotICAgICAkIG1rZGlyIGNsYXNzZXMKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgTW92ZSB0byB0aGUgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGJ5IGluc2VydGluZwotICAgICAgICAgICAgICAgIHRoaXMgc2luZ2xlIGxpbmU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBhZGR0YXNrIGJ1aWxkCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIHRhc2sgdGhhdCBCaXRCYWtlIHJ1bnMgaXMgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzay4KLSAgICAgICAgICAgICAgICBUaGlzIGlzIGFsbCB0aGUgZXhhbXBsZSBuZWVkcyBpbiBvcmRlciB0byBidWlsZCB0aGUgcHJvamVjdC4KLSAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2FuIGhhdmUgbXVjaAotICAgICAgICAgICAgICAgIG1vcmUgZGVwZW5kaW5nIG9uIHdoaWNoIGJ1aWxkIGVudmlyb25tZW50cyBCaXRCYWtlIGlzCi0gICAgICAgICAgICAgICAgc3VwcG9ydGluZy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdEJha2U6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHRoZSA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGZpbGUgZXhpc3RzLCB5b3UgY2FuIHJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGNvbW1hbmQgYWdhaW46Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UKLSAgICAgTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIGlzIGZpbmFsbHkgcmVwb3J0aW5nIG5vIGVycm9ycy4KLSAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIHNlZSB0aGF0IGl0IHJlYWxseSBkb2VzIG5vdCBoYXZlIGFueXRoaW5nCi0gICAgICAgICAgICAgICAgdG8gZG8uCi0gICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgcmVjaXBlIHRoYXQgZ2l2ZXMgQml0QmFrZSBzb21ldGhpbmcgdG8gZG8uCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0aW5nIGEgTGF5ZXI6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3Igc3VjaCBhIHNtYWxsIGV4YW1wbGUsCi0gICAgICAgICAgICAgICAgaXQgaXMgZ29vZCBwcmFjdGljZSB0byBjcmVhdGUgYSBsYXllciBpbiB3aGljaCB0byBrZWVwIHlvdXIKLSAgICAgICAgICAgICAgICBjb2RlIHNlcGFyYXRlIGZyb20gdGhlIGdlbmVyYWwgbWV0YWRhdGEgdXNlZCBieSBCaXRCYWtlLgotICAgICAgICAgICAgICAgIFRodXMsIHRoaXMgZXhhbXBsZSBjcmVhdGVzIGFuZCB1c2VzIGEgbGF5ZXIgY2FsbGVkICJteWxheWVyIi4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gbGF5ZXJzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbGF5ZXJzJz5MYXllcnM8L2xpbms+IiBzZWN0aW9uLgotICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT5NaW5pbWFsbHksIHlvdSBuZWVkIGEgcmVjaXBlIGZpbGUgYW5kIGEgbGF5ZXIgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgIGZpbGUgaW4geW91ciBsYXllci4KLSAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIGJlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluc2lkZSB0aGUgbGF5ZXIuCi0gICAgICAgICAgICAgICAgVXNlIHRoZXNlIGNvbW1hbmRzIHRvIHNldCB1cCB0aGUgbGF5ZXIgYW5kIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3J5OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBjZCAkSE9NRQotICAgICAkIG1rZGlyIG15bGF5ZXIKLSAgICAgJCBjZCBteWxheWVyCi0gICAgICQgbWtkaXIgY29uZgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgY3JlYXRlIGEKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBoYXMgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCUEFUSCAuPSAiOiR7PGxpbmsgbGlua2VuZD0ndmFyLWJiLUxBWUVSRElSJz5MQVlFUkRJUjwvbGluaz59IgotCi0gICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPiArPSAiJHtMQVlFUkRJUn0vKi5iYiIKLQotICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJGSUxFX0NPTExFQ1RJT05TJz5CQkZJTEVfQ09MTEVDVElPTlM8L2xpbms+ICs9ICJteWxheWVyIgotICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJGSUxFX1BBVFRFUk4nPkJCRklMRV9QQVRURVJOX215bGF5ZXI8L2xpbms+IDo9ICJeJHtMQVlFUkRJUl9SRX0vIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgdmFyaWFibGVzLCBjbGljayB0aGUgbGlua3MKLSAgICAgICAgICAgICAgICB0byBnbyB0byB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGdsb3NzYXJ5LjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbmVlZCB0byBjcmVhdGUgdGhlIHJlY2lwZSBmaWxlIG5leHQuCi0gICAgICAgICAgICAgICAgSW5zaWRlIHlvdXIgbGF5ZXIgYXQgdGhlIHRvcC1sZXZlbCwgdXNlIGFuIGVkaXRvciBhbmQgY3JlYXRlCi0gICAgICAgICAgICAgICAgYSByZWNpcGUgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+cHJpbnRoZWxsby5iYjwvZmlsZW5hbWU+IHRoYXQKLSAgICAgICAgICAgICAgICBoYXMgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERVNDUklQVElPTic+REVTQ1JJUFRJT048L2xpbms+ID0gIlByaW50cyBIZWxsbyBXb3JsZCIKLSAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBOJz5QTjwvbGluaz4gPSAncHJpbnRoZWxsbycKLSAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBWJz5QVjwvbGluaz4gPSAnMScKLQotICAgICBweXRob24gZG9fYnVpbGQoKSB7Ci0gICAgICAgIGJiLnBsYWluKCIqKioqKioqKioqKioqKioqKioqKiIpOwotICAgICAgICBiYi5wbGFpbigiKiAgICAgICAgICAgICAgICAgICoiKTsKLSAgICAgICAgYmIucGxhaW4oIiogIEhlbGxvLCBXb3JsZCEgICAqIik7Ci0gICAgICAgIGJiLnBsYWluKCIqICAgICAgICAgICAgICAgICAgKiIpOwotICAgICAgICBiYi5wbGFpbigiKioqKioqKioqKioqKioqKioqKioiKTsKLSAgICAgfQotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIGZpbGUgc2ltcGx5IHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhlCi0gICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgbmFtZSwgdmVyc2lvbiwgYW5kIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIHByaW50cyBvdXQgIkhlbGxvIFdvcmxkIiB0byB0aGUgY29uc29sZS4KLSAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIGZvbGxvdyB0aGUgbGlua3MKLSAgICAgICAgICAgICAgICB0byB0aGUgZ2xvc3NhcnkuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRCYWtlIFdpdGggYSBUYXJnZXQ6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBOb3cgdGhhdCBhIEJpdEJha2UgdGFyZ2V0IGV4aXN0cywgcnVuIHRoZSBjb21tYW5kIGFuZCBwcm92aWRlCi0gICAgICAgICAgICAgICAgdGhhdCB0YXJnZXQ6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkICRIT01FL2hlbGxvCi0gICAgICQgYml0YmFrZSBwcmludGhlbGxvCi0gICAgIEVSUk9SOiBubyByZWNpcGUgZmlsZXMgdG8gYnVpbGQsIGNoZWNrIHlvdXIgQkJQQVRIIGFuZCBCQkZJTEVTPwotCi0gICAgIFN1bW1hcnk6IFRoZXJlIHdhcyAxIEVSUk9SIG1lc3NhZ2Ugc2hvd24sIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgV2UgaGF2ZSBjcmVhdGVkIHRoZSBsYXllciB3aXRoIHRoZSByZWNpcGUgYW5kIHRoZSBsYXllcgotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBidXQgaXQgc3RpbGwgc2VlbXMgdGhhdCBCaXRCYWtlIGNhbm5vdAotICAgICAgICAgICAgICAgIGZpbmQgdGhlIHJlY2lwZS4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIGEgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IHRoYXQKLSAgICAgICAgICAgICAgICBsaXN0cyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJvamVjdC4KLSAgICAgICAgICAgICAgICBXaXRob3V0IHRoaXMgZmlsZSwgQml0QmFrZSBjYW5ub3QgZmluZCB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCi0gICAgICAgICAgICAgICAgdG8gbG9jYXRlIGxheWVycyBuZWVkZWQgZm9yIHRoZSBwcm9qZWN0LgotICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBtdXN0IHJlc2lkZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICBvZiB0aGUgcHJvamVjdCAoaS5lLiA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+IGZvciB0aGlzCi0gICAgICAgICAgICAgICAgZXhhbXBsZSkuPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPlNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCBpdCBjb250YWlucyB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQkJMQVlFUlMgPz0gIiBcCi0gICAgICAgL2hvbWUvJmx0O3lvdSZndDsvbXlsYXllciBcCi0gICAgICAgIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBwcm92aWRlIHlvdXIgb3duIGluZm9ybWF0aW9uIGZvcgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b3U8L2ZpbGVuYW1lPiBpbiB0aGUgZmlsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdEJha2UgV2l0aCBhIFRhcmdldDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIHN1cHBsaWVkIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZmlsZSwgcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHByb3ZpZGUKLSAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIHByaW50aGVsbG8KLSAgICAgUGFyc2luZyByZWNpcGVzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfAotICAgICBUaW1lOiAwMDowMDowMAotICAgICBQYXJzaW5nIG9mIDEgLmJiIGZpbGVzIGNvbXBsZXRlICgwIGNhY2hlZCwgMSBwYXJzZWQpLiAxIHRhcmdldHMsIDAgc2tpcHBlZCwgMCBtYXNrZWQsIDAgZXJyb3JzLgotICAgICBOT1RFOiBSZXNvbHZpbmcgYW55IG1pc3NpbmcgdGFzayBxdWV1ZSBkZXBlbmRlbmNpZXMKLSAgICAgTk9URTogUHJlcGFyaW5nIFJ1blF1ZXVlCi0gICAgIE5PVEU6IEV4ZWN1dGluZyBSdW5RdWV1ZSBUYXNrcwotICAgICAqKioqKioqKioqKioqKioqKioqKgotICAgICAqICAgICAgICAgICAgICAgICAgKgotICAgICAqICBIZWxsbywgV29ybGQhICAgKgotICAgICAqICAgICAgICAgICAgICAgICAgKgotICAgICAqKioqKioqKioqKioqKioqKioqKgotICAgICBOT1RFOiBUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgMSB0YXNrcyBvZiB3aGljaCAwIGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIGZpbmRzIHRoZSA8ZmlsZW5hbWU+cHJpbnRoZWxsbzwvZmlsZW5hbWU+IHJlY2lwZSBhbmQKLSAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcnVucyB0aGUgdGFzay4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIGZpcnN0IGV4ZWN1dGlvbiwgcmUtcnVubmluZwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBwcmludGhlbGxvPC9maWxlbmFtZT4gYWdhaW4gd2lsbCBub3QKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGluIGEgQml0QmFrZSBydW4gdGhhdCBwcmludHMgdGhlIHNhbWUgY29uc29sZQotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgZmlyc3QgdGltZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByaW50aGVsbG8uYmI8L2ZpbGVuYW1lPiByZWNpcGUncwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIGV4ZWN1dGVzCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgQml0QmFrZSB3cml0ZXMgYSBzdGFtcCBmaWxlIGZvciB0aGUgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIG5leHQgdGltZSB5b3UgYXR0ZW1wdCB0byBydW4gdGhlIHRhc2sKLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhhdCBzYW1lIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBub3RpY2VzIHRoZSBzdGFtcCBhbmQgdGhlcmVmb3JlIGRldGVybWluZXMKLSAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdGFzayBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlLXJ1bi4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRlbGV0ZSB0aGUgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBvciBydW4gPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW4gcHJpbnRoZWxsbzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHJlLXJ1biB0aGUgYnVpbGQsIHRoZSAiSGVsbG8sIFdvcmxkISIgbWVzc2FnZSB3aWxsCi0gICAgICAgICAgICAgICAgICAgIGJlIHByaW50ZWQgYWdhaW4uCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgIDwvc2VjdGlvbj4KLTwvYXBwZW5kaXg+CmRpZmYgLS1naXQgYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby5yc3QgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby5yc3QKaW5kZXggNzdkYzk2Ni4uNmY5ZDM5MiAxMDA2NDQKLS0tIGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ucnN0CisrKyBiL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnJzdApAQCAtNDY1LDcgKzQ2NSw3IEBACiBFeGVjdXRpbmcgdGFza3MgZm9yIGEgc2luZ2xlIHJlY2lwZSBmaWxlIGlzIHJlbGF0aXZlbHkgc2ltcGxlLiBZb3UKIHNwZWNpZnkgdGhlIGZpbGUgaW4gcXVlc3Rpb24sIGFuZCBCaXRCYWtlIHBhcnNlcyBpdCBhbmQgZXhlY3V0ZXMgdGhlCiBzcGVjaWZpZWQgdGFzay4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgdGFzaywgQml0QmFrZSBleGVjdXRlcyB0aGUKLWRlZmF1bHQgdGFzaywgd2hpY2ggaXMgImJ1aWxk4oCdLiBCaXRCYWtlIG9iZXlzIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCitkZWZhdWx0IHRhc2ssIHdoaWNoIGlzICJidWlsZCIuIEJpdEJha2Ugb2JleXMgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMKIHdoZW4gZG9pbmcgc28uCiAKIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBydW5zIHRoZSBidWlsZCB0YXNrLCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0YXNrLCBvbgpkaWZmIC0tZ2l0IGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sIGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTVjMmZhLi4wMDAwMDAwCi0tLSBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5MSArMCwwIEBACi08IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCi0gICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+Ci0KLTxjaGFwdGVyIGlkPSJiaXRiYWtlLXVzZXItbWFudWFsLWludHJvIj4KLSAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFdlbGNvbWUgdG8gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCi0gICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBCaXRCYWtlIHRvb2wuCi0gICAgICAgIFRoZSBpbmZvcm1hdGlvbiBhdHRlbXB0cyB0byBiZSBhcyBpbmRlcGVuZGVudCBhcyBwb3NzaWJsZSByZWdhcmRpbmcKLSAgICAgICAgc3lzdGVtcyB0aGF0IHVzZSBCaXRCYWtlLCBzdWNoIGFzIE9wZW5FbWJlZGRlZCBhbmQgdGhlCi0gICAgICAgIFlvY3RvIFByb2plY3QuCi0gICAgICAgIEluIHNvbWUgY2FzZXMsIHNjZW5hcmlvcyBvciBleGFtcGxlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YKLSAgICAgICAgYSBidWlsZCBzeXN0ZW0gYXJlIHVzZWQgaW4gdGhlIG1hbnVhbCB0byBoZWxwIHdpdGggdW5kZXJzdGFuZGluZy4KLSAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB0aGUgbWFudWFsIGNsZWFybHkgc3RhdGVzIHRoZSBjb250ZXh0LgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSJpbnRybyI+Ci0gICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRnVuZGFtZW50YWxseSwgQml0QmFrZSBpcyBhIGdlbmVyaWMgdGFzayBleGVjdXRpb24KLSAgICAgICAgICAgIGVuZ2luZSB0aGF0IGFsbG93cyBzaGVsbCBhbmQgUHl0aG9uIHRhc2tzIHRvIGJlIHJ1bgotICAgICAgICAgICAgZWZmaWNpZW50bHkgYW5kIGluIHBhcmFsbGVsIHdoaWxlIHdvcmtpbmcgd2l0aGluCi0gICAgICAgICAgICBjb21wbGV4IGludGVyLXRhc2sgZGVwZW5kZW5jeSBjb25zdHJhaW50cy4KLSAgICAgICAgICAgIE9uZSBvZiBCaXRCYWtlJ3MgbWFpbiB1c2VycywgT3BlbkVtYmVkZGVkLCB0YWtlcyB0aGlzIGNvcmUKLSAgICAgICAgICAgIGFuZCBidWlsZHMgZW1iZWRkZWQgTGludXggc29mdHdhcmUgc3RhY2tzIHVzaW5nCi0gICAgICAgICAgICBhIHRhc2stb3JpZW50ZWQgYXBwcm9hY2guCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIENvbmNlcHR1YWxseSwgQml0QmFrZSBpcyBzaW1pbGFyIHRvIEdOVSBNYWtlIGluCi0gICAgICAgICAgICBzb21lIHJlZ2FyZHMgYnV0IGhhcyBzaWduaWZpY2FudCBkaWZmZXJlbmNlczoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGV4ZWN1dGVzIHRhc2tzIGFjY29yZGluZyB0byBwcm92aWRlZAotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSB0aGF0IGJ1aWxkcyB1cCB0aGUgdGFza3MuCi0gICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhIGlzIHN0b3JlZCBpbiByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICAgICAgYW5kIHJlbGF0ZWQgcmVjaXBlICJhcHBlbmQiICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgIGZpbGVzLCBjb25maWd1cmF0aW9uICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPikgYW5kCi0gICAgICAgICAgICAgICAgICAgIHVuZGVybHlpbmcgaW5jbHVkZSAoPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPikgZmlsZXMsIGFuZAotICAgICAgICAgICAgICAgICAgICBpbiBjbGFzcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgcHJvdmlkZXMKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGF0IHRhc2tzIHRvIHJ1biBhbmQKLSAgICAgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRob3NlIHRhc2tzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEJpdEJha2UgaW5jbHVkZXMgYSBmZXRjaGVyIGxpYnJhcnkgZm9yIG9idGFpbmluZyBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgY29kZSBmcm9tIHZhcmlvdXMgcGxhY2VzIHN1Y2ggYXMgbG9jYWwgZmlsZXMsIHNvdXJjZSBjb250cm9sCi0gICAgICAgICAgICAgICAgICAgIHN5c3RlbXMsIG9yIHdlYnNpdGVzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBpbnN0cnVjdGlvbnMgZm9yIGVhY2ggdW5pdCB0byBiZSBidWlsdCAoZS5nLiBhIHBpZWNlCi0gICAgICAgICAgICAgICAgICAgIG9mIHNvZnR3YXJlKSBhcmUga25vd24gYXMgInJlY2lwZSIgZmlsZXMgYW5kCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5pdAotICAgICAgICAgICAgICAgICAgICAoZGVwZW5kZW5jaWVzLCBzb3VyY2UgZmlsZSBsb2NhdGlvbnMsIGNoZWNrc3VtcywgZGVzY3JpcHRpb24KLSAgICAgICAgICAgICAgICAgICAgYW5kIHNvIG9uKS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGluY2x1ZGVzIGEgY2xpZW50L3NlcnZlciBhYnN0cmFjdGlvbiBhbmQgY2FuCi0gICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgZnJvbSBhIGNvbW1hbmQgbGluZSBvciB1c2VkIGFzIGEgc2VydmljZSBvdmVyCi0gICAgICAgICAgICAgICAgICAgIFhNTC1SUEMgYW5kIGhhcyBzZXZlcmFsIGRpZmZlcmVudCB1c2VyIGludGVyZmFjZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iaGlzdG9yeS1hbmQtZ29hbHMiPgotICAgICAgICA8dGl0bGU+SGlzdG9yeSBhbmQgR29hbHM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQml0QmFrZSB3YXMgb3JpZ2luYWxseSBhIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZCBwcm9qZWN0LgotICAgICAgICAgICAgSXQgd2FzIGluc3BpcmVkIGJ5IHRoZSBQb3J0YWdlIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0KLSAgICAgICAgICAgIHVzZWQgYnkgdGhlIEdlbnRvbyBMaW51eCBkaXN0cmlidXRpb24uCi0gICAgICAgICAgICBPbiBEZWNlbWJlciA3LCAyMDA0LCBPcGVuRW1iZWRkZWQgcHJvamVjdCB0ZWFtIG1lbWJlcgotICAgICAgICAgICAgQ2hyaXMgTGFyc29uIHNwbGl0IHRoZSBwcm9qZWN0IGludG8gdHdvIGRpc3RpbmN0IHBpZWNlczoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJpdEJha2UsIGEgZ2VuZXJpYyB0YXNrIGV4ZWN1dG9yPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9wZW5FbWJlZGRlZCwgYSBtZXRhZGF0YSBzZXQgdXRpbGl6ZWQgYnkKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZTwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICBUb2RheSwgQml0QmFrZSBpcyB0aGUgcHJpbWFyeSBiYXNpcyBvZiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy8iPk9wZW5FbWJlZGRlZDwvdWxpbms+Ci0gICAgICAgICAgICBwcm9qZWN0LCB3aGljaCBpcyBiZWluZyB1c2VkIHRvIGJ1aWxkIGFuZCBtYWludGFpbiBMaW51eAotICAgICAgICAgICAgZGlzdHJpYnV0aW9ucyBzdWNoIGFzIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5hbmdzdHJvbS1kaXN0cmlidXRpb24ub3JnLyc+QW5nc3Ryb20gRGlzdHJpYnV0aW9uPC91bGluaz4sCi0gICAgICAgICAgICBhbmQgd2hpY2ggaXMgYWxzbyBiZWluZyB1c2VkIGFzIHRoZSBidWlsZCB0b29sIGZvciBMaW51eCBwcm9qZWN0cwotICAgICAgICAgICAgc3VjaCBhcyB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdDwvdWxpbms+LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBQcmlvciB0byBCaXRCYWtlLCBubyBvdGhlciBidWlsZCB0b29sIGFkZXF1YXRlbHkgbWV0IHRoZSBuZWVkcyBvZgotICAgICAgICAgICAgYW4gYXNwaXJpbmcgZW1iZWRkZWQgTGludXggZGlzdHJpYnV0aW9uLgotICAgICAgICAgICAgQWxsIG9mIHRoZSBidWlsZCBzeXN0ZW1zIHVzZWQgYnkgdHJhZGl0aW9uYWwgZGVza3RvcCBMaW51eAotICAgICAgICAgICAgZGlzdHJpYnV0aW9ucyBsYWNrZWQgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdHksIGFuZCBub25lIG9mIHRoZQotICAgICAgICAgICAgYWQgaG9jIEJ1aWxkcm9vdC1iYXNlZCBzeXN0ZW1zLCBwcmV2YWxlbnQgaW4gdGhlCi0gICAgICAgICAgICBlbWJlZGRlZCBzcGFjZSwgd2VyZSBzY2FsYWJsZSBvciBtYWludGFpbmFibGUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFNvbWUgaW1wb3J0YW50IG9yaWdpbmFsIGdvYWxzIGZvciBCaXRCYWtlIHdlcmU6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSGFuZGxlIGNyb3NzLWNvbXBpbGF0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEhhbmRsZSBpbnRlci1wYWNrYWdlIGRlcGVuZGVuY2llcyAoYnVpbGQgdGltZSBvbgotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBidWlsZCB0aW1lIG9uIG5hdGl2ZQotICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUsIGFuZCBydW50aW1lKS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IHJ1bm5pbmcgYW55IG51bWJlciBvZiB0YXNrcyB3aXRoaW4gYSBnaXZlbgotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZmV0Y2hpbmcKLSAgICAgICAgICAgICAgICAgICAgdXBzdHJlYW0gc291cmNlcywgdW5wYWNraW5nIHRoZW0sIHBhdGNoaW5nIHRoZW0sCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyaW5nIHRoZW0sIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCZSBMaW51eCBkaXN0cmlidXRpb24gYWdub3N0aWMgZm9yIGJvdGggYnVpbGQgYW5kCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW1zLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEJlIGFyY2hpdGVjdHVyZSBhZ25vc3RpYy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IG11bHRpcGxlIGJ1aWxkIGFuZCB0YXJnZXQgb3BlcmF0aW5nIHN5c3RlbXMKLSAgICAgICAgICAgICAgICAgICAgKGUuZy4gQ3lnd2luLCB0aGUgQlNEcywgYW5kIHNvIGZvcnRoKS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCZSBzZWxmLWNvbnRhaW5lZCwgcmF0aGVyIHRoYW4gdGlnaHRseQotICAgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIG1hY2hpbmUncyByb290Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSGFuZGxlIGNvbmRpdGlvbmFsIG1ldGFkYXRhIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLCBkaXN0cmlidXRpb24sIGFuZCBtYWNoaW5lLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEJlIGVhc3kgdG8gdXNlIHRoZSB0b29scyB0byBzdXBwbHkgbG9jYWwgbWV0YWRhdGEgYW5kIHBhY2thZ2VzCi0gICAgICAgICAgICAgICAgICAgIGFnYWluc3Qgd2hpY2ggdG8gb3BlcmF0ZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCZSBlYXN5IHRvIHVzZSBCaXRCYWtlIHRvIGNvbGxhYm9yYXRlIGJldHdlZW4gbXVsdGlwbGUKLSAgICAgICAgICAgICAgICAgICAgcHJvamVjdHMgZm9yIHRoZWlyIGJ1aWxkcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGFuIGluaGVyaXRhbmNlIG1lY2hhbmlzbSB0byBzaGFyZQotICAgICAgICAgICAgICAgICAgICBjb21tb24gbWV0YWRhdGEgYmV0d2VlbiBtYW55IHBhY2thZ2VzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgT3ZlciB0aW1lIGl0IGJlY2FtZSBhcHBhcmVudCB0aGF0IHNvbWUgZnVydGhlciByZXF1aXJlbWVudHMKLSAgICAgICAgICAgIHdlcmUgbmVjZXNzYXJ5OgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEhhbmRsZSB2YXJpYW50cyBvZiBhIGJhc2UgcmVjaXBlIChlLmcuIG5hdGl2ZSwgc2RrLAotICAgICAgICAgICAgICAgICAgICBhbmQgbXVsdGlsaWIpLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwbGl0IG1ldGFkYXRhIGludG8gbGF5ZXJzIGFuZCBhbGxvdyBsYXllcnMKLSAgICAgICAgICAgICAgICAgICAgdG8gZW5oYW5jZSBvciBvdmVycmlkZSBvdGhlciBsYXllcnMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQWxsb3cgcmVwcmVzZW50YXRpb24gb2YgYSBnaXZlbiBzZXQgb2YgaW5wdXQgdmFyaWFibGVzCi0gICAgICAgICAgICAgICAgICAgIHRvIGEgdGFzayBhcyBhIGNoZWNrc3VtLgotICAgICAgICAgICAgICAgICAgICBCYXNlZCBvbiB0aGF0IGNoZWNrc3VtLCBhbGxvdyBhY2NlbGVyYXRpb24gb2YgYnVpbGRzCi0gICAgICAgICAgICAgICAgICAgIHdpdGggcHJlYnVpbHQgY29tcG9uZW50cy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIEJpdEJha2Ugc2F0aXNmaWVzIGFsbCB0aGUgb3JpZ2luYWwgcmVxdWlyZW1lbnRzIGFuZCBtYW55IG1vcmUKLSAgICAgICAgICAgIHdpdGggZXh0ZW5zaW9ucyBiZWluZyBtYWRlIHRvIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvCi0gICAgICAgICAgICByZWZsZWN0IHRoZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cy4KLSAgICAgICAgICAgIEZsZXhpYmlsaXR5IGFuZCBwb3dlciBoYXZlIGFsd2F5cyBiZWVuIHRoZSBwcmlvcml0aWVzLgotICAgICAgICAgICAgQml0QmFrZSBpcyBoaWdobHkgZXh0ZW5zaWJsZSBhbmQgc3VwcG9ydHMgZW1iZWRkZWQgUHl0aG9uIGNvZGUgYW5kCi0gICAgICAgICAgICBleGVjdXRpb24gb2YgYW55IGFyYml0cmFyeSB0YXNrcy4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJDb25jZXB0cyI+Ci0gICAgICAgIDx0aXRsZT5Db25jZXB0czwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIGlzIGEgcHJvZ3JhbSB3cml0dGVuIGluIHRoZSBQeXRob24gbGFuZ3VhZ2UuCi0gICAgICAgICAgICBBdCB0aGUgaGlnaGVzdCBsZXZlbCwgQml0QmFrZSBpbnRlcnByZXRzIG1ldGFkYXRhLCBkZWNpZGVzCi0gICAgICAgICAgICB3aGF0IHRhc2tzIGFyZSByZXF1aXJlZCB0byBydW4sIGFuZCBleGVjdXRlcyB0aG9zZSB0YXNrcy4KLSAgICAgICAgICAgIFNpbWlsYXIgdG8gR05VIE1ha2UsIEJpdEJha2UgY29udHJvbHMgaG93IHNvZnR3YXJlIGlzCi0gICAgICAgICAgICBidWlsdC4KLSAgICAgICAgICAgIEdOVSBNYWtlIGFjaGlldmVzIGl0cyBjb250cm9sIHRocm91Z2ggIm1ha2VmaWxlcyIsIHdoaWxlCi0gICAgICAgICAgICBCaXRCYWtlIHVzZXMgInJlY2lwZXMiLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIGV4dGVuZHMgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHNpbXBsZQotICAgICAgICAgICAgdG9vbCBsaWtlIEdOVSBNYWtlIGJ5IGFsbG93aW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBtdWNoIG1vcmUKLSAgICAgICAgICAgIGNvbXBsZXggdGFza3MsIHN1Y2ggYXMgYXNzZW1ibGluZyBlbnRpcmUgZW1iZWRkZWQgTGludXgKLSAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGludHJvZHVjZXMgc2V2ZXJhbCBjb25jZXB0cwotICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgdW5kZXJzdG9vZCBpbiBvcmRlciB0byBiZXR0ZXIgbGV2ZXJhZ2UKLSAgICAgICAgICAgIHRoZSBwb3dlciBvZiBCaXRCYWtlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3JlY2lwZXMnPgotICAgICAgICAgICAgPHRpdGxlPlJlY2lwZXM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIFJlY2lwZXMsIHdoaWNoIGFyZSBkZW5vdGVkIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiwgYXJlIHRoZSBtb3N0IGJhc2ljIG1ldGFkYXRhIGZpbGVzLgotICAgICAgICAgICAgICAgIFRoZXNlIHJlY2lwZSBmaWxlcyBwcm92aWRlIEJpdEJha2Ugd2l0aCB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZXNjcmlwdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgKGF1dGhvciwgaG9tZXBhZ2UsIGxpY2Vuc2UsIGFuZCBzbyBvbik8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGU8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4aXN0aW5nIGRlcGVuZGVuY2llcyAoYm90aCBidWlsZAotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJ1bnRpbWUgZGVwZW5kZW5jaWVzKTwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlcmUgdGhlIHNvdXJjZSBjb2RlIHJlc2lkZXMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBob3cgdG8gZmV0Y2ggaXQ8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdGhlIHNvdXJjZSBjb2RlIHJlcXVpcmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBhbnkgcGF0Y2hlcywgd2hlcmUgdG8gZmluZCB0aGVtLCBhbmQgaG93IHRvIGFwcGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGVtPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgdG8gY29uZmlndXJlIGFuZCBjb21waWxlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGU8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byBhc3NlbWJsZSB0aGUgZ2VuZXJhdGVkIGFydGlmYWN0cyBpbnRvCi0gICAgICAgICAgICAgICAgICAgICAgICBvbmUgb3IgbW9yZSBpbnN0YWxsYWJsZSBwYWNrYWdlczwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlcmUgb24gdGhlIHRhcmdldCBtYWNoaW5lIHRvIGluc3RhbGwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9yIHBhY2thZ2VzIGNyZWF0ZWQ8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2l0aGluIHRoZSBjb250ZXh0IG9mIEJpdEJha2UsIG9yIGFueSBwcm9qZWN0IHV0aWxpemluZyBCaXRCYWtlCi0gICAgICAgICAgICAgICAgYXMgaXRzIGJ1aWxkIHN5c3RlbSwgZmlsZXMgd2l0aCB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uIGFyZSByZWZlcnJlZCB0byBhcyA8Zmlyc3R0ZXJtPnJlY2lwZXM8L2ZpcnN0dGVybT4uCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSB0ZXJtICJwYWNrYWdlIiBpcyBhbHNvIGNvbW1vbmx5IHVzZWQgdG8gZGVzY3JpYmUgcmVjaXBlcy4KLSAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2luY2UgdGhlIHNhbWUgd29yZCBpcyB1c2VkIHRvIGRlc2NyaWJlIHBhY2thZ2VkCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dCBmcm9tIGEgcHJvamVjdCwgaXQgaXMgYmVzdCB0byBtYWludGFpbiBhIHNpbmdsZQotICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGl2ZSB0ZXJtIC0gInJlY2lwZXMiLgotICAgICAgICAgICAgICAgICAgICBQdXQgYW5vdGhlciB3YXksIGEgc2luZ2xlICJyZWNpcGUiIGZpbGUgaXMgcXVpdGUgY2FwYWJsZQotICAgICAgICAgICAgICAgICAgICBvZiBnZW5lcmF0aW5nIGEgbnVtYmVyIG9mIHJlbGF0ZWQgYnV0IHNlcGFyYXRlbHkgaW5zdGFsbGFibGUKLSAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VzIi4KLSAgICAgICAgICAgICAgICAgICAgSW4gZmFjdCwgdGhhdCBhYmlsaXR5IGlzIGZhaXJseSBjb21tb24uCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tZmlsZXMnPgotICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZpbGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBleHRlbnNpb24sIGRlZmluZQotICAgICAgICAgICAgICAgIHZhcmlvdXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBnb3Zlcm4gdGhlIHByb2plY3QncyBidWlsZAotICAgICAgICAgICAgICAgIHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgZmFsbCBpbnRvIHNldmVyYWwgYXJlYXMgdGhhdCBkZWZpbmUKLSAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24sIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgIHBvc3NpYmxlIGNvbXBpbGVyIHR1bmluZywgZ2VuZXJhbCBjb21tb24KLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBhbmQgdXNlciBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgICAgIFRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB0aGUgc2FtcGxlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgbG9jYXRlZCB3aXRoaW4gdGhlIEJpdEJha2Ugc291cmNlIHRyZWUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdjbGFzc2VzJz4KLSAgICAgICAgICAgIDx0aXRsZT5DbGFzc2VzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQ2xhc3MgZmlsZXMsIHdoaWNoIGFyZSBkZW5vdGVkIGJ5IHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGV4dGVuc2lvbiwgY29udGFpbgotICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHRoYXQgaXMgdXNlZnVsIHRvIHNoYXJlIGJldHdlZW4gbWV0YWRhdGEgZmlsZXMuCi0gICAgICAgICAgICAgICAgVGhlIEJpdEJha2Ugc291cmNlIHRyZWUgY3VycmVudGx5IGNvbWVzIHdpdGggb25lIGNsYXNzIG1ldGFkYXRhIGZpbGUKLSAgICAgICAgICAgICAgICBjYWxsZWQgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBjbGFzcyBmaWxlcyBpcyBzcGVjaWFsIHNpbmNlIGl0Ci0gICAgICAgICAgICAgICAgaXMgYWx3YXlzIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgZm9yIGFsbCByZWNpcGVzCi0gICAgICAgICAgICAgICAgYW5kIGNsYXNzZXMuCi0gICAgICAgICAgICAgICAgVGhpcyBjbGFzcyBjb250YWlucyBkZWZpbml0aW9ucyBmb3Igc3RhbmRhcmQgYmFzaWMgdGFza3Mgc3VjaAotICAgICAgICAgICAgICAgIGFzIGZldGNoaW5nLCB1bnBhY2tpbmcsIGNvbmZpZ3VyaW5nIChlbXB0eSBieSBkZWZhdWx0KSwKLSAgICAgICAgICAgICAgICBjb21waWxpbmcgKHJ1bnMgYW55IE1ha2VmaWxlIHByZXNlbnQpLCBpbnN0YWxsaW5nIChlbXB0eSBieQotICAgICAgICAgICAgICAgIGRlZmF1bHQpIGFuZCBwYWNrYWdpbmcgKGVtcHR5IGJ5IGRlZmF1bHQpLgotICAgICAgICAgICAgICAgIFRoZXNlIHRhc2tzIGFyZSBvZnRlbiBvdmVycmlkZGVuIG9yIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMKLSAgICAgICAgICAgICAgICBhZGRlZCBkdXJpbmcgdGhlIHByb2plY3QgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdsYXllcnMnPgotICAgICAgICAgICAgPHRpdGxlPkxheWVyczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIExheWVycyBhbGxvdyB5b3UgdG8gaXNvbGF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YKLSAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9ucyBmcm9tIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgICAgV2hpbGUgeW91IG1pZ2h0IGZpbmQgaXQgdGVtcHRpbmcgdG8ga2VlcCBldmVyeXRoaW5nIGluIG9uZSBsYXllcgotICAgICAgICAgICAgICAgIHdoZW4gd29ya2luZyBvbiBhIHNpbmdsZSBwcm9qZWN0LCB0aGUgbW9yZSBtb2R1bGFyCi0gICAgICAgICAgICAgICAgeW91ciBtZXRhZGF0YSwgdGhlIGVhc2llciBpdCBpcyB0byBjb3BlIHdpdGggZnV0dXJlIGNoYW5nZXMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIGlsbHVzdHJhdGUgaG93IHlvdSBjYW4gdXNlIGxheWVycyB0byBrZWVwIHRoaW5ncyBtb2R1bGFyLAotICAgICAgICAgICAgICAgIGNvbnNpZGVyIGN1c3RvbWl6YXRpb25zIHlvdSBtaWdodCBtYWtlIHRvIHN1cHBvcnQgYSBzcGVjaWZpYyB0YXJnZXQgbWFjaGluZS4KLSAgICAgICAgICAgICAgICBUaGVzZSB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyB0eXBpY2FsbHkgcmVzaWRlIGluIGEgc3BlY2lhbCBsYXllciwKLSAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBhIGdlbmVyYWwgbGF5ZXIsIGNhbGxlZCBhIDxmaXJzdHRlcm0+Qm9hcmQgU3VwcG9ydCBQYWNrYWdlPC9maXJzdHRlcm0+IChCU1ApCi0gICAgICAgICAgICAgICAgbGF5ZXIuCi0gICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBtYWNoaW5lIGN1c3RvbWl6YXRpb25zIHNob3VsZCBiZSBpc29sYXRlZCBmcm9tCi0gICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgbWV0YWRhdGEgdGhhdCBzdXBwb3J0IGEgbmV3IEdVSSBlbnZpcm9ubWVudCwgZm9yCi0gICAgICAgICAgICAgICAgZXhhbXBsZS4KLSAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBnaXZlcyB5b3UgYSBjb3VwbGUgb2YgbGF5ZXJzOiBvbmUgZm9yIHRoZSBtYWNoaW5lCi0gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYW5kIG9uZSBmb3IgdGhlIEdVSSBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCB0aGUgQlNQIGxheWVyIGNhbiBzdGlsbAotICAgICAgICAgICAgICAgIG1ha2UgbWFjaGluZS1zcGVjaWZpYyBhZGRpdGlvbnMgdG8gcmVjaXBlcyB3aXRoaW4KLSAgICAgICAgICAgICAgICB0aGUgR1VJIGVudmlyb25tZW50IGxheWVyIHdpdGhvdXQgcG9sbHV0aW5nIHRoZSBHVUkgbGF5ZXIgaXRzZWxmCi0gICAgICAgICAgICAgICAgd2l0aCB0aG9zZSBtYWNoaW5lLXNwZWNpZmljIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCBhIHJlY2lwZSB0aGF0IGlzIGEgQml0QmFrZSBhcHBlbmQKLSAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBmaWxlLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZC1iYmFwcGVuZC1maWxlcyc+Ci0gICAgICAgICAgICA8dGl0bGU+QXBwZW5kIEZpbGVzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzLCB3aGljaCBhcmUgZmlsZXMgdGhhdCBoYXZlIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGV4dGVuc2lvbiwgZXh0ZW5kIG9yCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGUgaW5mb3JtYXRpb24gaW4gYW4gZXhpc3RpbmcgcmVjaXBlIGZpbGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJpdEJha2UgZXhwZWN0cyBldmVyeSBhcHBlbmQgZmlsZSB0byBoYXZlIGEgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZS4KLSAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGFwcGVuZCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlCi0gICAgICAgICAgICAgICAgbXVzdCB1c2UgdGhlIHNhbWUgcm9vdCBmaWxlbmFtZS4KLSAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWVzIGNhbiBkaWZmZXIgb25seSBpbiB0aGUgZmlsZSB0eXBlIHN1ZmZpeCB1c2VkCi0gICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBpbiBhcHBlbmQgZmlsZXMgZXh0ZW5kcyBvcgotICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHVuZGVybHlpbmcsCi0gICAgICAgICAgICAgICAgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlcy4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2hlbiB5b3UgbmFtZSBhbiBhcHBlbmQgZmlsZSwgeW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICAgICAgIjxmaWxlbmFtZT4lPC9maWxlbmFtZT4iIHdpbGRjYXJkIGNoYXJhY3RlciB0byBhbGxvdyBmb3IgbWF0Y2hpbmcKLSAgICAgICAgICAgICAgICByZWNpcGUgbmFtZXMuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYW4gYXBwZW5kIGZpbGUgbmFtZWQKLSAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgYnVzeWJveF8xLjIxLiUuYmJhcHBlbmQKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhhdCBhcHBlbmQgZmlsZSB3b3VsZCBtYXRjaCBhbnkgPGZpbGVuYW1lPmJ1c3lib3hfMS4yMS48L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT54PC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgU28sIHRoZSBhcHBlbmQgZmlsZSB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHJlY2lwZSBuYW1lczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGJ1c3lib3hfMS4yMS4xLmJiCi0gICAgIGJ1c3lib3hfMS4yMS4yLmJiCi0gICAgIGJ1c3lib3hfMS4yMS4zLmJiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5JbXBvcnRhbnQ8L3RpdGxlPgotICAgICAgICAgICAgICAgICAgICBUaGUgdXNlIG9mIHRoZSAiPGZpbGVuYW1lPiU8L2ZpbGVuYW1lPiIgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgIGlzIGxpbWl0ZWQgaW4gdGhhdCBpdCBvbmx5IHdvcmtzIGRpcmVjdGx5IGluIGZyb250IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gcG9ydGlvbiBvZiB0aGUgYXBwZW5kIGZpbGUncwotICAgICAgICAgICAgICAgICAgICBuYW1lLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHVzZSB0aGUgd2lsZGNhcmQgY2hhcmFjdGVyIGluIGFueSBvdGhlcgotICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBvZiB0aGUgbmFtZS4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT4gcmVjaXBlIHdhcyB1cGRhdGVkIHRvCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3hfMS4zLjAuYmI8L2ZpbGVuYW1lPiwgdGhlIGFwcGVuZCBuYW1lIHdvdWxkIG5vdAotICAgICAgICAgICAgICAgIG1hdGNoLgotICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBuYW1lZCB0aGUgYXBwZW5kIGZpbGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLiUuYmJhcHBlbmQ8L2ZpbGVuYW1lPiwgdGhlbiB5b3Ugd291bGQgaGF2ZSBhIG1hdGNoLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJbiB0aGUgbW9zdCBnZW5lcmFsIGNhc2UsIHlvdSBjb3VsZCBuYW1lIHRoZSBhcHBlbmQgZmlsZSBzb21ldGhpbmcgYXMKLSAgICAgICAgICAgICAgICBzaW1wbGUgYXMgPGZpbGVuYW1lPmJ1c3lib3hfJS5iYmFwcGVuZDwvZmlsZW5hbWU+IHRvIGJlIGVudGlyZWx5Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiBpbmRlcGVuZGVudC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdvYnRhaW5pbmctYml0YmFrZSc+Ci0gICAgICAgIDx0aXRsZT5PYnRhaW5pbmcgQml0QmFrZTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgY2FuIG9idGFpbiBCaXRCYWtlIHNldmVyYWwgZGlmZmVyZW50IHdheXM6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xvbmluZyBCaXRCYWtlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFVzaW5nIEdpdCB0byBjbG9uZSB0aGUgQml0QmFrZSBzb3VyY2UgY29kZSByZXBvc2l0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlzIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIG9idGFpbmluZyBCaXRCYWtlLgotICAgICAgICAgICAgICAgICAgICBDbG9uaW5nIHRoZSByZXBvc2l0b3J5IG1ha2VzIGl0IGVhc3kgdG8gZ2V0IGJ1ZyBmaXhlcwotICAgICAgICAgICAgICAgICAgICBhbmQgaGF2ZSBhY2Nlc3MgdG8gc3RhYmxlIGJyYW5jaGVzIGFuZCB0aGUgbWFzdGVyCi0gICAgICAgICAgICAgICAgICAgIGJyYW5jaC4KLSAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgQml0QmFrZSwgeW91IHNob3VsZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgdGhlIGxhdGVzdCBzdGFibGUKLSAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGZvciBkZXZlbG9wbWVudCBzaW5jZSB0aGUgbWFzdGVyIGJyYW5jaCBpcyBmb3IKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBkZXZlbG9wbWVudCBhbmQgbWlnaHQgY29udGFpbiBsZXNzIHN0YWJsZSBjaGFuZ2VzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSB1c3VhbGx5IG5lZWQgYSB2ZXJzaW9uIG9mIEJpdEJha2UKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBtYXRjaGVzIHRoZSBtZXRhZGF0YSB5b3UgYXJlIHVzaW5nLgotICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgaXMgZ2VuZXJhbGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlIGJ1dAotICAgICAgICAgICAgICAgICAgICBub3QgZm9yd2FyZCBjb21wYXRpYmxlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY2xvbmVzIHRoZSBCaXRCYWtlIHJlcG9zaXRvcnk6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjbG9uZXMgdGhlIEJpdEJha2UgR2l0IHJlcG9zaXRvcnkgaW50byBhCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYWxsZWQgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbgotICAgICAgICAgICAgICAgICAgICBkZXNpZ25hdGUgYSBkaXJlY3RvcnkgYWZ0ZXIgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3YW50IHRvIGNhbGwgdGhlIG5ldyBkaXJlY3Rvcnkgc29tZXRoaW5nCi0gICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgbmFtZXMgdGhlIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJkZXY8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIGJiZGV2Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGxhdGlvbiB1c2luZyB5b3VyIERpc3RyaWJ1dGlvbgotICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIG5vdAotICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCBiZWNhdXNlIHRoZSBCaXRCYWtlIHZlcnNpb24gdGhhdCBpcwotICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB5b3VyIGRpc3RyaWJ1dGlvbiwgaW4gbW9zdCBjYXNlcywKLSAgICAgICAgICAgICAgICAgICAgaXMgc2V2ZXJhbAotICAgICAgICAgICAgICAgICAgICByZWxlYXNlcyBiZWhpbmQgYSBzbmFwc2hvdCBvZiB0aGUgQml0QmFrZSByZXBvc2l0b3J5LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRha2luZyBhIHNuYXBzaG90IG9mIEJpdEJha2U6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgYSBzbmFwc2hvdCBvZiBCaXRCYWtlIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkgZ2l2ZXMgeW91IGFjY2VzcyB0byBhIGtub3duCi0gICAgICAgICAgICAgICAgICAgIGJyYW5jaCBvciByZWxlYXNlIG9mIEJpdEJha2UuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgIENsb25pbmcgdGhlIEdpdCByZXBvc2l0b3J5LCBhcyBkZXNjcmliZWQgZWFybGllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBmb3IgZ2V0dGluZyBCaXRCYWtlLgotICAgICAgICAgICAgICAgICAgICAgICAgIENsb25pbmcgdGhlIHJlcG9zaXRvcnkgbWFrZXMgaXQgZWFzaWVyIHRvIHVwZGF0ZSBhcwotICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgYXJlIGFkZGVkIHRvIHRoZSBzdGFibGUgYnJhbmNoZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkb3dubG9hZHMgYSBzbmFwc2hvdCBvZgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHZlcnNpb24gMS4xNy4wOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgd2dldCBodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZS9zbmFwc2hvdC9iaXRiYWtlLTEuMTcuMC50YXIuZ3oKLSAgICAgJCB0YXIgenhwdmYgYml0YmFrZS0xLjE3LjAudGFyLmd6Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgZXh0cmFjdGlvbiBvZiB0aGUgdGFyYmFsbCB1c2luZyB0aGUgdGFyIHV0aWxpdHksCi0gICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIGEgZGlyZWN0b3J5IGVudGl0bGVkCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLTEuMTcuMDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzaW5nIHRoZSBCaXRCYWtlIHRoYXQgQ29tZXMgV2l0aCBZb3VyCi0gICAgICAgICAgICAgICAgICAgIEJ1aWxkIENoZWNrb3V0OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEEgZmluYWwgcG9zc2liaWxpdHkgZm9yIGdldHRpbmcgYSBjb3B5IG9mIEJpdEJha2UgaXMgdGhhdCBpdAotICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGNvbWVzIHdpdGggeW91ciBjaGVja291dCBvZiBhIGxhcmdlciBCaXRCYWtlLWJhc2VkIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgc3VjaCBhcyBQb2t5LgotICAgICAgICAgICAgICAgICAgICBSYXRoZXIgdGhhbiBtYW51YWxseSBjaGVja2luZyBvdXQgaW5kaXZpZHVhbCBsYXllcnMgYW5kCi0gICAgICAgICAgICAgICAgICAgIGdsdWluZyB0aGVtIHRvZ2V0aGVyIHlvdXJzZWxmLCB5b3UgY2FuIGNoZWNrCi0gICAgICAgICAgICAgICAgICAgIG91dCBhbiBlbnRpcmUgYnVpbGQgc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICBUaGUgY2hlY2tvdXQgd2lsbCBhbHJlYWR5IGluY2x1ZGUgYSB2ZXJzaW9uIG9mIEJpdEJha2UgdGhhdAotICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiB0aG9yb3VnaGx5IHRlc3RlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvdGhlcgotICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNoZWNrIG91dCBhIHBhcnRpY3VsYXIgQml0QmFrZS1iYXNlZAotICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0sIGNvbnN1bHQgdGhhdCBidWlsZCBzeXN0ZW0ncyBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYml0YmFrZS11c2VyLW1hbnVhbC1jb21tYW5kIj4KLSAgICAgICAgPHRpdGxlPlRoZSBCaXRCYWtlIENvbW1hbmQ8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UKLSAgICAgICAgICAgIHRvIHRoZSBCaXRCYWtlIHRvb2wuCi0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIEJpdEJha2UgY29tbWFuZCBzeW50YXggYW5kIHByb3ZpZGVzCi0gICAgICAgICAgICBzZXZlcmFsIGV4ZWN1dGlvbiBleGFtcGxlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSd1c2FnZS1hbmQtc3ludGF4Jz4KLSAgICAgICAgICAgIDx0aXRsZT5Vc2FnZSBhbmQgc3ludGF4PC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSB1c2FnZSBhbmQgc3ludGF4IGZvciBCaXRCYWtlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIC1oCi0gICAgIFVzYWdlOiBiaXRiYWtlIFtvcHRpb25zXSBbcmVjaXBlbmFtZS90YXJnZXQgcmVjaXBlOmRvX3Rhc2sgLi4uXQotCi0gICAgICAgICBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2sgKGRlZmF1bHQgaXMgJ2J1aWxkJykgZm9yIGEgZ2l2ZW4gc2V0IG9mIHRhcmdldCByZWNpcGVzICguYmIgZmlsZXMpLgotICAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGVyZSBpcyBhIGNvbmYvYmJsYXllcnMuY29uZiBhdmFpbGFibGUgaW4gY3dkIG9yIGluIEJCUEFUSCB3aGljaAotICAgICAgICAgd2lsbCBwcm92aWRlIHRoZSBsYXllciwgQkJGSUxFUyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLQotICAgICBPcHRpb25zOgotICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAotICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0gICAgICAgLWIgQlVJTERGSUxFLCAtLWJ1aWxkZmlsZT1CVUlMREZJTEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSB0YXNrcyBmcm9tIGEgc3BlY2lmaWMgLmJiIHJlY2lwZSBkaXJlY3RseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORzogRG9lcyBub3QgaGFuZGxlIGFueSBkZXBlbmRlbmNpZXMgZnJvbSBvdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLgotICAgICAgIC1rLCAtLWNvbnRpbnVlICAgICAgICBDb250aW51ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGFmdGVyIGFuIGVycm9yLiBXaGlsZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHRoYXQgZmFpbGVkIGFuZCBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXQgY2Fubm90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGJ1aWx0LCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgYnVpbHQgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwaW5nLgotICAgICAgIC1mLCAtLWZvcmNlICAgICAgICAgICBGb3JjZSB0aGUgc3BlY2lmaWVkIHRhcmdldHMvdGFzayB0byBydW4gKGludmFsaWRhdGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZXhpc3Rpbmcgc3RhbXAgZmlsZSkuCi0gICAgICAgLWMgQ01ELCAtLWNtZD1DTUQgICAgIFNwZWNpZnkgdGhlIHRhc2sgdG8gZXhlY3V0ZS4gVGhlIGV4YWN0IG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGRlcGVuZCBvbiB0aGUgbWV0YWRhdGEuIFNvbWUgZXhhbXBsZXMgbWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgJ2NvbXBpbGUnIG9yICdwb3B1bGF0ZV9zeXNyb290JyBvciAnbGlzdHRhc2tzJyBtYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZSBhIGxpc3Qgb2YgdGhlIHRhc2tzIGF2YWlsYWJsZS4KLSAgICAgICAtQyBJTlZBTElEQVRFX1NUQU1QLCAtLWNsZWFyLXN0YW1wPUlOVkFMSURBVEVfU1RBTVAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZGF0ZSB0aGUgc3RhbXAgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayBzdWNoIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21waWxlJyBhbmQgdGhlbiBydW4gdGhlIGRlZmF1bHQgdGFzayBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCB0YXJnZXQocykuCi0gICAgICAgLXIgUFJFRklMRSwgLS1yZWFkPVBSRUZJTEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYmVmb3JlIGJpdGJha2UuY29uZi4KLSAgICAgICAtUiBQT1NURklMRSwgLS1wb3N0cmVhZD1QT1NURklMRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhZnRlciBiaXRiYWtlLmNvbmYuCi0gICAgICAgLXYsIC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB0cmFjaW5nIG9mIHNoZWxsIHRhc2tzICh3aXRoICdzZXQgLXgnKS4gQWxzbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBiYi5ub3RlKC4uLikgbWVzc2FnZXMgdG8gc3Rkb3V0IChpbiBhZGRpdGlvbiB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0aW5nIHRoZW0gdG8gJHtUfS9sb2cuZG9fJmx0O3Rhc2smZ3Q7KS4KLSAgICAgICAtRCwgLS1kZWJ1ZyAgICAgICAgICAgSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gb25jZS4gLUQgc2V0cyB0aGUgZGVidWcgbGV2ZWwgdG8gMSwgd2hlcmUgb25seQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAuLi4pIG1lc3NhZ2VzIGFyZSBwcmludGVkIHRvIHN0ZG91dDsgLURECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHMgdGhlIGRlYnVnIGxldmVsIHRvIDIsIHdoZXJlIGJvdGggYmIuZGVidWcoMSwgLi4uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYmIuZGVidWcoMiwgLi4uKSBtZXNzYWdlcyBhcmUgcHJpbnRlZDsgZXRjLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRob3V0IC1ELCBubyBkZWJ1ZyBtZXNzYWdlcyBhcmUgcHJpbnRlZC4gTm90ZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EIG9ubHkgYWZmZWN0cyBvdXRwdXQgdG8gc3Rkb3V0LiBBbGwgZGVidWcgbWVzc2FnZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHdyaXR0ZW4gdG8gJHtUfS9sb2cuZG9fdGFza25hbWUsIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnIGxldmVsLgotICAgICAgIC1xLCAtLXF1aWV0ICAgICAgICAgICBPdXRwdXQgbGVzcyBsb2cgbWVzc2FnZSBkYXRhIHRvIHRoZSB0ZXJtaW5hbC4gWW91IGNhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoaXMgbW9yZSB0aGFuIG9uY2UuCi0gICAgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4KLSAgICAgICAtUyBTSUdOQVRVUkVfSEFORExFUiwgLS1kdW1wLXNpZ25hdHVyZXM9U0lHTkFUVVJFX0hBTkRMRVIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVtcCBvdXQgdGhlIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5mb3JtYXRpb24sIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gdGFzayBleGVjdXRpb24uIFRoZSBTSUdOQVRVUkVfSEFORExFUiBwYXJhbWV0ZXIgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLiBUd28gY29tbW9uIHZhbHVlcyBhcmUgbm9uZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRkaWZmIGJ1dCB0aGUgaGFuZGxlciBtYXkgZGVmaW5lIG1vcmUvbGVzcy4gbm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBvbmx5IGR1bXAgdGhlIHNpZ25hdHVyZSwgcHJpbnRkaWZmIG1lYW5zIGNvbXBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUgY2FjaGVkIG9uZS4KLSAgICAgICAtcCwgLS1wYXJzZS1vbmx5ICAgICAgUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLgotICAgICAgIC1zLCAtLXNob3ctdmVyc2lvbnMgICBTaG93IGN1cnJlbnQgYW5kIHByZWZlcnJlZCB2ZXJzaW9ucyBvZiBhbGwgcmVjaXBlcy4KLSAgICAgICAtZSwgLS1lbnZpcm9ubWVudCAgICAgU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQgY29tcGxldGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB2YXJpYWJsZXMgd2VyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQvY2hhbmdlZC4KLSAgICAgICAtZywgLS1ncmFwaHZpeiAgICAgICAgU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyBpbiB0aGUgZG90IHN5bnRheC4KLSAgICAgICAtSSBFWFRSQV9BU1NVTUVfUFJPVklERUQsIC0taWdub3JlLWRlcHM9RVhUUkFfQVNTVU1FX1BST1ZJREVECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIChlcXVpdmFsZW50IHRvIEFTU1VNRV9QUk9WSURFRCkuIFVzZWZ1bCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nCi0gICAgICAgLWwgREVCVUdfRE9NQUlOUywgLS1sb2ctZG9tYWlucz1ERUJVR19ET01BSU5TCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgZGVidWcgbG9nZ2luZyBmb3IgdGhlIHNwZWNpZmllZCBsb2dnaW5nIGRvbWFpbnMKLSAgICAgICAtUCwgLS1wcm9maWxlICAgICAgICAgUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLgotICAgICAgIC11IFVJLCAtLXVpPVVJICAgICAgICBUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChrbm90dHksIG5jdXJzZXMgb3IgdGFza2V4cAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGRlZmF1bHQga25vdHR5KS4KLSAgICAgICAtLXRva2VuPVhNTFJQQ1RPS0VOICAgU3BlY2lmeSB0aGUgY29ubmVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIuCi0gICAgICAgLS1yZXZpc2lvbnMtY2hhbmdlZCAgIFNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LgotICAgICAgIC0tc2VydmVyLW9ubHkgICAgICAgICBSdW4gYml0YmFrZSB3aXRob3V0IGEgVUksIG9ubHkgc3RhcnRpbmcgYSBzZXJ2ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvb2tlcikgcHJvY2Vzcy4KLSAgICAgICAtQiBCSU5ELCAtLWJpbmQ9QklORCAgVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2UgeG1scnBjIHNlcnZlciB0byBiaW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvLgotICAgICAgIC1UIFNFUlZFUl9USU1FT1VULCAtLWlkbGUtdGltZW91dD1TRVJWRVJfVElNRU9VVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGltZW91dCB0byB1bmxvYWQgYml0YmFrZSBzZXJ2ZXIgZHVlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYWN0aXZpdHksIHNldCB0byAtMSBtZWFucyBubyB1bmxvYWQsIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50IHZhcmlhYmxlIEJCX1NFUlZFUl9USU1FT1VULgotICAgICAgIC0tbm8tc2V0c2NlbmUgICAgICAgICBEbyBub3QgcnVuIGFueSBzZXRzY2VuZSB0YXNrcy4gc3N0YXRlIHdpbGwgYmUgaWdub3JlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnl0aGluZyBuZWVkZWQsIGJ1aWx0LgotICAgICAgIC0tc2V0c2NlbmUtb25seSAgICAgICBPbmx5IHJ1biBzZXRzY2VuZSB0YXNrcywgZG9uJ3QgcnVuIGFueSByZWFsIHRhc2tzLgotICAgICAgIC0tcmVtb3RlLXNlcnZlcj1SRU1PVEVfU0VSVkVSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuCi0gICAgICAgLW0sIC0ta2lsbC1zZXJ2ZXIgICAgIFRlcm1pbmF0ZSBhbnkgcnVubmluZyBiaXRiYWtlIHNlcnZlci4KLSAgICAgICAtLW9ic2VydmUtb25seSAgICAgICAgQ29ubmVjdCB0byBhIHNlcnZlciBhcyBhbiBvYnNlcnZpbmctb25seSBjbGllbnQuCi0gICAgICAgLS1zdGF0dXMtb25seSAgICAgICAgIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHJlbW90ZSBiaXRiYWtlIHNlcnZlci4KLSAgICAgICAtdyBXUklURUVWRU5UTE9HLCAtLXdyaXRlLWxvZz1XUklURUVWRU5UTE9HCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlcyB0aGUgZXZlbnQgbG9nIG9mIHRoZSBidWlsZCB0byBhIGJpdGJha2UgZXZlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiBmaWxlLiBVc2UgJycgKGVtcHR5IHN0cmluZykgdG8gYXNzaWduIHRoZSBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkuCi0gICAgICAgLS1ydW5hbGw9UlVOQUxMICAgICAgIFJ1biB0aGUgc3BlY2lmaWVkIHRhc2sgZm9yIGFueSByZWNpcGUgaW4gdGhlIHRhc2tncmFwaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3BlY2lmaWVkIHRhcmdldCAoZXZlbiBpZiBpdCB3b3VsZG4ndCBvdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBydW4pLgotICAgICAgIC0tcnVub25seT1SVU5PTkxZICAgICBSdW4gb25seSB0aGUgc3BlY2lmaWVkIHRhc2sgd2l0aGluIHRoZSB0YXNrZ3JhcGggb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCB0YXJnZXRzIChhbmQgYW55IHRhc2sgZGVwZW5kZW5jaWVzIHRob3NlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzIG1heSBoYXZlKS4KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nYml0YmFrZS1leGFtcGxlcyc+Ci0gICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc29tZSBleGFtcGxlcyBzaG93aW5nIGhvdyB0byB1c2UgQml0QmFrZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4YW1wbGUtZXhlY3V0aW5nLWEtdGFzay1hZ2FpbnN0LWEtc2luZ2xlLXJlY2lwZSc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBhIFRhc2sgQWdhaW5zdCBhIFNpbmdsZSBSZWNpcGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEV4ZWN1dGluZyB0YXNrcyBmb3IgYSBzaW5nbGUgcmVjaXBlIGZpbGUgaXMgcmVsYXRpdmVseSBzaW1wbGUuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBzcGVjaWZ5IHRoZSBmaWxlIGluIHF1ZXN0aW9uLCBhbmQgQml0QmFrZSBwYXJzZXMKLSAgICAgICAgICAgICAgICAgICAgaXQgYW5kIGV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgdGFzaywgQml0QmFrZSBleGVjdXRlcyB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICB0YXNrLCB3aGljaCBpcyAiYnVpbGTigJ0uCi0gICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugb2JleXMgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMgd2hlbiBkb2luZwotICAgICAgICAgICAgICAgICAgICBzby4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1bnMgdGhlIGJ1aWxkIHRhc2ssIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHRhc2ssIG9uIHRoZSA8ZmlsZW5hbWU+Zm9vXzEuMC5iYjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSAtYiBmb29fMS4wLmJiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1bnMgdGhlIGNsZWFuIHRhc2sgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb28uYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgLWIgZm9vLmJiIC1jIGNsZWFuCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgIi1iIiBvcHRpb24gZXhwbGljaXRseSBkb2VzIG5vdCBoYW5kbGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0aGFuIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGl0IGlzIGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgc3ludGF4IHByZXNlbnRlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4ZWN1dGluZy10YXNrcy1hZ2FpbnN0LWEtc2V0LW9mLXJlY2lwZS1maWxlcyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBUYXNrcyBBZ2FpbnN0IGEgU2V0IG9mIFJlY2lwZSBGaWxlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29tcGxleGl0aWVzIGludHJvZHVjZWQKLSAgICAgICAgICAgICAgICAgICAgd2hlbiBvbmUgd2FudHMgdG8gbWFuYWdlIG11bHRpcGxlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgQ2xlYXJseSB0aGVyZSBuZWVkcyB0byBiZSBhIHdheSB0byB0ZWxsIEJpdEJha2Ugd2hhdAotICAgICAgICAgICAgICAgICAgICBmaWxlcyBhcmUgYXZhaWxhYmxlIGFuZCwgb2YgdGhvc2UsIHdoaWNoIHlvdQotICAgICAgICAgICAgICAgICAgICB3YW50IHRvIGV4ZWN1dGUuCi0gICAgICAgICAgICAgICAgICAgIFRoZXJlIGFsc28gbmVlZHMgdG8gYmUgYSB3YXkgZm9yIGVhY2ggcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgIHRvIGV4cHJlc3MgaXRzIGRlcGVuZGVuY2llcywgYm90aCBmb3IgYnVpbGQtdGltZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgcnVudGltZS4KLSAgICAgICAgICAgICAgICAgICAgVGhlcmUgbXVzdCBiZSBhIHdheSBmb3IgeW91IHRvIGV4cHJlc3MgcmVjaXBlIHByZWZlcmVuY2VzCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIG9yIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIGEgcmVjaXBlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCB3aGVuIG5vdCB1c2luZwotICAgICAgICAgICAgICAgICAgICAiLS1idWlsZGZpbGUiIG9yICItYiIgb25seSBhY2NlcHRzIGEgIlBST1ZJREVTIi4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBwcm92aWRlIGFueXRoaW5nIGVsc2UuCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGEgcmVjaXBlIGZpbGUgZ2VuZXJhbGx5ICJQUk9WSURFUyIgaXRzCi0gICAgICAgICAgICAgICAgICAgICJwYWNrYWdlbmFtZSIgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBmb28KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSAiUFJPVklERVMiIHRoZSBwYWNrYWdlIG5hbWUgYW5kIGFsc28gdXNlcwotICAgICAgICAgICAgICAgICAgICB0aGUgIi1jIiBvcHRpb24gdG8gdGVsbCBCaXRCYWtlIHRvIGp1c3QgZXhlY3V0ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT4gdGFzazoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgLWMgY2xlYW4gZm9vCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleGVjdXRpbmctYS1saXN0LW9mLXRhc2stYW5kLXJlY2lwZS1jb21iaW5hdGlvbnMnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5FeGVjdXRpbmcgYSBMaXN0IG9mIFRhc2sgYW5kIFJlY2lwZSBDb21iaW5hdGlvbnM8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbW1hbmQgbGluZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIGRpZmZlcmVudAotICAgICAgICAgICAgICAgICAgICB0YXNrcyBmb3IgaW5kaXZpZHVhbCB0YXJnZXRzIHdoZW4geW91IHNwZWNpZnkgbXVsdGlwbGUKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCB0d28gdGFyZ2V0cyAob3IgcmVjaXBlcykKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15Zmlyc3RyZWNpcGU8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15c2Vjb25kcmVjaXBlPC9maWxlbmFtZT4gYW5kIHlvdSBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB0byBydW4gPGZpbGVuYW1lPnRhc2tBPC9maWxlbmFtZT4gZm9yIHRoZSBmaXJzdAotICAgICAgICAgICAgICAgICAgICByZWNpcGUgYW5kIDxmaWxlbmFtZT50YXNrQjwvZmlsZW5hbWU+IGZvciB0aGUgc2Vjb25kCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgbXlmaXJzdHJlY2lwZTpkb190YXNrQSBteXNlY29uZHJlY2lwZTpkb190YXNrQgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGluZy1kZXBlbmRlbmN5LWdyYXBocyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkdlbmVyYXRpbmcgRGVwZW5kZW5jeSBHcmFwaHM8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEJpdEJha2UgaXMgYWJsZSB0byBnZW5lcmF0ZSBkZXBlbmRlbmN5IGdyYXBocyB1c2luZwotICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvdDwvZmlsZW5hbWU+IHN5bnRheC4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjb252ZXJ0IHRoZXNlIGdyYXBocyBpbnRvIGltYWdlcyB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvdDwvZmlsZW5hbWU+IHRvb2wgZnJvbQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmdyYXBodml6Lm9yZyc+R3JhcGh2aXo8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IGdyYXBoLCBCaXRCYWtlIHdyaXRlcyB0d28gZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk6Ci0gICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT50YXNrLWRlcGVuZHMuZG90PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0YXNrcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBkZXBlbmRlbmNpZXMgbWF0Y2ggQml0QmFrZSdzIGludGVybmFsIHRhc2sgZXhlY3V0aW9uIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5wbi1idWlsZGxpc3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dzIGEgc2ltcGxlIGxpc3Qgb2YgdGFyZ2V0cyB0aGF0IGFyZSB0byBiZSBidWlsdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRvIHN0b3AgZGVwZW5kaW5nIG9uIGNvbW1vbiBkZXBlbmRzLCB1c2UgdGhlICItSSIgZGVwZW5kCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbiBhbmQgQml0QmFrZSBvbWl0cyB0aGVtIGZyb20gdGhlIGdyYXBoLgotICAgICAgICAgICAgICAgICAgICBMZWF2aW5nIHRoaXMgaW5mb3JtYXRpb24gb3V0IGNhbiBwcm9kdWNlIG1vcmUgcmVhZGFibGUgZ3JhcGhzLgotICAgICAgICAgICAgICAgICAgICBUaGlzIHdheSwgeW91IGNhbiByZW1vdmUgZnJvbSB0aGUgZ3JhcGgKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBmcm9tIGluaGVyaXRlZCBjbGFzc2VzCi0gICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMgdGhhdCBjcmVhdGUgZGVwZW5kZW5jeSBncmFwaHMuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBvbWl0cyBkZXBlbmRzIGNvbW1vbiBpbiBPcGVuRW1iZWRkZWQgZnJvbQotICAgICAgICAgICAgICAgICAgICB0aGUgZ3JhcGg6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIC1nIGZvbwotCi0gICAgICQgYml0YmFrZSAtZyAtSSB2aXJ0dWFsL2tlcm5lbCAtSSBlZ2xpYmMgZm9vCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleGVjdXRpbmctYS1tdWx0aXBsZS1jb25maWd1cmF0aW9uLWJ1aWxkJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIGEgTXVsdGlwbGUgQ29uZmlndXJhdGlvbiBCdWlsZDwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpcyBhYmxlIHRvIGJ1aWxkIG11bHRpcGxlIGltYWdlcyBvciBwYWNrYWdlcwotICAgICAgICAgICAgICAgICAgICB1c2luZyBhIHNpbmdsZSBjb21tYW5kIHdoZXJlIHRoZSBkaWZmZXJlbnQgdGFyZ2V0cwotICAgICAgICAgICAgICAgICAgICByZXF1aXJlIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyAobXVsdGlwbGUgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBidWlsZHMpLgotICAgICAgICAgICAgICAgICAgICBFYWNoIHRhcmdldCwgaW4gdGhpcyBzY2VuYXJpbywgaXMgcmVmZXJyZWQgdG8gYXMgYQotICAgICAgICAgICAgICAgICAgICAibXVsdGljb25maWciLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUbyBhY2NvbXBsaXNoIGEgbXVsdGlwbGUgY29uZmlndXJhdGlvbiBidWlsZCwgeW91IG11c3QKLSAgICAgICAgICAgICAgICAgICAgZGVmaW5lIGVhY2ggdGFyZ2V0J3MgY29uZmlndXJhdGlvbiBzZXBhcmF0ZWx5IHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIGEgcGFyYWxsZWwgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBmb3IgdGhlc2UgbXVsdGljb25maWcgY29uZmlndXJhdGlvbiBmaWxlcwotICAgICAgICAgICAgICAgICAgICBpcyBzcGVjaWZpYy4KLSAgICAgICAgICAgICAgICAgICAgVGhleSBtdXN0IHJlc2lkZSBpbiB0aGUgY3VycmVudCBidWlsZCBkaXJlY3RvcnkgaW4KLSAgICAgICAgICAgICAgICAgICAgYSBzdWItZGlyZWN0b3J5IG9mIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm11bHRpY29uZmlnPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZvciB0d28gc2VwYXJhdGUgdGFyZ2V0czoKLSAgICAgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2JiX211bHRpY29uZmlnX2ZpbGVzLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjRpbiIgZGVwdGg9IjNpbiIgLz4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyByZXF1aXJlZCBmaWxlIGhpZXJhcmNoeQotICAgICAgICAgICAgICAgICAgICBpcyBiZWNhdXNlIHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgaXMgbm90IGNvbnN0cnVjdGVkIHVudGlsIHRoZSBsYXllcnMgYXJlIHBhcnNlZC4KLSAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB1c2luZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFzIGEKLSAgICAgICAgICAgICAgICAgICAgcHJlLWNvbmZpZ3VyYXRpb24gZmlsZSBpcyBub3QgcG9zc2libGUgdW5sZXNzIGl0IGlzCi0gICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIE1pbmltYWxseSwgZWFjaCBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCBkZWZpbmUgdGhlCi0gICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYW5kIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IEJpdEJha2UgdXNlcwotICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICBTdWdnZXN0ZWQgcHJhY3RpY2UgZGljdGF0ZXMgdGhhdCB5b3UgZG8gbm90Ci0gICAgICAgICAgICAgICAgICAgIG92ZXJsYXAgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB1c2VkIGR1cmluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRzLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBc2lkZSBmcm9tIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCB5b3UgbXVzdCBhbHNvIGVuYWJsZSBCaXRCYWtlIHRvIHBlcmZvcm0gbXVsdGlwbGUKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBidWlsZHMuCi0gICAgICAgICAgICAgICAgICAgIEVuYWJsaW5nIGlzIGFjY29tcGxpc2hlZCBieSBzZXR0aW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJNVUxUSUNPTkZJRyc+PGZpbGVuYW1lPkJCTVVMVElDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgotICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgY29uZmlndXJhdGlvbiBmaWxlcwotICAgICAgICAgICAgICAgICAgICBmb3IgPGZpbGVuYW1lPnRhcmdldDE8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRhcmdldDI8L2ZpbGVuYW1lPiBkZWZpbmVkIGluIHRoZSBidWlsZAotICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgYm90aCBlbmFibGVzCi0gICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdG8gcGVyZm9ybSBtdWx0aXBsZSBjb25maWd1cmF0aW9uIGJ1aWxkcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSB0d28gZXh0cmEgbXVsdGljb25maWdzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCTVVMVElDT05GSUcgPSAidGFyZ2V0MSB0YXJnZXQyIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBpbiBwbGFjZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBoYXMgYmVlbiBlbmFibGVkIHRvIHBlcmZvcm0gbXVsdGlwbGUgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBidWlsZHMsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybSB0byBzdGFydCB0aGUKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBbbWM6PHJlcGxhY2VhYmxlPm11bHRpY29uZmlnbmFtZTwvcmVwbGFjZWFibGU+Ol08cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gW1tbbWM6PHJlcGxhY2VhYmxlPm11bHRpY29uZmlnbmFtZTwvcmVwbGFjZWFibGU+Ol08cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT5dIC4uLiBdCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZvciB0d28gZXh0cmEgbXVsdGljb25maWdzOgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFyZ2V0MTwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFyZ2V0MjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBtYzo6PHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IG1jOnRhcmdldDE6PHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IG1jOnRhcmdldDI6PHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdiYi1lbmFibGluZy1tdWx0aXBsZS1jb25maWd1cmF0aW9uLWJ1aWxkLWRlcGVuZGVuY2llcyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIE11bHRpcGxlIENvbmZpZ3VyYXRpb24gQnVpbGQgRGVwZW5kZW5jaWVzPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgZGVwZW5kZW5jaWVzIGNhbiBleGlzdCBiZXR3ZWVuIHRhcmdldHMKLSAgICAgICAgICAgICAgICAgICAgKG11bHRpY29uZmlncykgaW4gYSBtdWx0aXBsZSBjb25maWd1cmF0aW9uIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IGluIG9yZGVyIHRvIGJ1aWxkIGFuIGltYWdlCi0gICAgICAgICAgICAgICAgICAgIGZvciBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCB0aGUgcm9vdCBmaWxlc3lzdGVtIG9mCi0gICAgICAgICAgICAgICAgICAgIGFub3RoZXIgYnVpbGQgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSBuZWVkcyB0bwotICAgICAgICAgICAgICAgICAgICBleGlzdC4KLSAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbWFnZSBmb3IgdGhlIGZpcnN0IG11bHRpY29uZmlnIGRlcGVuZHMKLSAgICAgICAgICAgICAgICAgICAgb24gdGhlIHJvb3QgZmlsZXN5c3RlbSBvZiB0aGUgc2Vjb25kIG11bHRpY29uZmlnLgotICAgICAgICAgICAgICAgICAgICBUaGlzIGRlcGVuZGVuY3kgaXMgZXNzZW50aWFsbHkgdGhhdCB0aGUgdGFzayBpbiB0aGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgYnVpbGRzIG9uZSBtdWx0aWNvbmZpZyBpcyBkZXBlbmRlbnQgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gb2YgdGhlIHRhc2sgaW4gdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcwotICAgICAgICAgICAgICAgICAgICBhbm90aGVyIG11bHRpY29uZmlnLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgZGVwZW5kZW5jaWVzIGluIGEgbXVsdGlwbGUgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBidWlsZCwgeW91IG11c3QgZGVjbGFyZSB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZm9ybToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICA8cmVwbGFjZWFibGU+dGFza19vcl9wYWNrYWdlPC9yZXBsYWNlYWJsZT5bbWNkZXBlbmRzXSA9ICJtYzo8cmVwbGFjZWFibGU+ZnJvbV9tdWx0aWNvbmZpZzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT50b19tdWx0aWNvbmZpZzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT5yZWNpcGVfbmFtZTwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT50YXNrX29uX3doaWNoX3RvX2RlcGVuZDwvcmVwbGFjZWFibGU+IgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFRvIGJldHRlciBzaG93IGhvdyB0byB1c2UgdGhpcyBzdGF0ZW1lbnQsIGNvbnNpZGVyIGFuCi0gICAgICAgICAgICAgICAgICAgIGV4YW1wbGUgd2l0aCB0d28gbXVsdGljb25maWdzOiA8ZmlsZW5hbWU+dGFyZ2V0MTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+dGFyZ2V0MjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIDxyZXBsYWNlYWJsZT5pbWFnZV90YXNrPC9yZXBsYWNlYWJsZT5bbWNkZXBlbmRzXSA9ICJtYzp0YXJnZXQxOnRhcmdldDI6PHJlcGxhY2VhYmxlPmltYWdlMjwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT5yb290ZnNfdGFzazwvcmVwbGFjZWFibGU+IgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5mcm9tX211bHRpY29uZmlnPC9yZXBsYWNlYWJsZT4gaXMgInRhcmdldDEiIGFuZAotICAgICAgICAgICAgICAgICAgICB0aGUgPHJlcGxhY2VhYmxlPnRvX211bHRpY29uZmlnPC9yZXBsYWNlYWJsZT4gaXMgInRhcmdldDIiLgotICAgICAgICAgICAgICAgICAgICBUaGUgdGFzayBvbiB3aGljaCB0aGUgaW1hZ2Ugd2hvc2UgcmVjaXBlIGNvbnRhaW5zCi0gICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5pbWFnZV90YXNrPC9yZXBsYWNlYWJsZT4gZGVwZW5kcyBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbiBvZiB0aGUgPHJlcGxhY2VhYmxlPnJvb3Rmc190YXNrPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCBvdXQgPHJlcGxhY2VhYmxlPmltYWdlMjwvcmVwbGFjZWFibGU+LCB3aGljaAotICAgICAgICAgICAgICAgICAgICBpcyBhc3NvY2lhdGVkIHdpdGggdGhlICJ0YXJnZXQyIiBtdWx0aWNvbmZpZy4KLSAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgT25jZSB5b3Ugc2V0IHVwIHRoaXMgZGVwZW5kZW5jeSwgeW91IGNhbiBidWlsZCB0aGUKLSAgICAgICAgICAgICAgICAgICAidGFyZ2V0MSIgbXVsdGljb25maWcgdXNpbmcgYSBCaXRCYWtlIGNvbW1hbmQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBtYzp0YXJnZXQxOjxyZXBsYWNlYWJsZT5pbWFnZTE8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZXhlY3V0ZXMgYWxsIHRoZSB0YXNrcyBuZWVkZWQgdG8gY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmltYWdlMTwvcmVwbGFjZWFibGU+IGZvciB0aGUgInRhcmdldDEiCi0gICAgICAgICAgICAgICAgICAgbXVsdGljb25maWcuCi0gICAgICAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGUgZGVwZW5kZW5jeSwgQml0QmFrZSBhbHNvIGV4ZWN1dGVzIHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICB0aGUgPHJlcGxhY2VhYmxlPnJvb3Rmc190YXNrPC9yZXBsYWNlYWJsZT4gZm9yIHRoZSAidGFyZ2V0MiIKLSAgICAgICAgICAgICAgICAgICBtdWx0aWNvbmZpZyBidWlsZC4KLSAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgSGF2aW5nIGEgcmVjaXBlIGRlcGVuZCBvbiB0aGUgcm9vdCBmaWxlc3lzdGVtIG9mIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICBidWlsZCBtaWdodCBub3Qgc2VlbSB0aGF0IHVzZWZ1bC4KLSAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGlzIGNoYW5nZSB0byB0aGUgc3RhdGVtZW50IGluIHRoZQotICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5pbWFnZTE8L3JlcGxhY2VhYmxlPiByZWNpcGU6Ci0gICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICA8cmVwbGFjZWFibGU+aW1hZ2VfdGFzazwvcmVwbGFjZWFibGU+W21jZGVwZW5kc10gPSAibWM6dGFyZ2V0MTp0YXJnZXQyOjxyZXBsYWNlYWJsZT5pbWFnZTI8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+aW1hZ2VfdGFzazwvcmVwbGFjZWFibGU+IgotICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIEJpdEJha2UgbXVzdCBjcmVhdGUKLSAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+aW1hZ2UyPC9yZXBsYWNlYWJsZT4gZm9yIHRoZSAidGFyZ2V0MiIKLSAgICAgICAgICAgICAgICAgICBidWlsZCBzaW5jZSB0aGUgInRhcmdldDEiIGJ1aWxkIGRlcGVuZHMgb24gaXQuCi0gICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgInRhcmdldDEiIGFuZCAidGFyZ2V0MiIgYXJlIGVuYWJsZWQgZm9yIG11bHRpcGxlCi0gICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBidWlsZHMgYW5kIGhhdmUgc2VwYXJhdGUgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgIGZpbGVzLCBCaXRCYWtlIHBsYWNlcyB0aGUgYXJ0aWZhY3RzIGZvciBlYWNoIGJ1aWxkIGluIHRoZQotICAgICAgICAgICAgICAgICAgIHJlc3BlY3RpdmUgdGVtcG9yYXJ5IGJ1aWxkIGRpcmVjdG9yaWVzLgotICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEucnN0IGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEucnN0CmluZGV4IGVjNWQwODUuLjdlYTY4YWQgMTAwNjQ0Ci0tLSBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnJzdAorKysgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS5yc3QKQEAgLTUxNiw4ICs1MTYsOCBAQAogLSAgKlNlbGVjdGluZyBhIFZhcmlhYmxlOiogVGhlIGBgT1ZFUlJJREVTYGAgdmFyaWFibGUgaXMgYQogICAgY29sb24tY2hhcmFjdGVyLXNlcGFyYXRlZCBsaXN0IHRoYXQgY29udGFpbnMgaXRlbXMgZm9yIHdoaWNoIHlvdSB3YW50CiAgICB0byBzYXRpc2Z5IGNvbmRpdGlvbnMuIFRodXMsIGlmIHlvdSBoYXZlIGEgdmFyaWFibGUgdGhhdCBpcwotICAgY29uZGl0aW9uYWwgb24g4oCcYXJt4oCdLCBhbmQg4oCcYXJt4oCdIGlzIGluIGBgT1ZFUlJJREVTYGAsIHRoZW4gdGhlCi0gICDigJxhcm3igJ0tc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgdmFyaWFibGUgaXMgdXNlZCByYXRoZXIgdGhhbiB0aGUKKyAgIGNvbmRpdGlvbmFsIG9uICJhcm0iLCBhbmQgImFybSIgaXMgaW4gYGBPVkVSUklERVNgYCwgdGhlbiB0aGUKKyAgICJhcm0iLXNwZWNpZmljIHZlcnNpb24gb2YgdGhlIHZhcmlhYmxlIGlzIHVzZWQgcmF0aGVyIHRoYW4gdGhlCiAgICBub24tY29uZGl0aW9uYWwgdmVyc2lvbi4gSGVyZSBpcyBhbiBleGFtcGxlOiA6OgogCiAgICAgICBPVkVSUklERVMgPSAiYXJjaGl0ZWN0dXJlOm9zOm1hY2hpbmUiCkBAIC0xOTE3LDggKzE5MTcsOCBAQAogZm9ybWF0IHRoYXQgYWxsb3dzIHlvdSB0byBleGFtaW5lIHRoZSBpbnB1dHMgdXNlZCB3aGVuIHRoZSBPcGVuRW1iZWRkZWQKIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgc2lnbmF0dXJlcy4gRm9yIGV4YW1wbGUsIHVzaW5nCiBgYGJpdGJha2UtZHVtcHNpZ3NgYCBhbGxvd3MgeW91IHRvIGV4YW1pbmUgdGhlIGBgZG9fY29tcGlsZWBgIHRhc2sncwot4oCcc2lnZGF0YeKAnSBmb3IgYSBDIGFwcGxpY2F0aW9uIChlLmcuIGBgYmFzaGBgKS4gUnVubmluZyB0aGUgY29tbWFuZCBhbHNvCi1yZXZlYWxzIHRoYXQgdGhlIOKAnEND4oCdIHZhcmlhYmxlIGlzIHBhcnQgb2YgdGhlIGlucHV0cyB0aGF0IGFyZSBoYXNoZWQuCisic2lnZGF0YSIgZm9yIGEgQyBhcHBsaWNhdGlvbiAoZS5nLiBgYGJhc2hgYCkuIFJ1bm5pbmcgdGhlIGNvbW1hbmQgYWxzbworcmV2ZWFscyB0aGF0IHRoZSAiQ0MiIHZhcmlhYmxlIGlzIHBhcnQgb2YgdGhlIGlucHV0cyB0aGF0IGFyZSBoYXNoZWQuCiBBbnkgY2hhbmdlcyB0byB0aGlzIHZhcmlhYmxlIHdvdWxkIGludmFsaWRhdGUgdGhlIHN0YW1wIGFuZCBjYXVzZSB0aGUKIGBgZG9fY29tcGlsZWBgIHRhc2sgdG8gcnVuLgogCmRpZmYgLS1naXQgYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYTUzMjEuLjAwMDAwMDAKLS0tIGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjg2MiArMCwwIEBACi08IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCi0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KLQotPGNoYXB0ZXIgaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEiPgotICAgIDx0aXRsZT5TeW50YXggYW5kIE9wZXJhdG9yczwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgQml0QmFrZSBmaWxlcyBoYXZlIHRoZWlyIG93biBzeW50YXguCi0gICAgICAgIFRoZSBzeW50YXggaGFzIHNpbWlsYXJpdGllcyB0byBzZXZlcmFsCi0gICAgICAgIG90aGVyIGxhbmd1YWdlcyBidXQgYWxzbyBoYXMgc29tZSB1bmlxdWUgZmVhdHVyZXMuCi0gICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGF2YWlsYWJsZSBzeW50YXggYW5kIG9wZXJhdG9ycwotICAgICAgICBhcyB3ZWxsIGFzIHByb3ZpZGVzIGV4YW1wbGVzLgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSdiYXNpYy1zeW50YXgnPgotICAgICAgICA8dGl0bGU+QmFzaWMgU3ludGF4PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJhc2ljIHN5bnRheCBleGFtcGxlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdiYXNpYy12YXJpYWJsZS1zZXR0aW5nJz4KLSAgICAgICAgICAgIDx0aXRsZT5CYXNpYyBWYXJpYWJsZSBTZXR0aW5nPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNldHMgPGZpbGVuYW1lPlZBUklBQkxFPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAidmFsdWUiLgotICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBvY2N1cnMgaW1tZWRpYXRlbHkgYXMgdGhlIHN0YXRlbWVudCBpcyBwYXJzZWQuCi0gICAgICAgICAgICAgICAgSXQgaXMgYSAiaGFyZCIgYXNzaWdubWVudC4KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFZBUklBQkxFID0gInZhbHVlIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBBcyBleHBlY3RlZCwgaWYgeW91IGluY2x1ZGUgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMgYXMgcGFydCBvZgotICAgICAgICAgICAgICAgIGFuIGFzc2lnbm1lbnQsIHRoZSBzcGFjZXMgYXJlIHJldGFpbmVkOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgVkFSSUFCTEUgPSAiIHZhbHVlIgotICAgICBWQVJJQUJMRSA9ICJ2YWx1ZSAiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPlZBUklBQkxFPC9maWxlbmFtZT4gdG8gIiIgc2V0cyBpdCB0byBhbiBlbXB0eSBzdHJpbmcsCi0gICAgICAgICAgICAgICAgd2hpbGUgc2V0dGluZyB0aGUgdmFyaWFibGUgdG8gIiAiIHNldHMgaXQgdG8gYSBibGFuayBzcGFjZQotICAgICAgICAgICAgICAgIChpLmUuIHRoZXNlIGFyZSBub3QgdGhlIHNhbWUgdmFsdWVzKS4KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFZBUklBQkxFID0gIiIKLSAgICAgVkFSSUFCTEUgPSAiICIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHNpbmdsZSBxdW90ZXMgaW5zdGVhZCBvZiBkb3VibGUgcXVvdGVzCi0gICAgICAgICAgICAgICAgd2hlbiBzZXR0aW5nIGEgdmFyaWFibGUncyB2YWx1ZS4KLSAgICAgICAgICAgICAgICBEb2luZyBzbyBhbGxvd3MgeW91IHRvIHVzZSB2YWx1ZXMgdGhhdCBjb250YWluIHRoZSBkb3VibGUKLSAgICAgICAgICAgICAgICBxdW90ZSBjaGFyYWN0ZXI6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBWQVJJQUJMRSA9ICdJIGhhdmUgYSAiIGluIG15IHZhbHVlJwotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgVW5saWtlIGluIEJvdXJuZSBzaGVsbHMsIHNpbmdsZSBxdW90ZXMgd29yayBpZGVudGljYWxseQotICAgICAgICAgICAgICAgICAgICB0byBkb3VibGUgcXVvdGVzIGluIGFsbCBvdGhlciB3YXlzLgotICAgICAgICAgICAgICAgICAgICBUaGV5IGRvIG5vdCBzdXBwcmVzcyB2YXJpYWJsZSBleHBhbnNpb25zLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdtb2RpZnlpbmctZXhpc3RpbmctdmFyaWFibGVzJz4KLSAgICAgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgRXhpc3RpbmcgVmFyaWFibGVzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSBuZWVkIHRvIG1vZGlmeSBleGlzdGluZyB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGNhc2VzIHdoZXJlIHlvdSBtaWdodCBmaW5kIHlvdSB3YW50IHRvCi0gICAgICAgICAgICAgICAgbW9kaWZ5IGFuIGV4aXN0aW5nIHZhcmlhYmxlOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWl6ZSBhIHJlY2lwZSB0aGF0IHVzZXMgdGhlIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSBhIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZSB1c2VkIGluIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSB0aGUgdmFyaWFibGUgaW4gYSA8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHRvIG92ZXJyaWRlIHRoZSB2YXJpYWJsZSBpbiB0aGUgb3JpZ2luYWwgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSB0aGUgdmFyaWFibGUgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUgc28gdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG92ZXJyaWRlcyBhbiBleGlzdGluZyBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIENoYW5naW5nIGEgdmFyaWFibGUgdmFsdWUgY2FuIHNvbWV0aW1lcyBkZXBlbmQgb24gaG93IHRoZQotICAgICAgICAgICAgICAgIHZhbHVlIHdhcyBvcmlnaW5hbGx5IGFzc2lnbmVkIGFuZCBhbHNvIG9uIHRoZSBkZXNpcmVkCi0gICAgICAgICAgICAgICAgaW50ZW50IG9mIHRoZSBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgd2hlbiB5b3UgYXBwZW5kIGEgdmFsdWUgdG8gYSB2YXJpYWJsZSB0aGF0Ci0gICAgICAgICAgICAgICAgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIHJlc3VsdGluZyB2YWx1ZSBtaWdodCBub3QgYmUgd2hhdAotICAgICAgICAgICAgICAgIHlvdSBleHBlY3QuCi0gICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgdmFsdWUgeW91IHByb3ZpZGUgbWlnaHQgcmVwbGFjZSB0aGUgdmFsdWUKLSAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBhcHBlbmQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIGFmdGVyIHlvdSBoYXZlIGNoYW5nZWQgYSB2YXJpYWJsZSdzIHZhbHVlIGFuZCBzb21ldGhpbmcKLSAgICAgICAgICAgICAgICB1bmV4cGxhaW5lZCBvY2N1cnMsIHlvdSBjYW4gdXNlIEJpdEJha2UgdG8gY2hlY2sgdGhlIGFjdHVhbAotICAgICAgICAgICAgICAgIHZhbHVlIG9mIHRoZSBzdXNwZWN0IHZhcmlhYmxlLgotICAgICAgICAgICAgICAgIFlvdSBjYW4gbWFrZSB0aGVzZSBjaGVja3MgZm9yIGJvdGggY29uZmlndXJhdGlvbiBhbmQgcmVjaXBlCi0gICAgICAgICAgICAgICAgbGV2ZWwgY2hhbmdlczoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCB1c2UgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIC1lCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZGlzcGxheXMgdmFyaWFibGUgdmFsdWVzIGFmdGVyIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyAoaS5lLiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGgpIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gcGFyc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVzIHRoYXQgYXJlIGV4cG9ydGVkIHRvIHRoZSBlbnZpcm9ubWVudCBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRlZCBieSB0aGUgc3RyaW5nICJleHBvcnQiIGluIHRoZSBjb21tYW5kJ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlY2lwZSBjaGFuZ2VzLCB1c2UgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiAtZSB8IGdyZXAgVkFSSUFCTEU9IgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNoZWNrcyB0byBzZWUgaWYgdGhlIHZhcmlhYmxlIGFjdHVhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlcyBpdCBpbnRvIGEgc3BlY2lmaWMgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nbGluZS1qb2luaW5nJz4KLSAgICAgICAgICAgIDx0aXRsZT5MaW5lIEpvaW5pbmc8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBPdXRzaWRlIG9mCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZnVuY3Rpb25zJz5mdW5jdGlvbnM8L2xpbms+LCBCaXRCYWtlIGpvaW5zCi0gICAgICAgICAgICAgICAgYW55IGxpbmUgZW5kaW5nIGluIGEgYmFja3NsYXNoIGNoYXJhY3RlciAoIlwiKQotICAgICAgICAgICAgICAgIHdpdGggdGhlIGZvbGxvd2luZyBsaW5lIGJlZm9yZSBwYXJzaW5nIHN0YXRlbWVudHMuCi0gICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHVzZSBmb3IgdGhlICJcIiBjaGFyYWN0ZXIgaXMgdG8gc3BsaXQgdmFyaWFibGUKLSAgICAgICAgICAgICAgICBhc3NpZ25tZW50cyBvdmVyIG11bHRpcGxlIGxpbmVzLCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBGT08gPSAiYmFyIFwKLSAgICAgICAgICAgIGJheiBcCi0gICAgICAgICAgICBxYXoiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEJvdGggdGhlICJcIiBjaGFyYWN0ZXIgYW5kIHRoZSBuZXdsaW5lIGNoYXJhY3RlcgotICAgICAgICAgICAgICAgIHRoYXQgZm9sbG93IGl0IGFyZSByZW1vdmVkIHdoZW4gam9pbmluZyBsaW5lcy4KLSAgICAgICAgICAgICAgICBUaHVzLCBubyBuZXdsaW5lIGNoYXJhY3RlcnMgZW5kIHVwIGluIHRoZSB2YWx1ZSBvZgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBhZGRpdGlvbmFsIGV4YW1wbGUgd2hlcmUgdGhlIHR3bwotICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzIGJvdGggYXNzaWduICJiYXJiYXoiIHRvCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgRk9PID0gImJhcmJheiIKLQotICAgICBGT08gPSAiYmFyXAotICAgICBiYXoiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGRvZXMgbm90IGludGVycHJldCBlc2NhcGUgc2VxdWVuY2VzIGxpa2UKLSAgICAgICAgICAgICAgICAgICAgIlxuIiBpbiB2YXJpYWJsZSB2YWx1ZXMuCi0gICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSB0byBoYXZlIGFuIGVmZmVjdCwgdGhlIHZhbHVlIG11c3QgYmUgcGFzc2VkCi0gICAgICAgICAgICAgICAgICAgIHRvIHNvbWUgdXRpbGl0eSB0aGF0IGludGVycHJldHMgZXNjYXBlIHNlcXVlbmNlcywKLSAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+cHJpbnRmPC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVjaG8gLW48L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtZXhwYW5zaW9uJz4KLSAgICAgICAgICAgIDx0aXRsZT5WYXJpYWJsZSBFeHBhbnNpb248L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBWYXJpYWJsZXMgY2FuIHJlZmVyZW5jZSB0aGUgY29udGVudHMgb2Ygb3RoZXIgdmFyaWFibGVzCi0gICAgICAgICAgICAgICAgdXNpbmcgYSBzeW50YXggdGhhdCBpcyBzaW1pbGFyIHRvIHZhcmlhYmxlIGV4cGFuc2lvbiBpbgotICAgICAgICAgICAgICAgIEJvdXJuZSBzaGVsbHMuCi0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBhc3NpZ25tZW50cwotICAgICAgICAgICAgICAgIHJlc3VsdCBpbiBBIGNvbnRhaW5pbmcgImF2YWwiIGFuZCBCIGV2YWx1YXRpbmcgdG8gInByZWF2YWxwb3N0Ii4KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEEgPSAiYXZhbCIKLSAgICAgQiA9ICJwcmUke0F9cG9zdCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFVubGlrZSBpbiBCb3VybmUgc2hlbGxzLCB0aGUgY3VybHkgYnJhY2VzIGFyZSBtYW5kYXRvcnk6Ci0gICAgICAgICAgICAgICAgICAgIE9ubHkgPGZpbGVuYW1lPiR7Rk9PfTwvZmlsZW5hbWU+IGFuZCBub3QKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiRGT088L2ZpbGVuYW1lPiBpcyByZWNvZ25pemVkIGFzIGFuIGV4cGFuc2lvbiBvZgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIFRoZSAiPSIgb3BlcmF0b3IgZG9lcyBub3QgaW1tZWRpYXRlbHkgZXhwYW5kIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgcmVmZXJlbmNlcyBpbiB0aGUgcmlnaHQtaGFuZCBzaWRlLgotICAgICAgICAgICAgICAgIEluc3RlYWQsIGV4cGFuc2lvbiBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgdmFyaWFibGUgYXNzaWduZWQgdG8KLSAgICAgICAgICAgICAgICBpcyBhY3R1YWxseSB1c2VkLgotICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIHJlZmVyZW5jZWQKLSAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3VsZCBjbGFyaWZ5IHRoaXMgYmVoYXZpb3I6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBBID0gIiR7Qn0gYmF6IgotICAgICBCID0gIiR7Q30gYmFyIgotICAgICBDID0gImZvbyIKLSAgICAgKkF0IHRoaXMgcG9pbnQsICR7QX0gZXF1YWxzICJmb28gYmFyIGJheiIqCi0gICAgIEMgPSAicXV4IgotICAgICAqQXQgdGhpcyBwb2ludCwgJHtBfSBlcXVhbHMgInF1eCBiYXIgYmF6IioKLSAgICAgQiA9ICJub3JmIgotICAgICAqQXQgdGhpcyBwb2ludCwgJHtBfSBlcXVhbHMgIm5vcmYgYmF6IioKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgQ29udHJhc3QgdGhpcyBiZWhhdmlvciB3aXRoIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2ltbWVkaWF0ZS12YXJpYWJsZS1leHBhbnNpb24nPmltbWVkaWF0ZSB2YXJpYWJsZSBleHBhbnNpb248L2xpbms+Ci0gICAgICAgICAgICAgICAgb3BlcmF0b3IgKGkuZS4gIjo9IikuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIHRoZSB2YXJpYWJsZSBleHBhbnNpb24gc3ludGF4IGlzIHVzZWQgb24gYSB2YXJpYWJsZSB0aGF0Ci0gICAgICAgICAgICAgICAgZG9lcyBub3QgZXhpc3QsIHRoZSBzdHJpbmcgaXMga2VwdCBhcyBpcy4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBhc3NpZ25tZW50LAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQVI8L2ZpbGVuYW1lPiBleHBhbmRzIHRvIHRoZSBsaXRlcmFsIHN0cmluZwotICAgICAgICAgICAgICAgICIke0ZPT30iIGFzIGxvbmcgYXMgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQkFSID0gIiR7Rk9PfSIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy1hLWRlZmF1bHQtdmFsdWUnPgotICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgYSBkZWZhdWx0IHZhbHVlICg/PSk8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgIj89IiBvcGVyYXRvciB0byBhY2hpZXZlIGEgInNvZnRlciIgYXNzaWdubWVudAotICAgICAgICAgICAgICAgIGZvciBhIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBhc3NpZ25tZW50IGFsbG93cyB5b3UgdG8gZGVmaW5lIGEgdmFyaWFibGUgaWYgaXQKLSAgICAgICAgICAgICAgICBpcyB1bmRlZmluZWQgd2hlbiB0aGUgc3RhdGVtZW50IGlzIHBhcnNlZCwgYnV0IHRvIGxlYXZlIHRoZQotICAgICAgICAgICAgICAgIHZhbHVlIGFsb25lIGlmIHRoZSB2YXJpYWJsZSBoYXMgYSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBBID89ICJhdmFsIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHNldCBhdCB0aGUgdGltZSB0aGlzIHN0YXRlbWVudCBpcyBwYXJzZWQsCi0gICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIHJldGFpbnMgaXRzIHZhbHVlLgotICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgbm90IHNldCwKLSAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgaXMgc2V0IHRvICJhdmFsIi4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBhc3NpZ25tZW50IGlzIGltbWVkaWF0ZS4KLSAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBtdWx0aXBsZSAiPz0iIGFzc2lnbm1lbnRzCi0gICAgICAgICAgICAgICAgICAgIHRvIGEgc2luZ2xlIHZhcmlhYmxlIGV4aXN0LCB0aGUgZmlyc3Qgb2YgdGhvc2UgZW5kcyB1cCBnZXR0aW5nCi0gICAgICAgICAgICAgICAgICAgIHVzZWQuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctYS13ZWFrLWRlZmF1bHQtdmFsdWUnPgotICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgYSB3ZWFrIGRlZmF1bHQgdmFsdWUgKD8/PSk8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSAid2Vha2VyIiBhc3NpZ25tZW50IHRoYW4gaW4gdGhlCi0gICAgICAgICAgICAgICAgcHJldmlvdXMgc2VjdGlvbiBieSB1c2luZyB0aGUgIj8/PSIgb3BlcmF0b3IuCi0gICAgICAgICAgICAgICAgVGhpcyBhc3NpZ25tZW50IGJlaGF2ZXMgaWRlbnRpY2FsIHRvICI/PSIgZXhjZXB0IHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgYXNzaWdubWVudCBpcyBtYWRlIGF0IHRoZSBlbmQgb2YgdGhlIHBhcnNpbmcgcHJvY2VzcyByYXRoZXIKLSAgICAgICAgICAgICAgICB0aGFuIGltbWVkaWF0ZWx5LgotICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgd2hlbiBtdWx0aXBsZSAiPz89IiBhc3NpZ25tZW50cyBleGlzdCwgdGhlIGxhc3QKLSAgICAgICAgICAgICAgICBvbmUgaXMgdXNlZC4KLSAgICAgICAgICAgICAgICBBbHNvLCBhbnkgIj0iIG9yICI/PSIgYXNzaWdubWVudCB3aWxsIG92ZXJyaWRlIHRoZSB2YWx1ZSBzZXQgd2l0aAotICAgICAgICAgICAgICAgICI/Pz0iLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEEgPz89ICJzb21ldmFsdWUiCi0gICAgIEEgPz89ICJzb21lb3RoZXJ2YWx1ZSIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgYmVmb3JlIHRoZSBhYm92ZSBzdGF0ZW1lbnRzIGFyZSBwYXJzZWQsCi0gICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIHJldGFpbnMgaXRzIHZhbHVlLgotICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgbm90IHNldCwKLSAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgaXMgc2V0IHRvICJzb21lb3RoZXJ2YWx1ZSIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFnYWluLCB0aGlzIGFzc2lnbm1lbnQgaXMgYSAibGF6eSIgb3IgIndlYWsiIGFzc2lnbm1lbnQKLSAgICAgICAgICAgICAgICBiZWNhdXNlIGl0IGRvZXMgbm90IG9jY3VyIHVudGlsIHRoZSBlbmQKLSAgICAgICAgICAgICAgICBvZiB0aGUgcGFyc2luZyBwcm9jZXNzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2ltbWVkaWF0ZS12YXJpYWJsZS1leHBhbnNpb24nPgotICAgICAgICAgICAgPHRpdGxlPkltbWVkaWF0ZSB2YXJpYWJsZSBleHBhbnNpb24gKDo9KTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSAiOj0iIG9wZXJhdG9yIHJlc3VsdHMgaW4gYSB2YXJpYWJsZSdzCi0gICAgICAgICAgICAgICAgY29udGVudHMgYmVpbmcgZXhwYW5kZWQgaW1tZWRpYXRlbHksCi0gICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gd2hlbiB0aGUgdmFyaWFibGUgaXMgYWN0dWFsbHkgdXNlZDoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFQgPSAiMTIzIgotICAgICBBIDo9ICJ0ZXN0ICR7VH0iCi0gICAgIFQgPSAiNDU2IgotICAgICBCIDo9ICIke1R9ICR7Q30iCi0gICAgIEMgPSAiY3ZhbCIKLSAgICAgQyA6PSAiJHtDfWFwcGVuZCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGNvbnRhaW5zCi0gICAgICAgICAgICAgICAgInRlc3QgMTIzIiwgZXZlbiB0aG91Z2ggdGhlIGZpbmFsIHZhbHVlIG9mIDxmaWxlbmFtZT5UPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBpcyAiNDU2Ii4KLSAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiB3aWxsIGVuZCB1cCBjb250YWluaW5nICI0NTYgY3ZhbGFwcGVuZCIuCi0gICAgICAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHJlZmVyZW5jZXMgdG8gdW5kZWZpbmVkIHZhcmlhYmxlcyBhcmUgcHJlc2VydmVkIGFzIGlzCi0gICAgICAgICAgICAgICAgZHVyaW5nIChpbW1lZGlhdGUpZXhwYW5zaW9uLiBUaGlzIGlzIGluIGNvbnRyYXN0IHRvIEdOVSBNYWtlLCB3aGVyZSB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZXhwYW5kIHRvIG5vdGhpbmcuCi0gICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5DPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjb250YWlucyAiY3ZhbGFwcGVuZCIgc2luY2UgPGZpbGVuYW1lPiR7Q308L2ZpbGVuYW1lPiBpbW1lZGlhdGVseQotICAgICAgICAgICAgICAgIGV4cGFuZHMgdG8gImN2YWwiLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZyc+Ci0gICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICgrPSkgYW5kIHByZXBlbmRpbmcgKD0rKSBXaXRoIFNwYWNlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFwcGVuZGluZyBhbmQgcHJlcGVuZGluZyB2YWx1ZXMgaXMgY29tbW9uIGFuZCBjYW4gYmUgYWNjb21wbGlzaGVkCi0gICAgICAgICAgICAgICAgdXNpbmcgdGhlICIrPSIgYW5kICI9KyIgb3BlcmF0b3JzLgotICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyBpbnNlcnQgYSBzcGFjZSBiZXR3ZWVuIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgdmFsdWUgYW5kIHByZXBlbmRlZCBvciBhcHBlbmRlZCB2YWx1ZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlc2Ugb3BlcmF0b3JzIHRha2UgaW1tZWRpYXRlIGVmZmVjdCBkdXJpbmcgcGFyc2luZy4KLSAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQiA9ICJidmFsIgotICAgICBCICs9ICJhZGRpdGlvbmFsZGF0YSIKLSAgICAgQyA9ICJjdmFsIgotICAgICBDID0rICJ0ZXN0IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBjb250YWlucwotICAgICAgICAgICAgICAgICJidmFsIGFkZGl0aW9uYWxkYXRhIiBhbmQgPGZpbGVuYW1lPkM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGNvbnRhaW5zICJ0ZXN0IGN2YWwiLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZy13aXRob3V0LXNwYWNlcyc+Ci0gICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICguPSkgYW5kIFByZXBlbmRpbmcgKD0uKSBXaXRob3V0IFNwYWNlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGFwcGVuZCBvciBwcmVwZW5kIHZhbHVlcyB3aXRob3V0IGFuCi0gICAgICAgICAgICAgICAgaW5zZXJ0ZWQgc3BhY2UsIHVzZSB0aGUgIi49IiBhbmQgIj0uIiBvcGVyYXRvcnMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyB0YWtlIGltbWVkaWF0ZSBlZmZlY3QgZHVyaW5nIHBhcnNpbmcuCi0gICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEIgPSAiYnZhbCIKLSAgICAgQiAuPSAiYWRkaXRpb25hbGRhdGEiCi0gICAgIEMgPSAiY3ZhbCIKLSAgICAgQyA9LiAidGVzdCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gY29udGFpbnMKLSAgICAgICAgICAgICAgICAiYnZhbGFkZGl0aW9uYWxkYXRhIiBhbmQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGNvbnRhaW5zICJ0ZXN0Y3ZhbCIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nYXBwZW5kaW5nLWFuZC1wcmVwZW5kaW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+Ci0gICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nIGFuZCBQcmVwZW5kaW5nIChPdmVycmlkZSBTdHlsZSBTeW50YXgpPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGFwcGVuZCBhbmQgcHJlcGVuZCBhIHZhcmlhYmxlJ3MgdmFsdWUKLSAgICAgICAgICAgICAgICB1c2luZyBhbiBvdmVycmlkZSBzdHlsZSBzeW50YXguCi0gICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgc3ludGF4LCBubyBzcGFjZXMgYXJlIGluc2VydGVkLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGVzZSBvcGVyYXRvcnMgZGlmZmVyIGZyb20gdGhlICI6PSIsICIuPSIsICI9LiIsICIrPSIsIGFuZCAiPSsiCi0gICAgICAgICAgICAgICAgb3BlcmF0b3JzIGluIHRoYXQgdGhlaXIgZWZmZWN0cyBhcmUgYXBwbGllZCBhdCB2YXJpYWJsZQotICAgICAgICAgICAgICAgIGV4cGFuc2lvbiB0aW1lIHJhdGhlciB0aGFuIGJlaW5nIGltbWVkaWF0ZWx5IGFwcGxpZWQuCi0gICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEIgPSAiYnZhbCIKLSAgICAgQl9hcHBlbmQgPSAiIGFkZGl0aW9uYWwgZGF0YSIKLSAgICAgQyA9ICJjdmFsIgotICAgICBDX3ByZXBlbmQgPSAiYWRkaXRpb25hbCBkYXRhICIKLSAgICAgRCA9ICJkdmFsIgotICAgICBEX2FwcGVuZCA9ICJhZGRpdGlvbmFsIGRhdGEiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGJlY29tZXMKLSAgICAgICAgICAgICAgICAiYnZhbCBhZGRpdGlvbmFsIGRhdGEiIGFuZCA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGJlY29tZXMKLSAgICAgICAgICAgICAgICAiYWRkaXRpb25hbCBkYXRhIGN2YWwiLgotICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+RDwvZmlsZW5hbWU+IGJlY29tZXMKLSAgICAgICAgICAgICAgICAiZHZhbGFkZGl0aW9uYWwgZGF0YSIuCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNvbnRyb2wgYWxsIHNwYWNpbmcgd2hlbiB5b3UgdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSBzeW50YXguCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFwcGVuZCBhbmQgcHJlcGVuZCB0byBzaGVsbAotICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBhbmQgQml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zLgotICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2hlbGwtZnVuY3Rpb25zJz5TaGVsbCBGdW5jdGlvbnM8L2xpbms+IiBhbmQKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYml0YmFrZS1zdHlsZS1weXRob24tZnVuY3Rpb25zJz5CaXRCYWtlLVN0eWxlIFB5dGhvbiBGdW5jdGlvbnM8L2xpbms+Ci0gICAgICAgICAgICAgICAgc2VjdGlvbnMgZm9yIGV4YW1wbGVzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbW92aW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+Ci0gICAgICAgICAgICA8dGl0bGU+UmVtb3ZhbCAoT3ZlcnJpZGUgU3R5bGUgU3ludGF4KTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVtb3ZlIHZhbHVlcyBmcm9tIGxpc3RzIHVzaW5nIHRoZSByZW1vdmFsCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGUgc3R5bGUgc3ludGF4LgotICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYSB2YWx1ZSBmb3IgcmVtb3ZhbCBjYXVzZXMgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQKLSAgICAgICAgICAgICAgICB2YWx1ZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHZhcmlhYmxlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBzeW50YXgsIEJpdEJha2UgZXhwZWN0cyBvbmUgb3IgbW9yZSBzdHJpbmdzLgotICAgICAgICAgICAgICAgIFN1cnJvdW5kaW5nIHNwYWNlcyBhbmQgc3BhY2luZyBhcmUgcHJlc2VydmVkLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEZPTyA9ICIxMjMgNDU2IDc4OSAxMjM0NTYgMTIzIDQ1NiAxMjMgNDU2IgotICAgICBGT09fcmVtb3ZlID0gIjEyMyIKLSAgICAgRk9PX3JlbW92ZSA9ICI0NTYiCi0gICAgIEZPTzIgPSAiIGFiYyAgZGVmIGdoaSBhYmNkZWYgYWJjIGRlZiBhYmMgIGRlZiBkZWYiCi0gICAgIEZPTzJfcmVtb3ZlID0gIiBcCi0gICAgICAgICBkZWYgXAotICAgICAgICAgYWJjIFwKLSAgICAgICAgIGdoaSBcCi0gICAgICIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBiZWNvbWVzCi0gICAgICAgICAgICAgICAgIiZuYnNwOyZuYnNwOzc4OSZuYnNwOzEyMzQ1NiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyIKLSAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkZPTzI8L2ZpbGVuYW1lPiBiZWNvbWVzCi0gICAgICAgICAgICAgICAgIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2FiY2RlZiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIExpa2UgIl9hcHBlbmQiIGFuZCAiX3ByZXBlbmQiLCAiX3JlbW92ZSIKLSAgICAgICAgICAgICAgICBpcyBhcHBsaWVkIGF0IHZhcmlhYmxlIGV4cGFuc2lvbiB0aW1lLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J292ZXJyaWRlLXN0eWxlLW9wZXJhdGlvbi1hZHZhbnRhZ2VzJz4KLSAgICAgICAgICAgIDx0aXRsZT5PdmVycmlkZSBTdHlsZSBPcGVyYXRpb24gQWR2YW50YWdlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFuIGFkdmFudGFnZSBvZiB0aGUgb3ZlcnJpZGUgc3R5bGUgb3BlcmF0aW9ucwotICAgICAgICAgICAgICAgICJfYXBwZW5kIiwgIl9wcmVwZW5kIiwgYW5kICJfcmVtb3ZlIiBhcyBjb21wYXJlZCB0byB0aGUKLSAgICAgICAgICAgICAgICAiKz0iIGFuZCAiPSsiIG9wZXJhdG9ycyBpcyB0aGF0IHRoZSBvdmVycmlkZSBzdHlsZQotICAgICAgICAgICAgICAgIG9wZXJhdG9ycyBwcm92aWRlIGd1YXJhbnRlZWQgb3BlcmF0aW9ucy4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBjbGFzcyA8ZmlsZW5hbWU+Zm9vLmJiY2xhc3M8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRoYXQgbmVlZHMgdG8gYWRkIHRoZSB2YWx1ZSAidmFsIiB0byB0aGUgdmFyaWFibGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4sIGFuZCBhIHJlY2lwZSB0aGF0IHVzZXMKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vLmJiY2xhc3M8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgaW5oZXJpdCBmb28KLQotICAgICBGT08gPSAiaW5pdGlhbCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPmZvby5iYmNsYXNzPC9maWxlbmFtZT4gdXNlcyB0aGUgIis9IiBvcGVyYXRvciwKLSAgICAgICAgICAgICAgICBhcyBmb2xsb3dzLCB0aGVuIHRoZSBmaW5hbCB2YWx1ZSBvZiA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB3aWxsIGJlICJpbml0aWFsIiwgd2hpY2ggaXMgbm90IHdoYXQgaXMgZGVzaXJlZDoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEZPTyArPSAidmFsIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBJZiwgb24gdGhlIG90aGVyIGhhbmQsIDxmaWxlbmFtZT5mb28uYmJjbGFzczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgdXNlcyB0aGUgIl9hcHBlbmQiIG9wZXJhdG9yLCB0aGVuIHRoZSBmaW5hbCB2YWx1ZSBvZgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiB3aWxsIGJlICJpbml0aWFsIHZhbCIsIGFzIGludGVuZGVkOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgRk9PX2FwcGVuZCA9ICIgdmFsIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgSXQgaXMgbmV2ZXIgbmVjZXNzYXJ5IHRvIHVzZSAiKz0iIHRvZ2V0aGVyIHdpdGggIl9hcHBlbmQiLgotICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGFzc2lnbm1lbnRzIGFwcGVuZHMgImJhcmJheiIgdG8KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEZPT19hcHBlbmQgPSAiYmFyIgotICAgICBGT09fYXBwZW5kID0gImJheiIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBUaGUgb25seSBlZmZlY3Qgb2YgY2hhbmdpbmcgdGhlIHNlY29uZCBhc3NpZ25tZW50IGluIHRoZQotICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlIHRvIHVzZSAiKz0iIHdvdWxkIGJlIHRvIGFkZCBhIHNwYWNlIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAiYmF6IiBpbiB0aGUgYXBwZW5kZWQgdmFsdWUgKGR1ZSB0byBob3cgdGhlICIrPSIgb3BlcmF0b3IKLSAgICAgICAgICAgICAgICAgICAgd29ya3MpLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICBBbm90aGVyIGFkdmFudGFnZSBvZiB0aGUgb3ZlcnJpZGUgc3R5bGUgb3BlcmF0aW9ucyBpcyB0aGF0Ci0gICAgICAgICAgICAgICAgeW91IGNhbiBjb21iaW5lIHRoZW0gd2l0aCBvdGhlciBvdmVycmlkZXMgYXMgZGVzY3JpYmVkIGluIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtZmxhZy1zeW50YXgnPgotICAgICAgICAgICAgPHRpdGxlPlZhcmlhYmxlIEZsYWcgU3ludGF4PC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVmFyaWFibGUgZmxhZ3MgYXJlIEJpdEJha2UncyBpbXBsZW1lbnRhdGlvbiBvZiB2YXJpYWJsZSBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgb3IgYXR0cmlidXRlcy4KLSAgICAgICAgICAgICAgICBJdCBpcyBhIHdheSBvZiB0YWdnaW5nIGV4dHJhIGluZm9ybWF0aW9uIG9udG8gYSB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBvdXQgYWJvdXQgdmFyaWFibGUgZmxhZ3MgaW4gZ2VuZXJhbCBpbiB0aGUKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZ3MnPlZhcmlhYmxlIEZsYWdzPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSwgYXBwZW5kLCBhbmQgcHJlcGVuZCB2YWx1ZXMgdG8gdmFyaWFibGUgZmxhZ3MuCi0gICAgICAgICAgICAgICAgQWxsIHRoZSBzdGFuZGFyZCBzeW50YXggb3BlcmF0aW9ucyBwcmV2aW91c2x5IG1lbnRpb25lZCB3b3JrCi0gICAgICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGZsYWdzIGV4Y2VwdCBmb3Igb3ZlcnJpZGUgc3R5bGUgc3ludGF4Ci0gICAgICAgICAgICAgICAgKGkuZS4gIl9wcmVwZW5kIiwgIl9hcHBlbmQiLCBhbmQgIl9yZW1vdmUiKS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyBzaG93aW5nIGhvdyB0byBzZXQgdmFyaWFibGUgZmxhZ3M6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBGT09bYV0gPSAiYWJjIgotICAgICBGT09bYl0gPSAiMTIzIgotICAgICBGT09bYV0gKz0gIjQ1NiIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBoYXMgdHdvIGZsYWdzOgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5bYV08L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPltiXTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFRoZSBmbGFncyBhcmUgaW1tZWRpYXRlbHkgc2V0IHRvICJhYmMiIGFuZCAiMTIzIiwgcmVzcGVjdGl2ZWx5LgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+W2FdPC9maWxlbmFtZT4gZmxhZyBiZWNvbWVzICJhYmMgNDU2Ii4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgTm8gbmVlZCBleGlzdHMgdG8gcHJlLWRlZmluZSB2YXJpYWJsZSBmbGFncy4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHNpbXBseSBzdGFydCB1c2luZyB0aGVtLgotICAgICAgICAgICAgICAgIE9uZSBleHRyZW1lbHkgY29tbW9uIGFwcGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgaXMgdG8gYXR0YWNoIHNvbWUgYnJpZWYgZG9jdW1lbnRhdGlvbiB0byBhIEJpdEJha2UgdmFyaWFibGUgYXMKLSAgICAgICAgICAgICAgICBmb2xsb3dzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQ0FDSEVbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGNhY2hlIG9mIHRoZSBtZXRhZGF0YS4iCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2lubGluZS1weXRob24tdmFyaWFibGUtZXhwYW5zaW9uJz4KLSAgICAgICAgICAgIDx0aXRsZT5JbmxpbmUgUHl0aG9uIFZhcmlhYmxlIEV4cGFuc2lvbjwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGlubGluZSBQeXRob24gdmFyaWFibGUgZXhwYW5zaW9uIHRvCi0gICAgICAgICAgICAgICAgc2V0IHZhcmlhYmxlcy4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBEQVRFID0gIiR7QHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsdGltZS5nbXRpbWUoKSl9IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgcmVzdWx0cyBpbiB0aGUgPGZpbGVuYW1lPkRBVEU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJlaW5nIHNldCB0byB0aGUgY3VycmVudCBkYXRlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBQcm9iYWJseSB0aGUgbW9zdCBjb21tb24gdXNlIG9mIHRoaXMgZmVhdHVyZSBpcyB0byBleHRyYWN0Ci0gICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHZhcmlhYmxlcyBmcm9tIEJpdEJha2UncyBpbnRlcm5hbCBkYXRhIGRpY3Rpb25hcnksCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmQ8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpbmVzIHNlbGVjdCB0aGUgdmFsdWVzIG9mIGEgcGFja2FnZSBuYW1lCi0gICAgICAgICAgICAgICAgYW5kIGl0cyB2ZXJzaW9uIG51bWJlciwgcmVzcGVjdGl2ZWx5OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgUE4gPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzBdIG9yICdkZWZhdWx0cGtnbmFtZSd9IgotICAgICBQViA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMV0gb3IgJzEuMCd9IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgSW5saW5lIFB5dGhvbiBleHByZXNzaW9ucyB3b3JrIGp1c3QgbGlrZSB2YXJpYWJsZSBleHBhbnNpb25zCi0gICAgICAgICAgICAgICAgICAgIGluc29mYXIgYXMgdGhlICI9IiBhbmQgIjo9IiBvcGVyYXRvcnMgYXJlIGNvbmNlcm5lZC4KLSAgICAgICAgICAgICAgICAgICAgR2l2ZW4gdGhlIGZvbGxvd2luZyBhc3NpZ25tZW50LCA8ZmlsZW5hbWU+Zm9vKCk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBpcyBjYWxsZWQgZWFjaCB0aW1lIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBpcyBleHBhbmRlZDoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBGT08gPSAiJHtAZm9vKCl9IgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgZm9sbG93aW5nIGltbWVkaWF0ZSBhc3NpZ25tZW50LCB3aGVyZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vKCk8L2ZpbGVuYW1lPiBpcyBvbmx5IGNhbGxlZCBvbmNlLCB3aGlsZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudCBpcyBwYXJzZWQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgRk9PIDo9ICIke0Bmb28oKX0iCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgRm9yIGEgZGlmZmVyZW50IHdheSB0byBzZXQgdmFyaWFibGVzIHdpdGggUHl0aG9uIGNvZGUgZHVyaW5nCi0gICAgICAgICAgICAgICAgcGFyc2luZywgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdhbm9ueW1vdXMtcHl0aG9uLWZ1bmN0aW9ucyc+QW5vbnltb3VzIFB5dGhvbiBGdW5jdGlvbnM8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ndW5zZXR0aW5nLXZhcmlhYmxlcyc+Ci0gICAgICAgICAgICA8dGl0bGU+VW5zZXR0aW5nIHZhcmlhYmxlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIGEgdmFyaWFibGUgb3IgYSB2YXJpYWJsZSBmbGFnCi0gICAgICAgICAgICAgICAgZnJvbSBCaXRCYWtlJ3MgaW50ZXJuYWwgZGF0YSBkaWN0aW9uYXJ5IGJ5IHVzaW5nIHRoZSAidW5zZXQiIGtleXdvcmQuCi0gICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgICAgdW5zZXQgREFURQotICAgICAgICB1bnNldCBkb19mZXRjaFtub2V4ZWNdCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoZXNlIHR3byBzdGF0ZW1lbnRzIHJlbW92ZSB0aGUgPGZpbGVuYW1lPkRBVEU8L2ZpbGVuYW1lPiBhbmQgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoW25vZXhlY108L2ZpbGVuYW1lPiBmbGFnLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ncHJvdmlkaW5nLXBhdGhuYW1lcyc+Ci0gICAgICAgICAgICA8dGl0bGU+UHJvdmlkaW5nIFBhdGhuYW1lczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBwYXRobmFtZXMgZm9yIHVzZSB3aXRoIEJpdEJha2UsCi0gICAgICAgICAgICAgICAgZG8gbm90IHVzZSB0aGUgdGlsZGUgKCJ+IikgY2hhcmFjdGVyIGFzIGEgc2hvcnRjdXQKLSAgICAgICAgICAgICAgICBmb3IgeW91ciBob21lIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBEb2luZyBzbyBtaWdodCBjYXVzZSBCaXRCYWtlIHRvIG5vdCByZWNvZ25pemUgdGhlCi0gICAgICAgICAgICAgICAgcGF0aCBzaW5jZSBCaXRCYWtlIGRvZXMgbm90IGV4cGFuZCB0aGlzIGNoYXJhY3RlciBpbgotICAgICAgICAgICAgICAgIHRoZSBzYW1lIHdheSBhIHNoZWxsIHdvdWxkLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJbnN0ZWFkLCBwcm92aWRlIGEgZnVsbGVyIHBhdGggYXMgdGhlIGZvbGxvd2luZwotICAgICAgICAgICAgICAgIGV4YW1wbGUgaWxsdXN0cmF0ZXM6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBCQkxBWUVSUyA/PSAiIFwKLSAgICAgICAvaG9tZS9zY290dC1sZW5vdm8vTGF5ZXJBIFwKLSAgICAgICAiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2V4cG9ydGluZy12YXJpYWJsZXMtdG8tdGhlLWVudmlyb25tZW50Jz4KLSAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBWYXJpYWJsZXMgdG8gdGhlIEVudmlyb25tZW50PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBjYW4gZXhwb3J0IHZhcmlhYmxlcyB0byB0aGUgZW52aXJvbm1lbnQgb2YgcnVubmluZwotICAgICAgICAgICAgdGFza3MgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5leHBvcnQ8L2ZpbGVuYW1lPiBrZXl3b3JkLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4gdGFzayBwcmludHMgInZhbHVlIGZyb20KLSAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCIgd2hlbiBydW46Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGV4cG9ydCBFTlZfVkFSSUFCTEUKLSAgICAgRU5WX1ZBUklBQkxFID0gInZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50IgotCi0gICAgIGRvX2ZvbygpIHsKLSAgICAgICAgIGJicGxhaW4gIiRFTlZfVkFSSUFCTEUiCi0gICAgIH0KLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBub3QgZXhwYW5kIDxmaWxlbmFtZT4kRU5WX1ZBUklBQkxFPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UgYmVjYXVzZSBpdCBsYWNrcyB0aGUgb2JsaWdhdG9yeQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT57fTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFJhdGhlciwgPGZpbGVuYW1lPiRFTlZfVkFSSUFCTEU8L2ZpbGVuYW1lPiBpcyBleHBhbmRlZAotICAgICAgICAgICAgICAgIGJ5IHRoZSBzaGVsbC4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIEl0IGRvZXMgbm90IG1hdHRlciB3aGV0aGVyCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZXhwb3J0IEVOVl9WQVJJQUJMRTwvZmlsZW5hbWU+IGFwcGVhcnMgYmVmb3JlIG9yCi0gICAgICAgICAgICBhZnRlciBhc3NpZ25tZW50cyB0byA8ZmlsZW5hbWU+RU5WX1ZBUklBQkxFPC9maWxlbmFtZT4uCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY29tYmluZSA8ZmlsZW5hbWU+ZXhwb3J0PC9maWxlbmFtZT4KLSAgICAgICAgICAgIHdpdGggc2V0dGluZyBhIHZhbHVlIGZvciB0aGUgdmFyaWFibGUuCi0gICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGV4cG9ydCBFTlZfVkFSSUFCTEUgPSAiPHJlcGxhY2VhYmxlPnZhcmlhYmxlLXZhbHVlPC9yZXBsYWNlYWJsZT4iCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBJbiB0aGUgb3V0cHV0IG9mIDxmaWxlbmFtZT5iaXRiYWtlIC1lPC9maWxlbmFtZT4sIHZhcmlhYmxlcwotICAgICAgICAgICAgdGhhdCBhcmUgZXhwb3J0ZWQgdG8gdGhlIGVudmlyb25tZW50IGFyZSBwcmVjZWRlZCBieSAiZXhwb3J0Ii4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQW1vbmcgdGhlIHZhcmlhYmxlcyBjb21tb25seSBleHBvcnRlZCB0byB0aGUgZW52aXJvbm1lbnQKLSAgICAgICAgICAgIGFyZSA8ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+LAotICAgICAgICAgICAgd2hpY2ggYXJlIHBpY2tlZCB1cCBieSBtYW55IGJ1aWxkIHN5c3RlbXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nY29uZGl0aW9uYWwtc3ludGF4LW92ZXJyaWRlcyc+Ci0gICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQml0QmFrZSB1c2VzCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB0byBjb250cm9sIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UKLSAgICAgICAgICAgIHBhcnNlcyByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgeW91IGNhbiB1c2UKLSAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiBhcyBjb25kaXRpb25hbCBtZXRhZGF0YSwKLSAgICAgICAgICAgIHRhbGtzIGFib3V0IGtleSBleHBhbnNpb24gaW4gcmVsYXRpb25zaGlwIHRvCi0gICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sIGFuZCBwcm92aWRlcyBzb21lIGV4YW1wbGVzCi0gICAgICAgICAgICB0byBoZWxwIHdpdGggdW5kZXJzdGFuZGluZy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdjb25kaXRpb25hbC1tZXRhZGF0YSc+Ci0gICAgICAgICAgICA8dGl0bGU+Q29uZGl0aW9uYWwgTWV0YWRhdGE8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29uZGl0aW9uYWxseSBzZWxlY3QKLSAgICAgICAgICAgICAgICBhIHNwZWNpZmljIHZlcnNpb24gb2YgYSB2YXJpYWJsZSBhbmQgdG8gY29uZGl0aW9uYWxseQotICAgICAgICAgICAgICAgIGFwcGVuZCBvciBwcmVwZW5kIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMgY2FuIG9ubHkgdXNlIGxvd2VyLWNhc2UgY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB1bmRlcnNjb3JlcyBhcmUgbm90IHBlcm1pdHRlZCBpbiBvdmVycmlkZSBuYW1lcwotICAgICAgICAgICAgICAgICAgICBhcyB0aGV5IGFyZSB1c2VkIHRvIHNlcGFyYXRlIG92ZXJyaWRlcyBmcm9tIGVhY2ggb3RoZXIgYW5kCi0gICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHZhcmlhYmxlIG5hbWUuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2VsZWN0aW5nIGEgVmFyaWFibGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgY29sb24tY2hhcmFjdGVyLXNlcGFyYXRlZCBsaXN0IHRoYXQgY29udGFpbnMgaXRlbXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB5b3Ugd2FudCB0byBzYXRpc2Z5IGNvbmRpdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBpZiB5b3UgaGF2ZSBhIHZhcmlhYmxlIHRoYXQgaXMgY29uZGl0aW9uYWwgb24g4oCcYXJt4oCdLCBhbmQg4oCcYXJt4oCdCi0gICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sIHRoZW4gdGhlIOKAnGFybeKAnS1zcGVjaWZpYwotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgdmFyaWFibGUgaXMgdXNlZCByYXRoZXIgdGhhbiB0aGUgbm9uLWNvbmRpdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBPVkVSUklERVMgPSAiYXJjaGl0ZWN0dXJlOm9zOm1hY2hpbmUiCi0gICAgIFRFU1QgPSAiZGVmYXVsdCIKLSAgICAgVEVTVF9vcyA9ICJvc3NwZWNpZmljIgotICAgICBURVNUX25vb3ZlcnJpZGUgPSAib3RoZXJjb25kdmFsdWUiCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGxpc3RzIHRocmVlIG92ZXJyaWRlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICJhcmNoaXRlY3R1cmUiLCAib3MiLCBhbmQgIm1hY2hpbmUiLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5URVNUPC9maWxlbmFtZT4gYnkgaXRzZWxmIGhhcyBhIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mICJkZWZhdWx0Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzZWxlY3QgdGhlIG9zLXNwZWNpZmljIHZlcnNpb24gb2YgdGhlIDxmaWxlbmFtZT5URVNUPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJ5IGFwcGVuZGluZyB0aGUgIm9zIiBvdmVycmlkZSB0byB0aGUgdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuPGZpbGVuYW1lPlRFU1Rfb3M8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGJldHRlciB1bmRlcnN0YW5kIHRoaXMsIGNvbnNpZGVyIGEgcHJhY3RpY2FsIGV4YW1wbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFzc3VtZXMgYW4gT3BlbkVtYmVkZGVkIG1ldGFkYXRhLWJhc2VkIExpbnV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGluZXMgZnJvbSB0aGUgcmVjaXBlIGZpbGUgZmlyc3Qgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBicmFuY2ggdmFyaWFibGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgZGVmYXVsdCB2YWx1ZSwgdGhlbiBjb25kaXRpb25hbGx5IG92ZXJyaWRlIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBidWlsZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgotICAgICBLQlJBTkNIX3FlbXVhcm0gID0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgotICAgICBLQlJBTkNIX3FlbXVtaXBzID0gInN0YW5kYXJkL210aS1tYWx0YTMyIgotICAgICBLQlJBTkNIX3FlbXVwcGMgID0gInN0YW5kYXJkL3FlbXVwcGMiCi0gICAgIEtCUkFOQ0hfcWVtdXg4NiAgPSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCi0gICAgIEtCUkFOQ0hfcWVtdXg4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCi0gICAgIEtCUkFOQ0hfcWVtdW1pcHM2NCA9ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZGluZyBhbmQgUHJlcGVuZGluZzo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhbHNvIHN1cHBvcnRzIGFwcGVuZCBhbmQgcHJlcGVuZCBvcGVyYXRpb25zIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB2YWx1ZXMgYmFzZWQgb24gd2hldGhlciBhIHNwZWNpZmljIGl0ZW0gaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlZCBpbiA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIERFUEVORFMgPSAiZ2xpYmMgbmN1cnNlcyIKLSAgICAgT1ZFUlJJREVTID0gIm1hY2hpbmU6bG9jYWwiCi0gICAgIERFUEVORFNfYXBwZW5kX21hY2hpbmUgPSAiIGxpYm1hZCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBiZWNvbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAiZ2xpYmMgbmN1cnNlcyBsaWJtYWQiLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgdXNpbmcgYW4gT3BlbkVtYmVkZGVkIG1ldGFkYXRhLWJhc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSBmaWxlIGFzIGFuIGV4YW1wbGUsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBsaW5lcyB3aWxsIGNvbmRpdGlvbmFsbHkgYXBwZW5kIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBiYXNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBhcmNoaXRlY3R1cmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKLSAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKLSAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldHRpbmcgYSBWYXJpYWJsZSBmb3IgYSBTaW5nbGUgVGFzazo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBzZXR0aW5nIGEgdmFyaWFibGUganVzdCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiBvZiBhIHNpbmdsZSB0YXNrLgotICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBGT09fdGFzay1jb25maWd1cmUgPSAidmFsIDEiCi0gICAgIEZPT190YXNrLWNvbXBpbGUgPSAidmFsIDIiCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXMgdGhlIHZhbHVlICJ2YWwgMSIgd2hpbGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gdGFzayBpcyBleGVjdXRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgdmFsdWUgInZhbCAyIiB3aGlsZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFzayBpcyBleGVjdXRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW50ZXJuYWxseSwgdGhpcyBpcyBpbXBsZW1lbnRlZCBieSBwcmVwZW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFzayAoZS5nLiAidGFzay1jb21waWxlOiIpIHRvIHRoZSB2YWx1ZSBvZgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBsb2NhbCBkYXRhc3RvcmUgb2YgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGFsc28gdXNlIHRoaXMgc3ludGF4IHdpdGggb3RoZXIgY29tYmluYXRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4iKSBhcyBzaG93biBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBFWFRSQV9PRU1BS0VfcHJlcGVuZF90YXNrLWNvbXBpbGUgPSAiJHtQQVJBTExFTF9NQUtFfSAiCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdrZXktZXhwYW5zaW9uJz4KLSAgICAgICAgICAgIDx0aXRsZT5LZXkgRXhwYW5zaW9uPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgS2V5IGV4cGFuc2lvbiBoYXBwZW5zIHdoZW4gdGhlIEJpdEJha2UgZGF0YXN0b3JlIGlzIGZpbmFsaXplZC4KLSAgICAgICAgICAgICAgICBUbyBiZXR0ZXIgdW5kZXJzdGFuZCB0aGlzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBBJHtCfSA9ICJYIgotICAgICBCID0gIjIiCi0gICAgIEEyID0gIlkiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYWZ0ZXIgYWxsIHRoZSBwYXJzaW5nIGlzIGNvbXBsZXRlLAotICAgICAgICAgICAgICAgIEJpdEJha2UgZXhwYW5kcyA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IGludG8gIjIiLgotICAgICAgICAgICAgICAgIFRoaXMgZXhwYW5zaW9uIGNhdXNlcyA8ZmlsZW5hbWU+QTI8L2ZpbGVuYW1lPiwgd2hpY2ggd2FzCi0gICAgICAgICAgICAgICAgc2V0IHRvICJZIiBiZWZvcmUgdGhlIGV4cGFuc2lvbiwgdG8gYmVjb21lICJYIi4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1pbnRlcmFjdGlvbi13b3JrZWQtZXhhbXBsZXMnPgotICAgICAgICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRGVzcGl0ZSB0aGUgcHJldmlvdXMgZXhwbGFuYXRpb25zIHRoYXQgc2hvdyB0aGUgZGlmZmVyZW50IGZvcm1zIG9mCi0gICAgICAgICAgICAgICAgdmFyaWFibGUgZGVmaW5pdGlvbnMsIGl0IGNhbiBiZSBoYXJkIHRvIHdvcmsKLSAgICAgICAgICAgICAgICBvdXQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB2YXJpYWJsZSBvcGVyYXRvcnMsIGNvbmRpdGlvbmFsCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVzLCBhbmQgdW5jb25kaXRpb25hbCBvdmVycmlkZXMgYXJlIGNvbWJpbmVkLgotICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzb21lIGNvbW1vbiBzY2VuYXJpb3MgYWxvbmcKLSAgICAgICAgICAgICAgICB3aXRoIGV4cGxhbmF0aW9ucyBmb3IgdmFyaWFibGUgaW50ZXJhY3Rpb25zIHRoYXQKLSAgICAgICAgICAgICAgICB0eXBpY2FsbHkgY29uZnVzZSB1c2Vycy4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlcmUgaXMgb2Z0ZW4gY29uZnVzaW9uIGNvbmNlcm5pbmcgdGhlIG9yZGVyIGluIHdoaWNoCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVzIGFuZCB2YXJpb3VzICJhcHBlbmQiIG9wZXJhdG9ycyB0YWtlIGVmZmVjdC4KLSAgICAgICAgICAgICAgICBSZWNhbGwgdGhhdCBhbiBhcHBlbmQgb3IgcHJlcGVuZCBvcGVyYXRpb24gdXNpbmcgIl9hcHBlbmQiCi0gICAgICAgICAgICAgICAgYW5kICJfcHJlcGVuZCIgZG9lcyBub3QgcmVzdWx0IGluIGFuIGltbWVkaWF0ZSBhc3NpZ25tZW50Ci0gICAgICAgICAgICAgICAgYXMgd291bGQgIis9IiwgIi49IiwgIj0rIiwgb3IgIj0uIi4KLSAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBPVkVSUklERVMgPSAiZm9vIgotICAgICBBID0gIloiCi0gICAgIEFfZm9vX2FwcGVuZCA9ICJYIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzCi0gICAgICAgICAgICAgICAgdW5jb25kaXRpb25hbGx5IHNldCB0byAiWiIgYW5kICJYIiBpcwotICAgICAgICAgICAgICAgIHVuY29uZGl0aW9uYWxseSBhbmQgaW1tZWRpYXRlbHkgYXBwZW5kZWQgdG8gdGhlIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgQmVjYXVzZSBvdmVycmlkZXMgaGF2ZSBub3QgYmVlbiBhcHBsaWVkIHlldCwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIlgiIGR1ZSB0byB0aGUgYXBwZW5kCi0gICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gc2ltcGx5IGVxdWFscyAiWiIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFwcGx5aW5nIG92ZXJyaWRlcywgaG93ZXZlciwgY2hhbmdlcyB0aGluZ3MuCi0gICAgICAgICAgICAgICAgU2luY2UgImZvbyIgaXMgbGlzdGVkIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICB0aGUgY29uZGl0aW9uYWwgdmFyaWFibGUgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyByZXBsYWNlZAotICAgICAgICAgICAgICAgIHdpdGggdGhlICJmb28iIHZlcnNpb24sIHdoaWNoIGlzIGVxdWFsIHRvICJYIi4KLSAgICAgICAgICAgICAgICBTbyBlZmZlY3RpdmVseSwgPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4gcmVwbGFjZXMgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdGhlIG92ZXJyaWRlIGFuZAotICAgICAgICAgICAgICAgIHRoZSBhcHBlbmQ6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBPVkVSUklERVMgPSAiZm9vIgotICAgICBBID0gIloiCi0gICAgIEFfYXBwZW5kX2ZvbyA9ICJYIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCBiZWZvcmUgb3ZlcnJpZGVzIGFyZSBoYW5kbGVkLAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IHRvICJaIiBhbmQgPGZpbGVuYW1lPkFfYXBwZW5kX2ZvbzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgaXMgc2V0IHRvICJYIi4KLSAgICAgICAgICAgICAgICBPbmNlIHRoZSBvdmVycmlkZSBmb3IgImZvbyIgaXMgYXBwbGllZCwgaG93ZXZlciwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGdldHMgYXBwZW5kZWQgd2l0aCAiWCIuCi0gICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGJlY29tZXMgIlpYIi4KLSAgICAgICAgICAgICAgICBOb3RpY2UgdGhhdCBzcGFjZXMgYXJlIG5vdCBhcHBlbmRlZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgaGFzIHRoZSBvcmRlciBvZiB0aGUgYXBwZW5kcyBhbmQgb3ZlcnJpZGVzIHJldmVyc2VkCi0gICAgICAgICAgICAgICAgYmFjayBhcyBpbiB0aGUgZmlyc3QgZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIE9WRVJSSURFUyA9ICJmb28iCi0gICAgIEEgPSAiWSIKLSAgICAgQV9mb29fYXBwZW5kID0gIloiCi0gICAgIEFfZm9vX2FwcGVuZCA9ICJYIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCBiZWZvcmUgYW55IG92ZXJyaWRlcyBhcmUgcmVzb2x2ZWQsCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIlkiIHVzaW5nIGFuIGltbWVkaWF0ZSBhc3NpZ25tZW50LgotICAgICAgICAgICAgICAgIEFmdGVyIHRoaXMgaW1tZWRpYXRlIGFzc2lnbm1lbnQsIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IGlzIHNldAotICAgICAgICAgICAgICAgIHRvICJaIiwgYW5kIHRoZW4gZnVydGhlciBhcHBlbmRlZCB3aXRoCi0gICAgICAgICAgICAgICAgIlgiIGxlYXZpbmcgdGhlIHZhcmlhYmxlIHNldCB0byAiWlgiLgotICAgICAgICAgICAgICAgIEZpbmFsbHksIGFwcGx5aW5nIHRoZSBvdmVycmlkZSBmb3IgImZvbyIgcmVzdWx0cyBpbiB0aGUgY29uZGl0aW9uYWwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZSA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGJlY29taW5nICJaWCIgKGkuZS4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHJlcGxhY2VkIHdpdGggPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIGZpbmFsIGV4YW1wbGUgbWl4ZXMgaW4gc29tZSB2YXJ5aW5nIG9wZXJhdG9yczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEEgPSAiMSIKLSAgICAgQV9hcHBlbmQgPSAiMiIKLSAgICAgQV9hcHBlbmQgPSAiMyIKLSAgICAgQSArPSAiNCIKLSAgICAgQSAuPSAiNSIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgdGhlIHR5cGUgb2YgYXBwZW5kIG9wZXJhdG9ycyBhcmUgYWZmZWN0aW5nIHRoZQotICAgICAgICAgICAgICAgIG9yZGVyIG9mIGFzc2lnbm1lbnRzIGFzIEJpdEJha2UgcGFzc2VzIHRocm91Z2ggdGhlIGNvZGUKLSAgICAgICAgICAgICAgICBtdWx0aXBsZSB0aW1lcy4KLSAgICAgICAgICAgICAgICBJbml0aWFsbHksIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IHRvICIxIDQ1IiBiZWNhdXNlCi0gICAgICAgICAgICAgICAgb2YgdGhlIHRocmVlIHN0YXRlbWVudHMgdGhhdCB1c2UgaW1tZWRpYXRlIG9wZXJhdG9ycy4KLSAgICAgICAgICAgICAgICBBZnRlciB0aGVzZSBhc3NpZ25tZW50cyBhcmUgbWFkZSwgQml0QmFrZSBhcHBsaWVzIHRoZQotICAgICAgICAgICAgICAgICJfYXBwZW5kIiBvcGVyYXRpb25zLgotICAgICAgICAgICAgICAgIFRob3NlIG9wZXJhdGlvbnMgcmVzdWx0IGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21pbmcgIjEgNDUyMyIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2hhcmluZy1mdW5jdGlvbmFsaXR5Jz4KLSAgICAgICAgPHRpdGxlPlNoYXJpbmcgRnVuY3Rpb25hbGl0eTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBmb3IgbWV0YWRhdGEgc2hhcmluZyB0aHJvdWdoIGluY2x1ZGUgZmlsZXMKLSAgICAgICAgICAgICg8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBhbmQgY2xhc3MgZmlsZXMKLSAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIHBpZWNlIG9mIGNvbW1vbiBmdW5jdGlvbmFsaXR5Ci0gICAgICAgICAgICBzdWNoIGFzIGEgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91IHdhbnQgdG8gc2hhcmUgYmV0d2VlbgotICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSByZWNpcGUuCi0gICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGNyZWF0aW5nIGEgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGZpbGUgdGhhdCBjb250YWlucyB0aGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZW4gdXNpbmcKLSAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBpbiB5b3VyIHJlY2lwZXMgdG8KLSAgICAgICAgICAgIGluaGVyaXQgdGhlIGNsYXNzIHdvdWxkIGJlIGEgY29tbW9uIHdheSB0byBzaGFyZSB0aGUgdGFzay4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBtZWNoYW5pc21zIEJpdEJha2UgcHJvdmlkZXMgdG8KLSAgICAgICAgICAgIGFsbG93IHlvdSB0byBzaGFyZSBmdW5jdGlvbmFsaXR5IGJldHdlZW4gcmVjaXBlcy4KLSAgICAgICAgICAgIFNwZWNpZmljYWxseSwgdGhlIG1lY2hhbmlzbXMgaW5jbHVkZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+LAotICAgICAgICAgICAgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiwgYW5kCi0gICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYXRpbmctaW5jbHVkZS1hbmQtY2xhc3MtZmlsZXMnPgotICAgICAgICAgICAgPHRpdGxlPkxvY2F0aW5nIEluY2x1ZGUgYW5kIENsYXNzIEZpbGVzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgbmVlZGVkIGluY2x1ZGUgYW5kIGNsYXNzIGZpbGVzLgotICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgQml0QmFrZSBzZWFyY2hlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvCi0gICAgICAgICAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIGluY2x1ZGUgYW5kIGNsYXNzIGZpbGVzIHRvIGJlIGZvdW5kIGJ5IEJpdEJha2UsCi0gICAgICAgICAgICAgICAgdGhleSBuZWVkIHRvIGJlIGxvY2F0ZWQgaW4gYSAiY2xhc3NlcyIgc3ViZGlyZWN0b3J5IHRoYXQgY2FuCi0gICAgICAgICAgICAgICAgYmUgZm91bmQgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2luaGVyaXQtZGlyZWN0aXZlJz4KLSAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IERpcmVjdGl2ZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4gd3JpdGluZyBhIHJlY2lwZSBvciBjbGFzcyBmaWxlLCB5b3UgY2FuIHVzZSB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSB0byBpbmhlcml0IHRoZQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYSBjbGFzcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgIEJpdEJha2Ugb25seSBzdXBwb3J0cyB0aGlzIGRpcmVjdGl2ZSB3aGVuIHVzZWQgd2l0aGluIHJlY2lwZQotICAgICAgICAgICAgICAgIGFuZCBjbGFzcyBmaWxlcyAoaS5lLiA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgaXMgYSBydWRpbWVudGFyeQotICAgICAgICAgICAgICAgIG1lYW5zIG9mIHNwZWNpZnlpbmcgZnVuY3Rpb25hbGl0eSBjb250YWluZWQgaW4gY2xhc3MgZmlsZXMKLSAgICAgICAgICAgICAgICB0aGF0IHlvdXIgcmVjaXBlcyByZXF1aXJlLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGVhc2lseSBhYnN0cmFjdCBvdXQgdGhlIHRhc2tzIGludm9sdmVkIGluCi0gICAgICAgICAgICAgICAgYnVpbGRpbmcgYSBwYWNrYWdlIHRoYXQgdXNlcyBBdXRvY29uZiBhbmQgQXV0b21ha2UgYW5kIHB1dAotICAgICAgICAgICAgICAgIHRob3NlIHRhc2tzIGludG8gYSBjbGFzcyBmaWxlIGFuZCB0aGVuIGhhdmUgeW91ciByZWNpcGUKLSAgICAgICAgICAgICAgICBpbmhlcml0IHRoYXQgY2xhc3MgZmlsZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgeW91ciByZWNpcGVzIGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZQotICAgICAgICAgICAgICAgIHRvIGluaGVyaXQgYW4gPGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICBUaGUgY2xhc3MgZmlsZSB3b3VsZCBjb250YWluIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciB1c2luZwotICAgICAgICAgICAgICAgIEF1dG90b29scyB0aGF0IGNvdWxkIGJlIHNoYXJlZCBhY3Jvc3MgcmVjaXBlczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGluaGVyaXQgYXV0b3Rvb2xzCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgQml0QmFrZSB3b3VsZCBzZWFyY2ggZm9yIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIGFueSB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkIGNsYXNzIHdpdGhpbiB5b3VyIHJlY2lwZSBieSBkb2luZyBzbwotICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgImluaGVyaXQiIHN0YXRlbWVudC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBkaXJlY3RpdmUgdG8gaW5oZXJpdAotICAgICAgICAgICAgICAgIG11bHRpcGxlIGNsYXNzZXMsIHNlcGFyYXRlIHRoZW0gd2l0aCBzcGFjZXMuCi0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBpbmhlcml0IGJvdGggdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY2xhc3NlczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGluaGVyaXQgYnVpbGRoaXN0b3J5IHJtX3dvcmsKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFuIGFkdmFudGFnZSB3aXRoIHRoZSBpbmhlcml0IGRpcmVjdGl2ZSBhcyBjb21wYXJlZCB0byBib3RoCi0gICAgICAgICAgICAgICAgdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW5jbHVkZS1kaXJlY3RpdmUnPmluY2x1ZGU8L2xpbms+IGFuZAotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlcXVpcmUtaW5jbHVzaW9uJz5yZXF1aXJlPC9saW5rPiBkaXJlY3RpdmVzCi0gICAgICAgICAgICAgICAgaXMgdGhhdCB5b3UgY2FuIGluaGVyaXQgY2xhc3MgZmlsZXMgY29uZGl0aW9uYWxseS4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSB1c2luZyBhIHZhcmlhYmxlIGV4cHJlc3Npb24KLSAgICAgICAgICAgICAgICBhZnRlciB0aGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQuCi0gICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgaW5oZXJpdCAke1ZBUk5BTUV9Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5WQVJOQU1FPC9maWxlbmFtZT4gaXMgZ29pbmcgdG8gYmUgc2V0LCBpdCBuZWVkcwotICAgICAgICAgICAgICAgIHRvIGJlIHNldCBiZWZvcmUgdGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gc3RhdGVtZW50Ci0gICAgICAgICAgICAgICAgaXMgcGFyc2VkLgotICAgICAgICAgICAgICAgIE9uZSB3YXkgdG8gYWNoaWV2ZSBhIGNvbmRpdGlvbmFsIGluaGVyaXQgaW4gdGhpcyBjYXNlIGlzIHRvIHVzZQotICAgICAgICAgICAgICAgIG92ZXJyaWRlczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFZBUklBQkxFID0gIiIKLSAgICAgVkFSSUFCTEVfc29tZW92ZXJyaWRlID0gIm15Y2xhc3MiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBbm90aGVyIG1ldGhvZCBpcyBieSB1c2luZyBhbm9ueW1vdXMgUHl0aG9uLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHB5dGhvbiAoKSB7Ci0gICAgICAgICBpZiBjb25kaXRpb24gPT0gdmFsdWU6Ci0gICAgICAgICAgICAgZC5zZXRWYXIoJ1ZBUklBQkxFJywgJ215Y2xhc3MnKQotICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICBkLnNldFZhcignVkFSSUFCTEUnLCAnJykKLSAgICAgfQotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHVzZSBhbiBpbi1saW5lIFB5dGhvbiBleHByZXNzaW9uCi0gICAgICAgICAgICAgICAgaW4gdGhlIGZvbGxvd2luZyBmb3JtOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgaW5oZXJpdCAke0AnY2xhc3NuYW1lJyBpZiBjb25kaXRpb24gZWxzZSAnJ30KLSAgICAgaW5oZXJpdCAke0BmdW5jdGlvbm5hbWUocGFyYW1zKX0KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSW4gYWxsIGNhc2VzLCBpZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYW4gZW1wdHkKLSAgICAgICAgICAgICAgICBzdHJpbmcsIHRoZSBzdGF0ZW1lbnQgZG9lcyBub3QgdHJpZ2dlciBhIHN5bnRheCBlcnJvcgotICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgYmVjb21lcyBhIG5vLW9wLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2luY2x1ZGUtZGlyZWN0aXZlJz4KLSAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IERpcmVjdGl2ZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJpdEJha2UgdW5kZXJzdGFuZHMgdGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBkaXJlY3RpdmUuCi0gICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RpdmUgY2F1c2VzIEJpdEJha2UgdG8gcGFyc2Ugd2hhdGV2ZXIgZmlsZSB5b3Ugc3BlY2lmeSwKLSAgICAgICAgICAgICAgICBhbmQgdG8gaW5zZXJ0IHRoYXQgZmlsZSBhdCB0aGF0IGxvY2F0aW9uLgotICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RpdmUgaXMgbXVjaCBsaWtlIGl0cyBlcXVpdmFsZW50IGluIE1ha2UgZXhjZXB0Ci0gICAgICAgICAgICAgICAgdGhhdCBpZiB0aGUgcGF0aCBzcGVjaWZpZWQgb24gdGhlIGluY2x1ZGUgbGluZSBpcyBhIHJlbGF0aXZlCi0gICAgICAgICAgICAgICAgcGF0aCwgQml0QmFrZSBsb2NhdGVzIHRoZSBmaXJzdCBmaWxlIGl0IGNhbiBmaW5kCi0gICAgICAgICAgICAgICAgd2l0aGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGluY2x1ZGUgZGlyZWN0aXZlIGlzIGEgbW9yZSBnZW5lcmljIG1ldGhvZCBvZiBpbmNsdWRpbmcKLSAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGFzIGNvbXBhcmVkIHRvIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2luaGVyaXQtZGlyZWN0aXZlJz5pbmhlcml0PC9saW5rPiBkaXJlY3RpdmUsCi0gICAgICAgICAgICAgICAgd2hpY2ggaXMgcmVzdHJpY3RlZCB0byBjbGFzcyAoaS5lLiA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICBmaWxlcy4KLSAgICAgICAgICAgICAgICBUaGUgaW5jbHVkZSBkaXJlY3RpdmUgaXMgYXBwbGljYWJsZSBmb3IgYW55IG90aGVyIGtpbmQgb2YKLSAgICAgICAgICAgICAgICBzaGFyZWQgb3IgZW5jYXBzdWxhdGVkIGZ1bmN0aW9uYWxpdHkgb3IgY29uZmlndXJhdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgZG9lcyBub3Qgc3VpdCBhIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IG5lZWRlZCBhIHJlY2lwZSB0byBpbmNsdWRlIHNvbWUKLSAgICAgICAgICAgICAgICBzZWxmLXRlc3QgZGVmaW5pdGlvbnM6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBpbmNsdWRlIHRlc3RfZGVmcy5pbmMKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBkb2VzIG5vdAotICAgICAgICAgICAgICAgICAgICBwcm9kdWNlIGFuIGVycm9yIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kLgotICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaWYgdGhlIGZpbGUgeW91Ci0gICAgICAgICAgICAgICAgICAgIGFyZSBpbmNsdWRpbmcgaXMgZXhwZWN0ZWQgdG8gZXhpc3QsIHlvdSBzaG91bGQgdXNlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlcXVpcmUtaW5jbHVzaW9uJz48ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgIERvaW5nIHNvIG1ha2VzIHN1cmUgdGhhdCBhbiBlcnJvciBpcyBwcm9kdWNlZCBpZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgZmlsZSBjYW5ub3QgYmUgZm91bmQuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3JlcXVpcmUtaW5jbHVzaW9uJz4KLSAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IERpcmVjdGl2ZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJpdEJha2UgdW5kZXJzdGFuZHMgdGhlIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBkaXJlY3RpdmUuCi0gICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RpdmUgYmVoYXZlcyBqdXN0IGxpa2UgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQKLSAgICAgICAgICAgICAgICBCaXRCYWtlIHJhaXNlcyBhIHBhcnNpbmcgZXJyb3IgaWYgdGhlIGZpbGUgdG8gYmUgaW5jbHVkZWQgY2Fubm90Ci0gICAgICAgICAgICAgICAgYmUgZm91bmQuCi0gICAgICAgICAgICAgICAgVGh1cywgYW55IGZpbGUgeW91IHJlcXVpcmUgaXMgaW5zZXJ0ZWQgaW50byB0aGUgZmlsZSB0aGF0IGlzCi0gICAgICAgICAgICAgICAgYmVpbmcgcGFyc2VkIGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlyZWN0aXZlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgcmVxdWlyZSBkaXJlY3RpdmUsIGxpa2UgdGhlIGluY2x1ZGUgZGlyZWN0aXZlIHByZXZpb3VzbHkKLSAgICAgICAgICAgICAgICBkZXNjcmliZWQsIGlzIGEgbW9yZSBnZW5lcmljIG1ldGhvZCBvZiBpbmNsdWRpbmcKLSAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGFzIGNvbXBhcmVkIHRvIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2luaGVyaXQtZGlyZWN0aXZlJz5pbmhlcml0PC9saW5rPiBkaXJlY3RpdmUsCi0gICAgICAgICAgICAgICAgd2hpY2ggaXMgcmVzdHJpY3RlZCB0byBjbGFzcyAoaS5lLiA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICBmaWxlcy4KLSAgICAgICAgICAgICAgICBUaGUgcmVxdWlyZSBkaXJlY3RpdmUgaXMgYXBwbGljYWJsZSBmb3IgYW55IG90aGVyIGtpbmQgb2YKLSAgICAgICAgICAgICAgICBzaGFyZWQgb3IgZW5jYXBzdWxhdGVkIGZ1bmN0aW9uYWxpdHkgb3IgY29uZmlndXJhdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgZG9lcyBub3Qgc3VpdCBhIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFNpbWlsYXIgdG8gaG93IEJpdEJha2UgaGFuZGxlcwotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2luY2x1ZGUtZGlyZWN0aXZlJz48ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICBpZiB0aGUgcGF0aCBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICBvbiB0aGUgcmVxdWlyZSBsaW5lIGlzIGEgcmVsYXRpdmUgcGF0aCwgQml0QmFrZSBsb2NhdGVzCi0gICAgICAgICAgICAgICAgdGhlIGZpcnN0IGZpbGUgaXQgY2FuIGZpbmQgd2l0aGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSB0d28gdmVyc2lvbnMgb2YgYSByZWNpcGUKLSAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Zm9vXzEuMi4yLmJiPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18yLjAuMC5iYjwvZmlsZW5hbWU+KSB3aGVyZQotICAgICAgICAgICAgICAgIGVhY2ggdmVyc2lvbiBjb250YWlucyBzb21lIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IHRoYXQgY291bGQgYmUKLSAgICAgICAgICAgICAgICBzaGFyZWQuCi0gICAgICAgICAgICAgICAgWW91IGNvdWxkIGNyZWF0ZSBhbiBpbmNsdWRlIGZpbGUgbmFtZWQgPGZpbGVuYW1lPmZvby5pbmM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGNvbW1vbiBkZWZpbml0aW9ucyBuZWVkZWQgdG8gYnVpbGQgImZvbyIuCi0gICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSA8ZmlsZW5hbWU+Zm9vLmluYzwvZmlsZW5hbWU+IGlzIGxvY2F0ZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgc2FtZSBkaXJlY3RvcnkgYXMgeW91ciB0d28gcmVjaXBlIGZpbGVzIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgT25jZSB0aGVzZSBjb25kaXRpb25zIGFyZSBzZXQgdXAsIHlvdSBjYW4gc2hhcmUgdGhlIGZ1bmN0aW9uYWxpdHkKLSAgICAgICAgICAgICAgICB1c2luZyBhIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gZGlyZWN0aXZlIGZyb20gd2l0aGluIGVhY2gKLSAgICAgICAgICAgICAgICByZWNpcGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICByZXF1aXJlIGZvby5pbmMKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0naW5oZXJpdC1jb25maWd1cmF0aW9uLWRpcmVjdGl2ZSc+Ci0gICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiBDb25maWd1cmF0aW9uIERpcmVjdGl2ZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSwKLSAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItSU5IRVJJVCc+PGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSB0byBpbmhlcml0IGEgY2xhc3MuCi0gICAgICAgICAgICAgICAgQml0QmFrZSBvbmx5IHN1cHBvcnRzIHRoaXMgZGlyZWN0aXZlIHdoZW4gdXNlZCB3aXRoaW4KLSAgICAgICAgICAgICAgICBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgbmVlZGVkIHRvIGluaGVyaXQgYSBjbGFzcwotICAgICAgICAgICAgICAgIGZpbGUgY2FsbGVkIDxmaWxlbmFtZT5hYmMuYmJjbGFzczwvZmlsZW5hbWU+IGZyb20gYQotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgSU5IRVJJVCArPSAiYWJjIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIGNhdXNlcyB0aGUgbmFtZWQKLSAgICAgICAgICAgICAgICBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQgdGhlIHBvaW50IG9mIHRoZSBkaXJlY3RpdmUKLSAgICAgICAgICAgICAgICBkdXJpbmcgcGFyc2luZy4KLSAgICAgICAgICAgICAgICBBcyB3aXRoIHRoZSA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSwgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBtdXN0IGJlIGxvY2F0ZWQgaW4gYQotICAgICAgICAgICAgICAgICJjbGFzc2VzIiBzdWJkaXJlY3RvcnkgaW4gb25lIG9mIHRoZSBkaXJlY3RvcmllcyBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZXMgYXJlIHBhcnNlZAotICAgICAgICAgICAgICAgICAgICBmaXJzdCBkdXJpbmcgQml0QmFrZSdzIGV4ZWN1dGlvbiwgdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiB0byBpbmhlcml0IGEgY2xhc3MgZWZmZWN0aXZlbHkKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgdGhlIGNsYXNzIGdsb2JhbGx5IChpLmUuIGZvciBhbGwgcmVjaXBlcykuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgZGlyZWN0aXZlIHRvIGluaGVyaXQKLSAgICAgICAgICAgICAgICBtdWx0aXBsZSBjbGFzc2VzLCB5b3UgY2FuIHByb3ZpZGUgdGhlbSBvbiB0aGUgc2FtZSBsaW5lIGluIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICBVc2Ugc3BhY2VzIHRvIHNlcGFyYXRlIHRoZSBjbGFzc2VzLgotICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gaW5oZXJpdCBib3RoIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnBrZ2NvbmZpZzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY2xhc3NlczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIElOSEVSSVQgKz0gImF1dG90b29scyBwa2djb25maWciCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2Z1bmN0aW9ucyc+Ci0gICAgICAgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXMgd2l0aCBtb3N0IGxhbmd1YWdlcywgZnVuY3Rpb25zIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQKLSAgICAgICAgICAgIGFyZSB1c2VkIHRvIGJ1aWxkIHVwIG9wZXJhdGlvbnMgaW50byB0YXNrcy4KLSAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoZWxsIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBzaGVsbCBzY3JpcHQgYW5kIGV4ZWN1dGVkIGVpdGhlcgotICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBhcyBmdW5jdGlvbnMsIHRhc2tzLCBvciBib3RoLgotICAgICAgICAgICAgICAgICAgICBUaGV5IGNhbiBhbHNvIGJlIGNhbGxlZCBieSBvdGhlciBzaGVsbCBmdW5jdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qml0QmFrZS1TdHlsZSBQeXRob24gRnVuY3Rpb25zOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkgQml0QmFrZSBvciBvdGhlcgotICAgICAgICAgICAgICAgICAgICBQeXRob24gZnVuY3Rpb25zIHVzaW5nIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlB5dGhvbiBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBleGVjdXRlZCBieSBQeXRob24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QW5vbnltb3VzIFB5dGhvbiBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9ucyBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZwotICAgICAgICAgICAgICAgICAgICBwYXJzaW5nLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBmdW5jdGlvbiwgeW91IGNhbiBvbmx5Ci0gICAgICAgICAgICBkZWZpbmUgdGhlbSBpbiBjbGFzcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pCi0gICAgICAgICAgICBhbmQgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgIGZpbGVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3NoZWxsLWZ1bmN0aW9ucyc+Ci0gICAgICAgICAgICA8dGl0bGU+U2hlbGwgRnVuY3Rpb25zPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gc2hlbGwgc2NyaXB0IGFuZCBleGVjdXRlZCBlaXRoZXIKLSAgICAgICAgICAgICAgICBkaXJlY3RseSBhcyBmdW5jdGlvbnMsIHRhc2tzLCBvciBib3RoLgotICAgICAgICAgICAgICAgIFRoZXkgY2FuIGFsc28gYmUgY2FsbGVkIGJ5IG90aGVyIHNoZWxsIGZ1bmN0aW9ucy4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgc2hlbGwgZnVuY3Rpb24gZGVmaW5pdGlvbjoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHNvbWVfZnVuY3Rpb24gKCkgewotICAgICAgICAgZWNobyAiSGVsbG8gV29ybGQiCi0gICAgIH0KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucyBpbiB5b3VyIHJlY2lwZQotICAgICAgICAgICAgICAgIG9yIGNsYXNzIGZpbGVzLCB5b3UgbmVlZCB0byBmb2xsb3cgdGhlIHNoZWxsIHByb2dyYW1taW5nCi0gICAgICAgICAgICAgICAgcnVsZXMuCi0gICAgICAgICAgICAgICAgVGhlIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGJ5IDxmaWxlbmFtZT4vYmluL3NoPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgd2hpY2ggbWF5IG5vdCBiZSBhIGJhc2ggc2hlbGwgYnV0IG1pZ2h0IGJlIHNvbWV0aGluZwotICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmRhc2g8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCB1c2UgQmFzaC1zcGVjaWZpYyBzY3JpcHQgKGJhc2hpc21zKS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgT3ZlcnJpZGVzIGFuZCBvdmVycmlkZS1zdHlsZSBvcGVyYXRvcnMgbGlrZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gY2FuIGFsc28gYmUgYXBwbGllZCB0bwotICAgICAgICAgICAgICAgIHNoZWxsIGZ1bmN0aW9ucy4KLSAgICAgICAgICAgICAgICBNb3N0IGNvbW1vbmx5LCB0aGlzIGFwcGxpY2F0aW9uIHdvdWxkIGJlIHVzZWQgaW4gYQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRvIG1vZGlmeSBmdW5jdGlvbnMgaW4KLSAgICAgICAgICAgICAgICB0aGUgbWFpbiByZWNpcGUuCi0gICAgICAgICAgICAgICAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBtb2RpZnkgZnVuY3Rpb25zIGluaGVyaXRlZCBmcm9tCi0gICAgICAgICAgICAgICAgY2xhc3Nlcy4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGRvX2ZvbygpIHsKLSAgICAgICAgIGJicGxhaW4gZmlyc3QKLSAgICAgICAgIGZuCi0gICAgIH0KLQotICAgICBmbl9wcmVwZW5kKCkgewotICAgICAgICAgYmJwbGFpbiBzZWNvbmQKLSAgICAgfQotCi0gICAgIGZuKCkgewotICAgICAgICAgYmJwbGFpbiB0aGlyZAotICAgICB9Ci0KLSAgICAgZG9fZm9vX2FwcGVuZCgpIHsKLSAgICAgICAgIGJicGxhaW4gZm91cnRoCi0gICAgIH0KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBwcmludHMgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHJlY2lwZW5hbWUgZG9fZm9vOiBmaXJzdAotICAgICByZWNpcGVuYW1lIGRvX2Zvbzogc2Vjb25kCi0gICAgIHJlY2lwZW5hbWUgZG9fZm9vOiB0aGlyZAotICAgICByZWNpcGVuYW1lIGRvX2ZvbzogZm91cnRoCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMgYW5kIG92ZXJyaWRlLXN0eWxlIG9wZXJhdG9ycyBjYW4KLSAgICAgICAgICAgICAgICAgICAgYmUgYXBwbGllZCB0byBhbnkgc2hlbGwgZnVuY3Rpb24sIG5vdCBqdXN0Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Rhc2tzJz50YXNrczwvbGluaz4uCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZTwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gdmlldyB0aGUgZmluYWwgYXNzZW1ibGVkIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIG92ZXJyaWRlcyBoYXZlIGJlZW4gYXBwbGllZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLXN0eWxlLXB5dGhvbi1mdW5jdGlvbnMnPgotICAgICAgICAgICAgPHRpdGxlPkJpdEJha2UtU3R5bGUgUHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBpbiBQeXRob24gYW5kIGV4ZWN1dGVkIGJ5Ci0gICAgICAgICAgICAgICAgQml0QmFrZSBvciBvdGhlciBQeXRob24gZnVuY3Rpb25zIHVzaW5nCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgQml0QmFrZSBmdW5jdGlvbiBpczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHB5dGhvbiBzb21lX3B5dGhvbl9mdW5jdGlvbiAoKSB7Ci0gICAgICAgICBkLnNldFZhcigiVEVYVCIsICJIZWxsbyBXb3JsZCIpCi0gICAgICAgICBwcmludCBkLmdldFZhcigiVEVYVCIpCi0gICAgIH0KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgUHl0aG9uICJiYiIgYW5kICJvcyIgbW9kdWxlcyBhcmUgYWxyZWFkeQotICAgICAgICAgICAgICAgIGltcG9ydGVkLCB5b3UgZG8gbm90IG5lZWQgdG8gaW1wb3J0IHRoZXNlIG1vZHVsZXMuCi0gICAgICAgICAgICAgICAgQWxzbyBpbiB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMsIHRoZSBkYXRhc3RvcmUgKCJkIikKLSAgICAgICAgICAgICAgICBpcyBhIGdsb2JhbCB2YXJpYWJsZSBhbmQgaXMgYWx3YXlzIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgICAgICAgICBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlIGV4cHJlc3Npb25zIChlLmcuIDxmaWxlbmFtZT4ke1h9PC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgIGFyZSBubyBsb25nZXIgZXhwYW5kZWQgd2l0aGluIFB5dGhvbiBmdW5jdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgaXMgaW50ZW50aW9uYWwgaW4gb3JkZXIgdG8gYWxsb3cgeW91Ci0gICAgICAgICAgICAgICAgICAgIHRvIGZyZWVseSBzZXQgdmFyaWFibGUgdmFsdWVzIHRvIGV4cGFuZGFibGUgZXhwcmVzc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgdGhlbSBleHBhbmRlZCBwcmVtYXR1cmVseS4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHdpc2ggdG8gZXhwYW5kIGEgdmFyaWFibGUgd2l0aGluIGEgUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCB1c2UgPGZpbGVuYW1lPmQuZ2V0VmFyKCJYIik8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgT3IsIGZvciBtb3JlIGNvbXBsaWNhdGVkIGV4cHJlc3Npb25zLCB1c2UKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmQuZXhwYW5kKCk8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFNpbWlsYXIgdG8gc2hlbGwgZnVuY3Rpb25zLCB5b3UgY2FuIGFsc28gYXBwbHkgb3ZlcnJpZGVzCi0gICAgICAgICAgICAgICAgYW5kIG92ZXJyaWRlLXN0eWxlIG9wZXJhdG9ycyB0byBCaXRCYWtlLXN0eWxlIFB5dGhvbgotICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHB5dGhvbiBkb19mb29fcHJlcGVuZCgpIHsKLSAgICAgICAgIGJiLnBsYWluKCJmaXJzdCIpCi0gICAgIH0KLQotICAgICBweXRob24gZG9fZm9vKCkgewotICAgICAgICAgYmIucGxhaW4oInNlY29uZCIpCi0gICAgIH0KLQotICAgICBweXRob24gZG9fZm9vX2FwcGVuZCgpIHsKLSAgICAgICAgIGJiLnBsYWluKCJ0aGlyZCIpCi0gICAgIH0KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4gcHJpbnRzCi0gICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHJlY2lwZW5hbWUgZG9fZm9vOiBmaXJzdAotICAgICByZWNpcGVuYW1lIGRvX2Zvbzogc2Vjb25kCi0gICAgIHJlY2lwZW5hbWUgZG9fZm9vOiB0aGlyZAotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmJpdGJha2UgLWU8L2ZpbGVuYW1lPiZuYnNwOzxyZXBsYWNlYWJsZT5yZWNpcGVuYW1lPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHZpZXcgdGhlIGZpbmFsIGFzc2VtYmxlZCBmdW5jdGlvbgotICAgICAgICAgICAgICAgIGFmdGVyIGFsbCBvdmVycmlkZXMgaGF2ZSBiZWVuIGFwcGxpZWQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ncHl0aG9uLWZ1bmN0aW9ucyc+Ci0gICAgICAgICAgICA8dGl0bGU+UHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBpbiBQeXRob24gYW5kIGFyZSBleGVjdXRlZCBieQotICAgICAgICAgICAgICAgIG90aGVyIFB5dGhvbiBjb2RlLgotICAgICAgICAgICAgICAgIEV4YW1wbGVzIG9mIFB5dGhvbiBmdW5jdGlvbnMgYXJlIHV0aWxpdHkgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgdGhhdCB5b3UgaW50ZW5kIHRvIGNhbGwgZnJvbSBpbi1saW5lIFB5dGhvbiBvcgotICAgICAgICAgICAgICAgIGZyb20gd2l0aGluIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMuCi0gICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZGVmIGdldF9kZXBlbmRzKGQpOgotICAgICAgICAgaWYgZC5nZXRWYXIoJ1NPTUVDT05ESVRJT04nKToKLSAgICAgICAgICAgICByZXR1cm4gImRlcGVuZGVuY3l3aXRoY29uZCIKLSAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgcmV0dXJuICJkZXBlbmRlbmN5IgotICAgICBTT01FQ09ORElUSU9OID0gIjEiCi0gICAgIERFUEVORFMgPSAiJHtAZ2V0X2RlcGVuZHMoZCl9IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGlzIHdvdWxkIHJlc3VsdCBpbiA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY29udGFpbmluZyA8ZmlsZW5hbWU+ZGVwZW5kZW5jeXdpdGhjb25kPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgdGhpbmdzIHRvIGtub3cgYWJvdXQgUHl0aG9uIGZ1bmN0aW9uczoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHl0aG9uIGZ1bmN0aW9ucyBjYW4gdGFrZSBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgQml0QmFrZSBkYXRhc3RvcmUgaXMgbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgcGFzcyBpdCBpbiBhcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgdG8gdGhlIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgImJiIiBhbmQgIm9zIiBQeXRob24gbW9kdWxlcyBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIGltcG9ydCB0aGVtLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nYml0YmFrZS1zdHlsZS1weXRob24tZnVuY3Rpb25zLXZlcnN1cy1weXRob24tZnVuY3Rpb25zJz4KLSAgICAgICAgICAgIDx0aXRsZT5CaXRCYWtlLVN0eWxlIFB5dGhvbiBGdW5jdGlvbnMgVmVyc3VzIFB5dGhvbiBGdW5jdGlvbnM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIGJldHdlZW4KLSAgICAgICAgICAgICAgICBCaXRCYWtlLXN0eWxlIFB5dGhvbiBmdW5jdGlvbnMgYW5kIHJlZ3VsYXIgUHl0aG9uCi0gICAgICAgICAgICAgICAgZnVuY3Rpb25zIGRlZmluZWQgd2l0aCAiZGVmIjoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBPbmx5IEJpdEJha2Utc3R5bGUgUHl0aG9uIGZ1bmN0aW9ucyBjYW4gYmUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Rhc2tzJz50YXNrczwvbGluaz4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVzIGFuZCBvdmVycmlkZS1zdHlsZSBvcGVyYXRvcnMgY2FuIG9ubHkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlIGFwcGxpZWQgdG8gQml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVndWxhciBQeXRob24gZnVuY3Rpb25zIGNhbiB0YWtlIGFyZ3VtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJldHVybiB2YWx1ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZ3MnPlZhcmlhYmxlIGZsYWdzPC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+W2RpcnNdPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+W2NsZWFuZGlyc108L2ZpbGVuYW1lPiwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+W2xvY2tmaWxlc108L2ZpbGVuYW1lPiBjYW4gYmUgdXNlZAotICAgICAgICAgICAgICAgICAgICAgICAgb24gQml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zLCBidXQgbm90IG9uCi0gICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyIFB5dGhvbiBmdW5jdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zIGdlbmVyYXRlIGEgc2VwYXJhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLWJiLVQnPjxmaWxlbmFtZT5UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vcnVuLjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZ1bmN0aW9uLW5hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uPC9maWxlbmFtZT48cmVwbGFjZWFibGU+cGlkPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCB0aGF0IGlzIGV4ZWN1dGVkIHRvIHJ1biB0aGUgZnVuY3Rpb24sIGFuZCBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSBhIGxvZyBmaWxlIGluCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUfS9sb2cuPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZnVuY3Rpb24tbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi48L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5waWQ8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhleSBhcmUgZXhlY3V0ZWQgYXMgdGFza3MuPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3VsYXIgUHl0aG9uIGZ1bmN0aW9ucyBleGVjdXRlICJpbmxpbmUiIGFuZCBkbyBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGFueSBmaWxlcyBpbiA8ZmlsZW5hbWU+JHtUfTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3VsYXIgUHl0aG9uIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggdGhlIHVzdWFsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gc3ludGF4LgotICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zIGFyZSB1c3VhbGx5IHRhc2tzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNhbGxlZCBkaXJlY3RseSBieSBCaXRCYWtlLCBidXQgY2FuIGFsc28gYmUgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBtYW51YWxseSBmcm9tIFB5dGhvbiBjb2RlIGJ5IHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4gZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygibXlfYml0YmFrZV9zdHlsZV9mdW5jdGlvbiIsIGQpCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPiBjYW4gYWxzbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgdG8gcnVuIHNoZWxsIGZ1bmN0aW9ucyBmcm9tIFB5dGhvbiBjb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHJ1biBhIHNoZWxsIGZ1bmN0aW9uIGJlZm9yZSBhIFB5dGhvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgc2FtZSB0YXNrLCB0aGVuIHlvdSBjYW4gdXNlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgaGVscGVyIFB5dGhvbiBmdW5jdGlvbiB0aGF0IHN0YXJ0cyBieSBydW5uaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNoZWxsIGZ1bmN0aW9uIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPiBhbmQgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnMgdGhlIFB5dGhvbiBjb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZGV0ZWN0IGVycm9ycyBmcm9tIGZ1bmN0aW9ucyBleGVjdXRlZCB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPiwgeW91Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW4gY2F0Y2ggdGhlIDxmaWxlbmFtZT5iYi5idWlsZC5GdW5jRmFpbGVkPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBpbiBtZXRhZGF0YSAocmVjaXBlcyBhbmQgY2xhc3Nlcykgc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHRoZW1zZWx2ZXMgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuRnVuY0ZhaWxlZDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGhlciwgPGZpbGVuYW1lPmJiLmJ1aWxkLkZ1bmNGYWlsZWQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBnZW5lcmFsIGluZGljYXRvciB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCBmdW5jdGlvbiBmYWlsZWQgYnkgcmFpc2luZyBhbiBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFuIGV4Y2VwdGlvbiByYWlzZWQgYnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZmF0YWwoKTwvZmlsZW5hbWU+IHdpbGwgYmUgY2F1Z2h0IGluc2lkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+LCBhbmQgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5GdW5jRmFpbGVkPC9maWxlbmFtZT4gd2lsbCBiZSByYWlzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiByZXNwb25zZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBEdWUgdG8gdGhlaXIgc2ltcGxpY2l0eSwgeW91IHNob3VsZCBwcmVmZXIgcmVndWxhciBQeXRob24gZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgb3ZlciBCaXRCYWtlLXN0eWxlIFB5dGhvbiBmdW5jdGlvbnMgdW5sZXNzIHlvdSBuZWVkIGEgZmVhdHVyZSBzcGVjaWZpYwotICAgICAgICAgICAgICAgIHRvIEJpdEJha2Utc3R5bGUgUHl0aG9uIGZ1bmN0aW9ucy4KLSAgICAgICAgICAgICAgICBSZWd1bGFyIFB5dGhvbiBmdW5jdGlvbnMgaW4gbWV0YWRhdGEgYXJlIGEgbW9yZSByZWNlbnQgaW52ZW50aW9uIHRoYW4KLSAgICAgICAgICAgICAgICBCaXRCYWtlLXN0eWxlIFB5dGhvbiBmdW5jdGlvbnMsIGFuZCBvbGRlciBjb2RlIHRlbmRzIHRvIHVzZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+IG1vcmUgb2Z0ZW4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nYW5vbnltb3VzLXB5dGhvbi1mdW5jdGlvbnMnPgotICAgICAgICAgICAgPHRpdGxlPkFub255bW91cyBQeXRob24gRnVuY3Rpb25zPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBzZXQgdmFyaWFibGVzIG9yIHBlcmZvcm0KLSAgICAgICAgICAgICAgICBvdGhlciBvcGVyYXRpb25zIHByb2dyYW1tYXRpY2FsbHkgZHVyaW5nIHBhcnNpbmcuCi0gICAgICAgICAgICAgICAgVG8gZG8gdGhpcywgeW91IGNhbiBkZWZpbmUgc3BlY2lhbCBQeXRob24gZnVuY3Rpb25zLAotICAgICAgICAgICAgICAgIGNhbGxlZCBhbm9ueW1vdXMgUHl0aG9uIGZ1bmN0aW9ucywgdGhhdCBydW4gYXQgdGhlCi0gICAgICAgICAgICAgICAgZW5kIG9mIHBhcnNpbmcuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uYWxseSBzZXRzIGEgdmFyaWFibGUKLSAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgIGFub3RoZXIgdmFyaWFibGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBweXRob24gKCkgewotICAgICAgICAgaWYgZC5nZXRWYXIoJ1NPTUVWQVInKSA9PSAndmFsdWUnOgotICAgICAgICAgICAgIGQuc2V0VmFyKCdBTk9USEVSVkFSJywgJ3ZhbHVlMicpCi0gICAgIH0KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgQW4gZXF1aXZhbGVudCB3YXkgdG8gbWFyayBhIGZ1bmN0aW9uIGFzIGFuIGFub255bW91cwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIHRvIGdpdmUgaXQgdGhlIG5hbWUgIl9fYW5vbnltb3VzIiwgcmF0aGVyCi0gICAgICAgICAgICAgICAgdGhhbiBubyBuYW1lLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBbm9ueW1vdXMgUHl0aG9uIGZ1bmN0aW9ucyBhbHdheXMgcnVuIGF0IHRoZSBlbmQKLSAgICAgICAgICAgICAgICBvZiBwYXJzaW5nLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuCi0gICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgY29udGFpbnMgbWFueSBhbm9ueW1vdXMgZnVuY3Rpb25zLCB0aGV5Ci0gICAgICAgICAgICAgICAgcnVuIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXJlIGRlZmluZWQgd2l0aGluIHRoZQotICAgICAgICAgICAgICAgIHJlY2lwZS4KLSAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNuaXBwZXQ6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBweXRob24gKCkgewotICAgICAgICAgZC5zZXRWYXIoJ0ZPTycsICdmb28gMicpCi0gICAgIH0KLQotICAgICBGT08gPSAiZm9vIDEiCi0KLSAgICAgcHl0aG9uICgpIHsKLSAgICAgICAgIGQuYXBwZW5kVmFyKCdCQVInLCAnIGJhciAyJykKLSAgICAgfQotCi0gICAgIEJBUiA9ICJiYXIgMSIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgaXMgY29uY2VwdHVhbGx5IGVxdWl2YWxlbnQgdG8gdGhlCi0gICAgICAgICAgICAgICAgZm9sbG93aW5nIHNuaXBwZXQ6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBGT08gPSAiZm9vIDEiCi0gICAgIEJBUiA9ICJiYXIgMSIKLSAgICAgRk9PID0gImZvbyAyIgotICAgICBCQVIgKz0gImJhciAyIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4gZW5kcyB1cCB3aXRoIHRoZSB2YWx1ZSAiZm9vIDIiLAotICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QkFSPC9maWxlbmFtZT4gd2l0aCB0aGUgdmFsdWUgImJhciAxIGJhciAyIi4KLSAgICAgICAgICAgICAgICBKdXN0IGFzIGluIHRoZSBzZWNvbmQgc25pcHBldCwgdGhlIHZhbHVlcyBzZXQgZm9yIHRoZQotICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3aXRoaW4gdGhlIGFub255bW91cyBmdW5jdGlvbnMgYmVjb21lIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgIHRvIHRhc2tzLCB3aGljaCBhbHdheXMgcnVuIGFmdGVyIHBhcnNpbmcuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIE92ZXJyaWRlcyBhbmQgb3ZlcnJpZGUtc3R5bGUgb3BlcmF0b3JzIHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiIgYXJlIGFwcGxpZWQgYmVmb3JlCi0gICAgICAgICAgICAgICAgYW5vbnltb3VzIGZ1bmN0aW9ucyBydW4uCi0gICAgICAgICAgICAgICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4gZW5kcwotICAgICAgICAgICAgICAgIHVwIHdpdGggdGhlIHZhbHVlICJmb28gZnJvbSBhbm9ueW1vdXMiOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgRk9PID0gImZvbyIKLSAgICAgRk9PX2FwcGVuZCA9ICIgZnJvbSBvdXRzaWRlIgotCi0gICAgIHB5dGhvbiAoKSB7Ci0gICAgICAgICBkLnNldFZhcigiRk9PIiwgImZvbyBmcm9tIGFub255bW91cyIpCi0gICAgIH0KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgRm9yIG1ldGhvZHMgeW91IGNhbiB1c2Ugd2l0aCBhbm9ueW1vdXMgUHl0aG9uIGZ1bmN0aW9ucywKLSAgICAgICAgICAgICAgICBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Z1bmN0aW9ucy15b3UtY2FuLWNhbGwtZnJvbS13aXRoaW4tcHl0aG9uJz5GdW5jdGlvbnMgWW91IENhbiBDYWxsIEZyb20gV2l0aGluIFB5dGhvbjwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICBGb3IgYSBkaWZmZXJlbnQgbWV0aG9kIHRvIHJ1biBQeXRob24gY29kZSBkdXJpbmcgcGFyc2luZywKLSAgICAgICAgICAgICAgICBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2lubGluZS1weXRob24tdmFyaWFibGUtZXhwYW5zaW9uJz5JbmxpbmUgUHl0aG9uIFZhcmlhYmxlIEV4cGFuc2lvbjwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdmbGV4aWJsZS1pbmhlcml0YW5jZS1mb3ItY2xhc3MtZnVuY3Rpb25zJz4KLSAgICAgICAgICAgIDx0aXRsZT5GbGV4aWJsZSBJbmhlcml0YW5jZSBmb3IgQ2xhc3MgRnVuY3Rpb25zPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhyb3VnaCBjb2RpbmcgdGVjaG5pcXVlcyBhbmQgdGhlIHVzZSBvZgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFBPUlRfRlVOQ1RJT05TPC9maWxlbmFtZT4sIEJpdEJha2Ugc3VwcG9ydHMKLSAgICAgICAgICAgICAgICBleHBvcnRpbmcgYSBmdW5jdGlvbiBmcm9tIGEgY2xhc3Mgc3VjaCB0aGF0IHRoZQotICAgICAgICAgICAgICAgIGNsYXNzIGZ1bmN0aW9uIGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgICAgICBvZiB0aGUgZnVuY3Rpb24sIGJ1dCBjYW4gc3RpbGwgYmUgY2FsbGVkIGlmIGEgcmVjaXBlCi0gICAgICAgICAgICAgICAgaW5oZXJpdGluZyB0aGUgY2xhc3MgbmVlZHMgdG8gZGVmaW5lIGl0cyBvd24gdmVyc2lvbiBvZgotICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVG8gdW5kZXJzdGFuZCB0aGUgYmVuZWZpdHMgb2YgdGhpcyBmZWF0dXJlLCBjb25zaWRlcgotICAgICAgICAgICAgICAgIHRoZSBiYXNpYyBzY2VuYXJpbyB3aGVyZSBhIGNsYXNzIGRlZmluZXMgYSB0YXNrIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgYW5kIHlvdXIgcmVjaXBlIGluaGVyaXRzIHRoZSBjbGFzcy4KLSAgICAgICAgICAgICAgICBJbiB0aGlzIGJhc2ljIHNjZW5hcmlvLCB5b3VyIHJlY2lwZSBpbmhlcml0cyB0aGUgdGFzawotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzIGRlZmluZWQgaW4gdGhlIGNsYXNzLgotICAgICAgICAgICAgICAgIElmIGRlc2lyZWQsIHlvdXIgcmVjaXBlIGNhbiBhZGQgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gYnkgdXNpbmcgdGhlICJfcHJlcGVuZCIgb3IgIl9hcHBlbmQiIG9wZXJhdGlvbnMKLSAgICAgICAgICAgICAgICByZXNwZWN0aXZlbHksIG9yIGl0IGNhbiByZWRlZmluZSB0aGUgZnVuY3Rpb24gY29tcGxldGVseS4KLSAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBpdCByZWRlZmluZXMgdGhlIGZ1bmN0aW9uLCB0aGVyZSBpcwotICAgICAgICAgICAgICAgIG5vIG1lYW5zICBmb3IgaXQgdG8gY2FsbCB0aGUgY2xhc3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPiBwcm92aWRlcyBhIG1lY2hhbmlzbQotICAgICAgICAgICAgICAgIHRoYXQgZW5hYmxlcyB0aGUgcmVjaXBlJ3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbAotICAgICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVG8gbWFrZSB1c2Ugb2YgdGhpcyB0ZWNobmlxdWUsIHlvdSBuZWVkIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgICB0aGluZ3MgaW4gcGxhY2U6Ci0gICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIG5lZWRzIHRvIGRlZmluZSB0aGUgZnVuY3Rpb24gYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgPHJlcGxhY2VhYmxlPmNsYXNzbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPl88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5mdW5jdGlvbm5hbWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgY2xhc3MgZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhci5iYmNsYXNzPC9maWxlbmFtZT4gYW5kIGEgZnVuY3Rpb24gbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19mb288L2ZpbGVuYW1lPiwgdGhlIGNsYXNzIG11c3QgZGVmaW5lIHRoZSBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgYmFyX2RvX2ZvbwotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBuZWVkcyB0byBjb250YWluIHRoZSA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgRVhQT1JUX0ZVTkNUSU9OUyA8cmVwbGFjZWFibGU+ZnVuY3Rpb25uYW1lPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb250aW51aW5nIHdpdGggdGhlIHNhbWUgZXhhbXBsZSwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4gdGhlIDxmaWxlbmFtZT5iYXIuYmJjbGFzczwvZmlsZW5hbWU+IHdvdWxkIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBFWFBPUlRfRlVOQ1RJT05TIGRvX2ZvbwotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGFwcHJvcHJpYXRlbHkgZnJvbSB3aXRoaW4geW91cgotICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUsIGlmIHlvdXIgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBjYWxsIHRoZSBjbGFzcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBjYWxsIDxmaWxlbmFtZT5iYXJfZG9fZm9vPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4gd2FzIGEgc2hlbGwgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+IHdhcyB1c2VkIGFzIGFib3ZlLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSdzIGZ1bmN0aW9uIGNvdWxkIGNvbmRpdGlvbmFsbHkgY2FsbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGRvX2ZvbygpIHsKLSAgICAgICAgICAgICBpZiBbIHNvbWVjb25kaXRpb24gXSA7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgIGJhcl9kb19mb28KLSAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAjIERvIHNvbWV0aGluZyBlbHNlCi0gICAgICAgICAgICAgZmkKLSAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgVG8gY2FsbCB5b3VyIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGFzIGRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlLCBjYWxsIGl0IGFzIDxmaWxlbmFtZT5kb19mb288L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIFdpdGggdGhlc2UgY29uZGl0aW9ucyBtZXQsIHlvdXIgc2luZ2xlIHJlY2lwZQotICAgICAgICAgICAgICAgIGNhbiBmcmVlbHkgY2hvb3NlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgYXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZmlsZSBhbmQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGluIHlvdXIgcmVjaXBlLgotICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IHVwIHRoZXNlIGNvbmRpdGlvbnMsIHlvdSBhcmUgbGltaXRlZCB0byB1c2luZyBvbmUgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICBvciB0aGUgb3RoZXIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ndGFza3MnPgotICAgICAgICA8dGl0bGU+VGFza3M8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGFza3MgYXJlIEJpdEJha2UgZXhlY3V0aW9uIHVuaXRzIHRoYXQgbWFrZSB1cCB0aGUKLSAgICAgICAgICAgIHN0ZXBzIHRoYXQgQml0QmFrZSBjYW4gcnVuIGZvciBhIGdpdmVuIHJlY2lwZS4KLSAgICAgICAgICAgIFRhc2tzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiByZWNpcGVzIGFuZCBjbGFzc2VzCi0gICAgICAgICAgICAoaS5lLiBpbiA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMgYW5kIGZpbGVzCi0gICAgICAgICAgICBpbmNsdWRlZCBvciBpbmhlcml0ZWQgZnJvbSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGZpbGVzKS4KLSAgICAgICAgICAgIEJ5IGNvbnZlbnRpb24sIHRhc2tzIGhhdmUgbmFtZXMgdGhhdCBzdGFydCB3aXRoICJkb18iLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb21vdGluZy1hLWZ1bmN0aW9uLXRvLWEtdGFzayc+Ci0gICAgICAgICAgICA8dGl0bGU+UHJvbW90aW5nIGEgRnVuY3Rpb24gdG8gYSBUYXNrPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGFza3MgYXJlIGVpdGhlcgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NoZWxsLWZ1bmN0aW9ucyc+c2hlbGwgZnVuY3Rpb25zPC9saW5rPiBvcgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2JpdGJha2Utc3R5bGUtcHl0aG9uLWZ1bmN0aW9ucyc+Qml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zPC9saW5rPgotICAgICAgICAgICAgICAgIHRoYXQgaGF2ZSBiZWVuIHByb21vdGVkIHRvIHRhc2tzIGJ5IHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIGNhbiBhbHNvCi0gICAgICAgICAgICAgICAgb3B0aW9uYWxseSBkZXNjcmliZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUKLSAgICAgICAgICAgICAgICB0YXNrIGFuZCBvdGhlciB0YXNrcy4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gZGVmaW5lIGEgdGFzawotICAgICAgICAgICAgICAgIGFuZCBkZWNsYXJlIHNvbWUgZGVwZW5kZW5jaWVzOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcHl0aG9uIGRvX3ByaW50ZGF0ZSAoKSB7Ci0gICAgICAgICBpbXBvcnQgdGltZQotICAgICAgICAgcHJpbnQgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdGltZS5nbXRpbWUoKSkKLSAgICAgfQotICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gcHJvbW90ZSB0bwotICAgICAgICAgICAgICAgIGEgdGFzay4KLSAgICAgICAgICAgICAgICBJZiB0aGUgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoICJkb18iLCAiZG9fIiBpcwotICAgICAgICAgICAgICAgIGltcGxpY2l0bHkgYWRkZWQsIHdoaWNoIGVuZm9yY2VzIHRoZSBjb252ZW50aW9uIHRoYXQKLSAgICAgICAgICAgICAgICBhbGwgdGFzayBuYW1lcyBzdGFydCB3aXRoICJkb18iLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgYmVjb21lcyBhCi0gICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvZiB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB0YXNrLCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0YXNrIChpLmUuIHRoZSB0YXNrIHJ1biBieQotICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgdW5sZXNzCi0gICAgICAgICAgICAgICAgYW5vdGhlciB0YXNrIGlzIHNwZWNpZmllZCBleHBsaWNpdGx5KS4KLSAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB0YXNrIGJlY29tZXMgZGVwZW5kZW50IHVwb24gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzay4KLSAgICAgICAgICAgICAgICBSdW5uaW5nIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrCi0gICAgICAgICAgICAgICAgcmVzdWx0cyBpbiB0aGUgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgdGFzayBydW5uaW5nIGZpcnN0LgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdHJ5IG91dCB0aGUgcHJldmlvdXMgZXhhbXBsZSwgeW91IG1pZ2h0IHNlZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBpcyBvbmx5IHJ1bgotICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgdGltZSB5b3UgYnVpbGQgdGhlIHJlY2lwZSB3aXRoCi0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYmVjYXVzZSBCaXRCYWtlIGNvbnNpZGVycyB0aGUgdGFzayAidXAtdG8tZGF0ZSIKLSAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhhdCBpbml0aWFsIHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgdGhlIHRhc2sgdG8gYWx3YXlzIGJlIHJlcnVuIGZvcgotICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50YXRpb24gcHVycG9zZXMsIHlvdSBjYW4gbWFrZSBCaXRCYWtlIGFsd2F5cwotICAgICAgICAgICAgICAgICAgICBjb25zaWRlciB0aGUgdGFzayAib3V0LW9mLWRhdGUiIGJ5IHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WzwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZ3MnPjxmaWxlbmFtZT5ub3N0YW1wPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPl08L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmbGFnLCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGRvX3ByaW50ZGF0ZVtub3N0YW1wXSA9ICIxIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBleHBsaWNpdGx5IHJ1biB0aGUgdGFzayBhbmQgcHJvdmlkZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3B0aW9uIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiAtYyBwcmludGRhdGUgLWYKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBXaGVuIG1hbnVhbGx5IHNlbGVjdGluZyBhIHRhc2sgdG8gcnVuIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4mbmJzcDs8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8ZmlsZW5hbWU+LWM8L2ZpbGVuYW1lPiZuYnNwOzxyZXBsYWNlYWJsZT50YXNrPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgeW91IGNhbiBvbWl0IHRoZSAiZG9fIiBwcmVmaXggYXMgcGFydCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgdGFzayBuYW1lLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdvbmRlciBhYm91dCB0aGUgcHJhY3RpY2FsIGVmZmVjdHMgb2YgdXNpbmcKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IHdpdGhvdXQgc3BlY2lmeWluZyBhbnkKLSAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgYXMgaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBhZGR0YXNrIHByaW50ZGF0ZQotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGFzc3VtaW5nIGRlcGVuZGVuY2llcyBoYXZlIG5vdCBiZWVuCi0gICAgICAgICAgICAgICAgYWRkZWQgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLCB0aGUgb25seSB3YXkgdG8gcnVuCi0gICAgICAgICAgICAgICAgdGhlIHRhc2sgaXMgYnkgZXhwbGljaXRseSBzZWxlY3RpbmcgaXQgd2l0aAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4mbmJzcDs8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8ZmlsZW5hbWU+LWMgcHJpbnRkYXRlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2xpc3R0YXNrczwvZmlsZW5hbWU+IHRhc2sgdG8gbGlzdCBhbGwgdGFza3MKLSAgICAgICAgICAgICAgICBkZWZpbmVkIGluIGEgcmVjaXBlIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4gLWMgbGlzdHRhc2tzCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRhc2sgZGVwZW5kZW5jaWVzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RlcGVuZGVuY2llcyc+RGVwZW5kZW5jaWVzPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWdzJz5WYXJpYWJsZSBGbGFnczwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gdmFyaWFibGUgZmxhZ3MgeW91IGNhbiB1c2Ugd2l0aAotICAgICAgICAgICAgICAgIHRhc2tzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RlbGV0aW5nLWEtdGFzayc+Ci0gICAgICAgICAgICA8dGl0bGU+RGVsZXRpbmcgYSBUYXNrPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgd2VsbCBhcyBiZWluZyBhYmxlIHRvIGFkZCB0YXNrcywgeW91IGNhbiBkZWxldGUgdGhlbS4KLSAgICAgICAgICAgICAgICBTaW1wbHkgdXNlIHRoZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KLSAgICAgICAgICAgICAgICBkZWxldGUgYSB0YXNrLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBkZWxldGUgdGhlIGV4YW1wbGUgdGFzayB1c2VkIGluIHRoZSBwcmV2aW91cwotICAgICAgICAgICAgICAgIHNlY3Rpb25zLCB5b3Ugd291bGQgdXNlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZGVsdGFzayBwcmludGRhdGUKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSWYgeW91IGRlbGV0ZSBhIHRhc2sgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjb21tYW5kIGFuZCB0aGUgdGFzayBoYXMgZGVwZW5kZW5jaWVzLCB0aGUgZGVwZW5kZW5jaWVzIGFyZQotICAgICAgICAgICAgICAgIG5vdCByZWNvbm5lY3RlZC4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSB0aHJlZSB0YXNrcyBuYW1lZAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4gaXMgZGVwZW5kZW50IG9uCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPiwgd2hpY2ggaW4gdHVybiBpcyBkZXBlbmRlbnQgb24KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIEdpdmVuIHRoaXMgc2NlbmFyaW8sIGlmIHlvdSB1c2UgPGZpbGVuYW1lPmRlbHRhc2s8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRvIGRlbGV0ZSA8ZmlsZW5hbWU+ZG9fYjwvZmlsZW5hbWU+LCB0aGUgaW1wbGljaXQgZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPiB0aHJvdWdoIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBubyBsb25nZXIgZXhpc3RzLCBhbmQgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAgICAgICBhcmUgbm90IHVwZGF0ZWQgdG8gaW5jbHVkZSA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFRodXMsIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4gaXMgZnJlZSB0byBydW4gYmVmb3JlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgZGVwZW5kZW5jaWVzIHN1Y2ggYXMgdGhlc2UgdG8gcmVtYWluIGludGFjdCwgdXNlCi0gICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5bbm9leGVjXTwvZmlsZW5hbWU+IHZhcmZsYWcgdG8gZGlzYWJsZSB0aGUgdGFzawotICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4gY29tbWFuZCB0bwotICAgICAgICAgICAgICAgIGRlbGV0ZSBpdDoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGRvX2Jbbm9leGVjXSA9ICIxIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdwYXNzaW5nLWluZm9ybWF0aW9uLWludG8tdGhlLWJ1aWxkLXRhc2stZW52aXJvbm1lbnQnPgotICAgICAgICAgICAgPHRpdGxlPlBhc3NpbmcgSW5mb3JtYXRpb24gSW50byB0aGUgQnVpbGQgVGFzayBFbnZpcm9ubWVudDwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyBhIHRhc2ssIEJpdEJha2UgdGlnaHRseSBjb250cm9scyB0aGUgc2hlbGwgZXhlY3V0aW9uCi0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgb2YgdGhlIGJ1aWxkIHRhc2tzIHRvIG1ha2UKLSAgICAgICAgICAgICAgICBzdXJlIHVud2FudGVkIGNvbnRhbWluYXRpb24gZnJvbSB0aGUgYnVpbGQgbWFjaGluZSBjYW5ub3QKLSAgICAgICAgICAgICAgICBpbmZsdWVuY2UgdGhlIGJ1aWxkLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBCaXRCYWtlIGNsZWFucyB0aGUgZW52aXJvbm1lbnQgdG8gaW5jbHVkZSBvbmx5IHRob3NlCi0gICAgICAgICAgICAgICAgICAgIHRoaW5ncyBleHBvcnRlZCBvciBsaXN0ZWQgaW4gaXRzIHdoaXRlbGlzdCB0byBlbnN1cmUgdGhhdCB0aGUgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaXMgcmVwcm9kdWNpYmxlIGFuZCBjb25zaXN0ZW50LgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHByZXZlbnQgdGhpcyAiY2xlYW5pbmciIGJ5IHNldHRpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9QUkVTRVJWRV9FTlYnPjxmaWxlbmFtZT5CQl9QUkVTRVJWRV9FTlY8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGRvIHdhbnQgc29tZXRoaW5nIHRvIGdldCBwYXNzZWQgaW50byB0aGUKLSAgICAgICAgICAgICAgICBidWlsZCB0YXNrIGVudmlyb25tZW50LCB5b3UgbXVzdCB0YWtlIHRoZXNlIHR3byBzdGVwczoKLSAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRlbGwgQml0QmFrZSB0byBsb2FkIHdoYXQgeW91IHdhbnQgZnJvbSB0aGUgZW52aXJvbm1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRhdGFzdG9yZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gc28gdGhyb3VnaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9FTlZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfRU5WX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfRU5WX0VYVFJBV0hJVEUnPjxmaWxlbmFtZT5CQl9FTlZfRVhUUkFXSElURTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFzc3VtZSB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZSBidWlsZCBzeXN0ZW0gZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHlvdXIgPGZpbGVuYW1lPiRIT01FLy5jY2FjaGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kICJ3aGl0ZWxpc3RzIiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DQ0FDSEVfRElSPC9maWxlbmFtZT4gY2F1c2luZyBCaXRCYWtlIHRvIGFsbG93IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGludG8gdGhlIGRhdGFzdG9yZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZXhwb3J0IEJCX0VOVl9FWFRSQVdISVRFPSIkQkJfRU5WX0VYVFJBV0hJVEUgQ0NBQ0hFX0RJUiIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGVsbCBCaXRCYWtlIHRvIGV4cG9ydCB3aGF0IHlvdSBoYXZlIGxvYWRlZCBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlIHRvIHRoZSB0YXNrIGVudmlyb25tZW50IG9mIGV2ZXJ5IHJ1bm5pbmcgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgc29tZXRoaW5nIGZyb20gdGhlIGVudmlyb25tZW50IGludG8gdGhlIGRhdGFzdG9yZQotICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzIHN0ZXApIG9ubHkgbWFrZXMgaXQgYXZhaWxhYmxlIGluIHRoZSBkYXRhc3RvcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgaXQgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGEgY29tbWFuZCBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgaW4geW91ciBsb2NhbCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgeW91cgotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZXhwb3J0IENDQUNIRV9ESVIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXZpb3VzIHN0ZXBzIGlzIHRoYXQgQml0QmFrZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHMgdGhlIHZhcmlhYmxlIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYnVpbGQgcHJvY2VzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoaW5ncyBsaWtlIHRoZSBzZXRzY2VuZSBjaGVja3N1bXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZG9pbmcgc28gcmVzdWx0cyBpbiB1bm5lY2Vzc2FyeSByZWJ1aWxkcyBvZiB0YXNrcywgeW91IGNhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdCB0aGUgdmFyaWFibGUgc28gdGhhdCB0aGUgc2V0c2NlbmUgY29kZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZXMgdGhlIGRlcGVuZGVuY3kgd2hlbiBpdCBjcmVhdGVzIGNoZWNrc3Vtcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBTb21ldGltZXMsIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIG9idGFpbiBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgIGZyb20gdGhlIG9yaWdpbmFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIHNhdmVzIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQgaW50bwotICAgICAgICAgICAgICAgIGEgc3BlY2lhbCB2YXJpYWJsZSBuYW1lZAotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9PUklHRU5WJz48ZmlsZW5hbWU+QkJfT1JJR0VOVjwvZmlsZW5hbWU+PC9saW5rPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQl9PUklHRU5WPC9maWxlbmFtZT4gdmFyaWFibGUgcmV0dXJucyBhIGRhdGFzdG9yZQotICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IGNhbiBiZSBxdWVyaWVkIHVzaW5nIHRoZSBzdGFuZGFyZCBkYXRhc3RvcmUgb3BlcmF0b3JzCi0gICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+Z2V0VmFyKCwgRmFsc2UpPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgVGhlIGRhdGFzdG9yZSBvYmplY3QgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgdG8gZmluZCB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTUExBWTwvZmlsZW5hbWU+IHZhcmlhYmxlLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIG9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKQotICAgICBiYXIgPSBvcmlnZW52LmdldFZhcigiQkFSIiwgRmFsc2UpCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIHJldHVybnMgPGZpbGVuYW1lPkJBUjwvZmlsZW5hbWU+IGZyb20gdGhlIG9yaWdpbmFsCi0gICAgICAgICAgICAgICAgZXhlY3V0aW9uIGVudmlyb25tZW50LgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWZsYWdzJz4KLSAgICAgICAgPHRpdGxlPlZhcmlhYmxlIEZsYWdzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFZhcmlhYmxlIGZsYWdzICh2YXJmbGFncykgaGVscCBjb250cm9sIGEgdGFzaydzIGZ1bmN0aW9uYWxpdHkKLSAgICAgICAgICAgIGFuZCBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBCaXRCYWtlIHJlYWRzIGFuZCB3cml0ZXMgdmFyZmxhZ3MgdG8gdGhlIGRhdGFzdG9yZSB1c2luZyB0aGUgZm9sbG93aW5nCi0gICAgICAgICAgICBjb21tYW5kIGZvcm1zOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICA8cmVwbGFjZWFibGU+dmFyaWFibGU8L3JlcGxhY2VhYmxlPiA9IGQuZ2V0VmFyRmxhZ3MoIjxyZXBsYWNlYWJsZT52YXJpYWJsZTwvcmVwbGFjZWFibGU+IikKLSAgICAgc2VsZi5kLnNldFZhckZsYWdzKCJGT08iLCB7ImZ1bmMiOiBUcnVlfSkKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgV2hlbiB3b3JraW5nIHdpdGggdmFyZmxhZ3MsIHRoZSBzYW1lIHN5bnRheCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCi0gICAgICAgICAgICBvdmVycmlkZXMsIGFwcGxpZXMuCi0gICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBzZXQsIGFwcGVuZCwgYW5kIHByZXBlbmQgdmFyZmxhZ3MganVzdCBsaWtlCi0gICAgICAgICAgICB2YXJpYWJsZXMuCi0gICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZy1zeW50YXgnPlZhcmlhYmxlIEZsYWcgU3ludGF4PC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gZm9yIGRldGFpbHMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJpdEJha2UgaGFzIGEgZGVmaW5lZCBzZXQgb2YgdmFyZmxhZ3MgYXZhaWxhYmxlIGZvciByZWNpcGVzIGFuZAotICAgICAgICAgICAgY2xhc3Nlcy4KLSAgICAgICAgICAgIFRhc2tzIHN1cHBvcnQgYSBudW1iZXIgb2YgdGhlc2UgZmxhZ3Mgd2hpY2ggY29udHJvbCB2YXJpb3VzCi0gICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YXNrOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bY2xlYW5kaXJzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEVtcHR5IGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZQotICAgICAgICAgICAgICAgICAgICB0YXNrIHJ1bnMuCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIHRoYXQgYWxyZWFkeSBleGlzdCBhcmUgcmVtb3ZlZCBhbmQgcmVjcmVhdGVkCi0gICAgICAgICAgICAgICAgICAgIHRvIGVtcHR5IHRoZW0uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPltkZXBlbmRzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbnRlci10YXNrLWRlcGVuZGVuY2llcyc+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bZGVwdGFza108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBDb250cm9scyB0YXNrIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdidWlsZC1kZXBlbmRlbmNpZXMnPkJ1aWxkIERlcGVuZGVuY2llczwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPltkaXJzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSB0YXNrIHJ1bnMuCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIHRoYXQgYWxyZWFkeSBleGlzdCBhcmUgbGVmdCBhcyBpcy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGxhc3QgZGlyZWN0b3J5IGxpc3RlZCBpcyB1c2VkIGFzIHRoZQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W2xvY2tmaWxlc108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIG9uZSBvciBtb3JlIGxvY2tmaWxlcyB0byBsb2NrIHdoaWxlIHRoZSB0YXNrCi0gICAgICAgICAgICAgICAgICAgICBleGVjdXRlcy4KLSAgICAgICAgICAgICAgICAgICAgIE9ubHkgb25lIHRhc2sgbWF5IGhvbGQgYSBsb2NrZmlsZSwgYW5kIGFueSB0YXNrIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzIHRvIGxvY2sgYW4gYWxyZWFkeSBsb2NrZWQgZmlsZSB3aWxsIGJsb2NrIHVudGlsCi0gICAgICAgICAgICAgICAgICAgICB0aGUgbG9jayBpcyByZWxlYXNlZC4KLSAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgZmxhZyB0byBhY2NvbXBsaXNoIG11dHVhbAotICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bbm9leGVjXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICIxIiwgbWFya3MgdGhlIHRhc2sgYXMgYmVpbmcgZW1wdHksIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgbm8gZXhlY3V0aW9uIHJlcXVpcmVkLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPltub2V4ZWNdPC9maWxlbmFtZT4gZmxhZyB0byBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgdGFza3MgYXMgZGVwZW5kZW5jeSBwbGFjZWhvbGRlcnMsIG9yIHRvIGRpc2FibGUgdGFza3MgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBlbHNld2hlcmUgdGhhdCBhcmUgbm90IG5lZWRlZCBpbiBhIHBhcnRpY3VsYXIgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bbm9zdGFtcF08L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBXaGVuIHNldCB0byAiMSIsIHRlbGxzIEJpdEJha2UgdG8gbm90IGdlbmVyYXRlIGEgc3RhbXAKLSAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgYSB0YXNrLCB3aGljaCBpbXBsaWVzIHRoZSB0YXNrIHNob3VsZCBhbHdheXMKLSAgICAgICAgICAgICAgICAgICAgYmUgZXhlY3V0ZWQuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5DYXV0aW9uPC90aXRsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFueSB0YXNrIHRoYXQgZGVwZW5kcyAocG9zc2libHkgaW5kaXJlY3RseSkgb24gYQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPltub3N0YW1wXTwvZmlsZW5hbWU+IHRhc2sgd2lsbCBhbHdheXMgYmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNhbiBjYXVzZSB1bm5lY2Vzc2FyeSByZWJ1aWxkaW5nIGlmIHlvdSBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjYXJlZnVsLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPltudW1iZXJfdGhyZWFkc108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBMaW1pdHMgdGFza3MgdG8gYSBzcGVjaWZpYyBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRocmVhZHMKLSAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGV4ZWN1dGlvbi4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJmbGFnIGlzIHVzZWZ1bCB3aGVuIHlvdXIgYnVpbGQgaG9zdCBoYXMgYSBsYXJnZSBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgb2YgY29yZXMgYnV0IGNlcnRhaW4gdGFza3MgbmVlZCB0byBiZSByYXRlLWxpbWl0ZWQgZHVlIHRvIHZhcmlvdXMKLSAgICAgICAgICAgICAgICAgICAga2luZHMgb2YgcmVzb3VyY2UgY29uc3RyYWludHMgKGUuZy4gdG8gYXZvaWQgbmV0d29yayB0aHJvdHRsaW5nKS4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm51bWJlcl90aHJlYWRzPC9maWxlbmFtZT4gd29ya3Mgc2ltaWxhcmx5IHRvIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBidXQgaXMgdGFzay1zcGVjaWZpYy48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+U2V0IHRoZSB2YWx1ZSBnbG9iYWxseS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbWFrZXMgc3VyZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzayB1c2VzIG5vIG1vcmUgdGhhbiB0d28KLSAgICAgICAgICAgICAgICAgICAgc2ltdWx0YW5lb3VzIGV4ZWN1dGlvbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGRvX2ZldGNoW251bWJlcl90aHJlYWRzXSA9ICIyIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5XYXJuaW5nczwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgdmFyZmxhZyBpbiBpbmRpdmlkdWFsIHJlY2lwZXMgcmF0aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gZ2xvYmFsbHkgY2FuIHJlc3VsdCBpbiB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIHZhcmZsYWcgdG8gYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNhdXNlcyA8ZmlsZW5hbWU+bnVtYmVyX3RocmVhZHM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBoYXZlIG5vIGVmZmVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bcG9zdGZ1bmNzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHRhc2suCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPltwcmVmdW5jc108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUgdGFzayBleGVjdXRlcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W3JkZXBlbmRzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGludGVyLXRhc2sgcnVudGltZSBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW50ZXItdGFzay1kZXBlbmRlbmNpZXMnPkludGVyLVRhc2sgRGVwZW5kZW5jaWVzPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W3JkZXB0YXNrXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHRhc2sgcnVudGltZSBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncnVudGltZS1kZXBlbmRlbmNpZXMnPlJ1bnRpbWUgRGVwZW5kZW5jaWVzPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W3JlY2lkZXB0YXNrXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IGluIGNvbmp1bmN0aW9uIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY3JkZXB0YXNrPC9maWxlbmFtZT4sIHNwZWNpZmllcyBhIHRhc2sgdGhhdAotICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaW5zcGVjdGVkIGZvciBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W3JlY3JkZXB0YXNrXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHRhc2sgcmVjdXJzaXZlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlY3Vyc2l2ZS1kZXBlbmRlbmNpZXMnPlJlY3Vyc2l2ZSBEZXBlbmRlbmNpZXM8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bc3RhbXAtZXh0cmEtaW5mb108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBFeHRyYSBzdGFtcCBpbmZvcm1hdGlvbiB0byBhcHBlbmQgdG8gdGhlIHRhc2sncyBzdGFtcC4KLSAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgT3BlbkVtYmVkZGVkIHVzZXMgdGhpcyBmbGFnIHRvIGFsbG93Ci0gICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgdGFza3MuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlt1bWFza108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBUaGUgdW1hc2sgdG8gcnVuIHRoZSB0YXNrIHVuZGVyLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTZXZlcmFsIHZhcmZsYWdzIGFyZSB1c2VmdWwgZm9yIGNvbnRyb2xsaW5nIGhvdyBzaWduYXR1cmVzIGFyZQotICAgICAgICAgICAgY2FsY3VsYXRlZCBmb3IgdmFyaWFibGVzLgotICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9jZXNzLCBzZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlt2YXJkZXBzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIGFkZCB0byBhIHZhcmlhYmxlJ3MgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcHVycG9zZXMgb2YgY2FsY3VsYXRpbmcgaXRzIHNpZ25hdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHZhcmlhYmxlcyB0byB0aGlzIGxpc3QgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgd2hlbgotICAgICAgICAgICAgICAgICAgICBhIGZ1bmN0aW9uIHJlZmVycyB0byBhIHZhcmlhYmxlIGluIGEgbWFubmVyIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWxsb3cgQml0QmFrZSB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZQotICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSB2YXJpYWJsZSBpcyByZWZlcnJlZCB0by4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W3ZhcmRlcHNleGNsdWRlXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHZhcmlhYmxlcwotICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGEgdmFyaWFibGUncyBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwdXJwb3NlcyBvZiBjYWxjdWxhdGluZyBpdHMgc2lnbmF0dXJlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bdmFyZGVwdmFsdWVdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgSWYgc2V0LCBpbnN0cnVjdHMgQml0QmFrZSB0byBpZ25vcmUgdGhlIGFjdHVhbAotICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYW5kIGluc3RlYWQgdXNlIHRoZSBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmFyaWFibGUncyBzaWduYXR1cmUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlt2YXJkZXB2YWx1ZWV4Y2x1ZGVdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgcGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzIHRvIGV4Y2x1ZGUKLSAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgdmFyaWFibGUncyB2YWx1ZSB3aGVuIGNhbGN1bGF0aW5nIHRoZQotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSdzIHNpZ25hdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdldmVudHMnPgotICAgICAgICA8dGl0bGU+RXZlbnRzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJpdEJha2UgYWxsb3dzIGluc3RhbGxhdGlvbiBvZiBldmVudCBoYW5kbGVycyB3aXRoaW4gcmVjaXBlCi0gICAgICAgICAgICBhbmQgY2xhc3MgZmlsZXMuCi0gICAgICAgICAgICBFdmVudHMgYXJlIHRyaWdnZXJlZCBhdCBjZXJ0YWluIHBvaW50cyBkdXJpbmcgb3BlcmF0aW9uLCBzdWNoCi0gICAgICAgICAgICBhcyB0aGUgYmVnaW5uaW5nIG9mIG9wZXJhdGlvbiBhZ2FpbnN0IGEgZ2l2ZW4gcmVjaXBlCi0gICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+Ki5iYjwvZmlsZW5hbWU+KSwgdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4gdGFzaywKLSAgICAgICAgICAgIGEgdGFzayBmYWlsdXJlLCBhIHRhc2sgc3VjY2VzcywgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgVGhlIGludGVudCBpcyB0byBtYWtlIGl0IGVhc3kgdG8gZG8gdGhpbmdzIGxpa2UgZW1haWwKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbiBvbiBidWlsZCBmYWlsdXJlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgZXZlbnQgaGFuZGxlciB0aGF0IHByaW50cyB0aGUgbmFtZQotICAgICAgICAgICAgb2YgdGhlIGV2ZW50IGFuZCB0aGUgY29udGVudCBvZiB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFPC9maWxlbmFtZT4gdmFyaWFibGU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGFkZGhhbmRsZXIgbXljbGFzc19ldmVudGhhbmRsZXIKLSAgICAgcHl0aG9uIG15Y2xhc3NfZXZlbnRoYW5kbGVyKCkgewotICAgICAgICAgZnJvbSBiYi5ldmVudCBpbXBvcnQgZ2V0TmFtZQotICAgICAgICAgcHJpbnQoIlRoZSBuYW1lIG9mIHRoZSBFdmVudCBpcyAlcyIgJSBnZXROYW1lKGUpKQotICAgICAgICAgcHJpbnQoIlRoZSBmaWxlIHdlIHJ1biBmb3IgaXMgJXMiICUgZC5nZXRWYXIoJ0ZJTEUnKSkKLSAgICAgfQotICAgICBteWNsYXNzX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBhbiBldmVudG1hc2sgaGFzIGJlZW4gc2V0IHNvIHRoYXQKLSAgICAgICAgICAgIHRoZSBoYW5kbGVyIG9ubHkgc2VlcyB0aGUgIkJ1aWxkU3RhcnRlZCIgYW5kICJCdWlsZENvbXBsZXRlZCIKLSAgICAgICAgICAgIGV2ZW50cy4KLSAgICAgICAgICAgIFRoaXMgZXZlbnQgaGFuZGxlciBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIGFuIGV2ZW50IG1hdGNoaW5nCi0gICAgICAgICAgICB0aGUgZXZlbnRtYXNrIGlzIHRyaWdnZXJlZC4KLSAgICAgICAgICAgIEEgZ2xvYmFsIHZhcmlhYmxlICJlIiBpcyBkZWZpbmVkLCB3aGljaCByZXByZXNlbnRzIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICBldmVudC4KLSAgICAgICAgICAgIFdpdGggdGhlIDxmaWxlbmFtZT5nZXROYW1lKGUpPC9maWxlbmFtZT4gbWV0aG9kLCB5b3UgY2FuIGdldAotICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHRyaWdnZXJlZCBldmVudC4KLSAgICAgICAgICAgIFRoZSBnbG9iYWwgZGF0YXN0b3JlIGlzIGF2YWlsYWJsZSBhcyAiZCIuCi0gICAgICAgICAgICBJbiBsZWdhY3kgY29kZSwgeW91IG1pZ2h0IHNlZSAiZS5kYXRhIiB1c2VkIHRvIGdldCB0aGUgZGF0YXN0b3JlLgotICAgICAgICAgICAgSG93ZXZlciwgcmVhbGl6ZSB0aGF0ICJlLmRhdGEiIGlzIGRlcHJlY2F0ZWQgYW5kIHlvdSBzaG91bGQgdXNlCi0gICAgICAgICAgICAiZCIgZ29pbmcgZm9yd2FyZC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGNvbnRleHQgb2YgdGhlIGRhdGFzdG9yZSBpcyBhcHByb3ByaWF0ZSB0byB0aGUgZXZlbnQKLSAgICAgICAgICAgIGluIHF1ZXN0aW9uLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsICJCdWlsZFN0YXJ0ZWQiIGFuZCAiQnVpbGRDb21wbGV0ZWQiIGV2ZW50cyBydW4KLSAgICAgICAgICAgIGJlZm9yZSBhbnkgdGFza3MgYXJlIGV4ZWN1dGVkIHNvIHdvdWxkIGJlIGluIHRoZSBnbG9iYWwKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGF0YXN0b3JlIG5hbWVzcGFjZS4KLSAgICAgICAgICAgIE5vIHJlY2lwZS1zcGVjaWZpYyBtZXRhZGF0YSBleGlzdHMgaW4gdGhhdCBuYW1lc3BhY2UuCi0gICAgICAgICAgICBUaGUgIkJ1aWxkU3RhcnRlZCIgYW5kICJCdWlsZENvbXBsZXRlZCIgZXZlbnRzIGFsc28gcnVuIGluCi0gICAgICAgICAgICB0aGUgbWFpbiBjb29rZXIvc2VydmVyIHByb2Nlc3MgcmF0aGVyIHRoYW4gYW55IHdvcmtlciBjb250ZXh0LgotICAgICAgICAgICAgVGh1cywgYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgZGF0YXN0b3JlIHdvdWxkIGJlIHNlZW4gYnkgb3RoZXIKLSAgICAgICAgICAgIGNvb2tlci9zZXJ2ZXIgZXZlbnRzIHdpdGhpbiB0aGUgY3VycmVudCBidWlsZCBidXQgbm90IHNlZW4KLSAgICAgICAgICAgIG91dHNpZGUgb2YgdGhhdCBidWlsZCBvciBpbiBhbnkgd29ya2VyIGNvbnRleHQuCi0gICAgICAgICAgICBUYXNrIGV2ZW50cyBydW4gaW4gdGhlIGFjdHVhbCB0YXNrcyBpbiBxdWVzdGlvbiBjb25zZXF1ZW50bHkKLSAgICAgICAgICAgIGhhdmUgcmVjaXBlLXNwZWNpZmljIGFuZCB0YXNrLXNwZWNpZmljIGNvbnRlbnRzLgotICAgICAgICAgICAgVGhlc2UgZXZlbnRzIHJ1biBpbiB0aGUgd29ya2VyIGNvbnRleHQgYW5kIGFyZSBkaXNjYXJkZWQgYXQKLSAgICAgICAgICAgIHRoZSBlbmQgb2YgdGFzayBleGVjdXRpb24uCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIER1cmluZyBhIHN0YW5kYXJkIGJ1aWxkLCB0aGUgZm9sbG93aW5nIGNvbW1vbiBldmVudHMgbWlnaHQKLSAgICAgICAgICAgIG9jY3VyLgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBldmVudHMgYXJlIHRoZSBtb3N0IGNvbW1vbiBraW5kcyBvZiBldmVudHMgdGhhdAotICAgICAgICAgICAgbW9zdCBtZXRhZGF0YSBtaWdodCBoYXZlIGFuIGludGVyZXN0IGluIHZpZXdpbmc6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvbmZpZ1BhcnNlZCgpPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEZpcmVkIHdoZW4gdGhlIGJhc2UgY29uZmlndXJhdGlvbjsgd2hpY2ggY29uc2lzdHMgb2YKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gYW5kIGFueSBnbG9iYWwKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzOyBoYXMgYmVlbiBwYXJzZWQuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIG11bHRpcGxlIHN1Y2ggZXZlbnRzIHdoZW4gZWFjaCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgd29ya2VycyBwYXJzZSB0aGUgYmFzZSBjb25maWd1cmF0aW9uIG9yIGlmIHRoZSBzZXJ2ZXIKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyBjb25maWd1cmF0aW9uIGFuZCByZXBhcnNlcy4KLSAgICAgICAgICAgICAgICAgICAgQW55IGdpdmVuIGRhdGFzdG9yZSBvbmx5IGhhcyBvbmUgc3VjaCBldmVudCBleGVjdXRlZAotICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IGl0LCBob3dldmVyLgotICAgICAgICAgICAgICAgICAgICBJZgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kZT0ndmFyLWJiLUJCX0lOVkFMSURDT05GJz48ZmlsZW5hbWU+QkJfSU5WQUxJRENPTkY8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgaXMgc2V0IGluIHRoZSBkYXRhc3RvcmUgYnkgdGhlIGV2ZW50IGhhbmRsZXIsIHRoZQotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGlzIHJlcGFyc2VkIGFuZCBhIG5ldyBldmVudCB0cmlnZ2VyZWQsCi0gICAgICAgICAgICAgICAgICAgIGFsbG93aW5nIHRoZSBtZXRhZGF0YSB0byB1cGRhdGUgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuSGVhcnRiZWF0RXZlbnQoKTwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBGaXJlcyBhdCByZWd1bGFyIHRpbWUgaW50ZXJ2YWxzIG9mIG9uZSBzZWNvbmQuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY29uZmlndXJlIHRoZSBpbnRlcnZhbCB0aW1lIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfSEVBUlRCRUFUX0VWRU5UPC9maWxlbmFtZT4gdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBldmVudCdzICJ0aW1lIiBhdHRyaWJ1dGUgaXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50aW1lLnRpbWUoKTwvZmlsZW5hbWU+IHZhbHVlIHdoZW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIHRyaWdnZXJlZC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBldmVudCBpcyB1c2VmdWwgZm9yIGFjdGl2aXRpZXMgc3VjaCBhcwotICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gc3RhdGUgbW9uaXRvcmluZy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuUGFyc2VTdGFydGVkKCk8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgRmlyZWQgd2hlbiBCaXRCYWtlIGlzIGFib3V0IHRvIHN0YXJ0IHBhcnNpbmcgcmVjaXBlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBldmVudCdzICJ0b3RhbCIgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgotICAgICAgICAgICAgICAgICAgICByZWNpcGVzIEJpdEJha2UgcGxhbnMgdG8gcGFyc2UuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MoKTwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBGaXJlZCBhcyBwYXJzaW5nIHByb2dyZXNzZXMuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgZXZlbnQncyAiY3VycmVudCIgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBwYXJzZWQgYXMgd2VsbCBhcyB0aGUgInRvdGFsIiBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKCk8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgRmlyZWQgd2hlbiBwYXJzaW5nIGlzIGNvbXBsZXRlLgotICAgICAgICAgICAgICAgICAgICBUaGlzIGV2ZW50J3MgImNhY2hlZCIsICJwYXJzZWQiLCAic2tpcHBlZCIsICJ2aXJ0dWFscyIsCi0gICAgICAgICAgICAgICAgICAgICJtYXNrZWQiLCBhbmQgImVycm9ycyIgYXR0cmlidXRlcyBwcm92aWRlIHN0YXRpc3RpY3MKLSAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwYXJzaW5nIHJlc3VsdHMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkJ1aWxkU3RhcnRlZCgpPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEZpcmVkIHdoZW4gYSBuZXcgYnVpbGQgc3RhcnRzLgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGZpcmVzIG11bHRpcGxlICJCdWlsZFN0YXJ0ZWQiIGV2ZW50cyAob25lIHBlciBjb25maWd1cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICB3aGVuIG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gKG11bHRpY29uZmlnKSBpcyBlbmFibGVkLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrU3RhcnRlZCgpPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEZpcmVkIHdoZW4gYSB0YXNrIHN0YXJ0cy4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBldmVudCdzICJ0YXNrZmlsZSIgYXR0cmlidXRlIHBvaW50cyB0byB0aGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdGhlIHRhc2sgb3JpZ2luYXRlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhlICJ0YXNrbmFtZSIgYXR0cmlidXRlLCB3aGljaCBpcyB0aGUgdGFzaydzIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSA8ZmlsZW5hbWU+ZG9fPC9maWxlbmFtZT4gcHJlZml4LCBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICJsb2dmaWxlIiBhdHRyaWJ1dGUgcG9pbnQgdG8gd2hlcmUgdGhlIHRhc2sncyBvdXRwdXQgaXMKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVkLgotICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCB0aGUgInRpbWUiIGF0dHJpYnV0ZSBpcyB0aGUgdGFzaydzIGV4ZWN1dGlvbiBzdGFydAotICAgICAgICAgICAgICAgICAgICB0aW1lLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrSW52YWxpZCgpPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEZpcmVkIGlmIEJpdEJha2UgdHJpZXMgdG8gZXhlY3V0ZSBhIHRhc2sgdGhhdCBkb2VzIG5vdCBleGlzdC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCgpPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEZpcmVkIGZvciBzZXRzY2VuZSB0YXNrcyB0aGF0IGZhaWwgYW5kIHNob3VsZCBub3QgYmUKLSAgICAgICAgICAgICAgICAgICAgcHJlc2VudGVkIHRvIHRoZSB1c2VyIHZlcmJvc2VseS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ZhaWxlZCgpPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEZpcmVkIGZvciBub3JtYWwgdGFza3MgdGhhdCBmYWlsLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrU3VjY2VlZGVkKCk8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgRmlyZWQgd2hlbiBhIHRhc2sgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQoKTwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBGaXJlZCB3aGVuIGEgYnVpbGQgZmluaXNoZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmNvb2tlci5Db29rZXJFeGl0KCk8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgRmlyZWQgd2hlbiB0aGUgQml0QmFrZSBzZXJ2ZXIvY29va2VyIHNodXRzIGRvd24uCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgZXZlbnQgaXMgdXN1YWxseSBvbmx5IHNlZW4gYnkgdGhlIFVJcyBhcyBhCi0gICAgICAgICAgICAgICAgICAgIHNpZ24gdGhleSBzaG91bGQgYWxzbyBzaHV0ZG93bi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBuZXh0IGxpc3Qgb2YgZXhhbXBsZSBldmVudHMgb2NjdXIgYmFzZWQgb24gc3BlY2lmaWMKLSAgICAgICAgICAgIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuCi0gICAgICAgICAgICBUaGVzZSBldmVudHMgYXJlIG9mdGVuIHVzZWQgdG8gY29tbXVuaWNhdGUgbGFyZ2VyIHBpZWNlcyBvZgotICAgICAgICAgICAgaW5mb3JtYXRpb24gZnJvbSB0aGUgQml0QmFrZSBzZXJ2ZXIgdG8gb3RoZXIgcGFydHMgb2YKLSAgICAgICAgICAgIEJpdEJha2Ugc3VjaCBhcyB1c2VyIGludGVyZmFjZXM6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkKCk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uUHJvZ3Jlc3MoKTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Db21wbGV0ZWQoKTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQoKTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvcmVCYXNlRmlsZXNGb3VuZCgpPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQ29uZmlnRmlsZVBhdGhGb3VuZCgpPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kKCk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kKCk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCgpPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSd2YXJpYW50cy1jbGFzcy1leHRlbnNpb24tbWVjaGFuaXNtJz4KLSAgICAgICAgPHRpdGxlPlZhcmlhbnRzIC0gQ2xhc3MgRXh0ZW5zaW9uIE1lY2hhbmlzbTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHR3byBmZWF0dXJlcyB0aGF0IGZhY2lsaXRhdGUgY3JlYXRpbmcKLSAgICAgICAgICAgIGZyb20gYSBzaW5nbGUgcmVjaXBlIGZpbGUgbXVsdGlwbGUgaW5jYXJuYXRpb25zIG9mIHRoYXQKLSAgICAgICAgICAgIHJlY2lwZSBmaWxlIHdoZXJlIGFsbCBpbmNhcm5hdGlvbnMgYXJlIGJ1aWxkYWJsZS4KLSAgICAgICAgICAgIFRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIHRocm91Z2ggdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCVkVSU0lPTlMnPjxmaWxlbmFtZT5CQlZFUlNJT05TPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZXMuCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgbWVjaGFuaXNtIGZvciB0aGlzIGNsYXNzIGV4dGVuc2lvbiBpcyBleHRyZW1lbHkKLSAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICAgICAgVXN1YWxseSwgdGhlIHJlY2lwZSdzCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBleHRlbnNpb24gY2xhc3MuCi0gICAgICAgICAgICAgICAgRm9yIHNwZWNpZmljIGV4YW1wbGVzLCBzZWUgdGhlIE9FLUNvcmUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPm11bHRpbGliPC9maWxlbmFtZT4gY2xhc3Nlcy4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzIHVzZWQgdG8gImV4dGVuZCIgdGhlCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmb3IgZWFjaCB2YXJpYW50LgotICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIGEgc2Vjb25kIGluY2FybmF0aW9uIG9mIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSBiZWluZyBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgc2Vjb25kIGluY2FybmF0aW9uIHdpbGwgaGF2ZSB0aGUgIm5hdGl2ZSIgY2xhc3MgaW5oZXJpdGVkLgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJWRVJTSU9OUzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhCi0gICAgICAgICAgICAgICAgICAgIHByb2plY3QgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgY29uZGl0aW9uYWwgbWV0YWRhdGEKLSAgICAgICAgICAgICAgICAgICAgKHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSkgZm9yIGEgc2luZ2xlIHZlcnNpb24sIG9yIGFuIG9wdGlvbmFsbHkgbmFtZWQgcmFuZ2Ugb2YgdmVyc2lvbnMuCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBCQlZFUlNJT05TID0gIjEuMCAyLjAgZ2l0IgotICAgICBTUkNfVVJJX2dpdCA9ICJnaXQ6Ly9zb21ldXJsL3NvbWVwYXRoLmdpdCIKLQotICAgICBCQlZFUlNJT05TID0gIjEuMC5bMC02XToxLjAuMCsgXCAxLjAuWzctOV06MS4wLjcrIgotICAgICBTUkNfVVJJX2FwcGVuZF8xLjAuNysgPSAiZmlsZTovL3NvbWVfcGF0Y2hfd2hpY2hfdGhlX25ld192ZXJzaW9uc19uZWVkLnBhdGNoO3BhdGNoPTEiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJhbmdlIGRlZmF1bHRzIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBPcGVuRW1iZWRkZWQsIHRoZSByZWNpcGUgZmlsZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzEuMC4wKy5iYjwvZmlsZW5hbWU+IGNyZWF0ZXMgYSBkZWZhdWx0IG5hbWUgcmFuZ2UKLSAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPjEuMC4wKzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSByYW5nZSBuYW1lIGlzIG5vdCBvbmx5IHBsYWNlZAotICAgICAgICAgICAgICAgICAgICBpbnRvIG92ZXJyaWRlcywgYnV0IGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgZm9yIHRoZSBtZXRhZGF0YSB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgYmFzZSByZWNpcGUgdmVyc2lvbnMgZm9yIHVzZSBpbgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IHNlYXJjaCBwYXRocwotICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLWJiLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPikuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nZGVwZW5kZW5jaWVzJz4KLSAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUbyBhbGxvdyBmb3IgZWZmaWNpZW50IHBhcmFsbGVsIHByb2Nlc3NpbmcsIEJpdEJha2UgaGFuZGxlcwotICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGF0IHRoZSB0YXNrIGxldmVsLgotICAgICAgICAgICAgRGVwZW5kZW5jaWVzIGNhbiBleGlzdCBib3RoIGJldHdlZW4gdGFza3Mgd2l0aGluIGEgc2luZ2xlIHJlY2lwZQotICAgICAgICAgICAgYW5kIGJldHdlZW4gdGFza3MgaW4gZGlmZmVyZW50IHJlY2lwZXMuCi0gICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGV4YW1wbGVzIG9mIGVhY2g6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGFza3Mgd2l0aGluIGEgc2luZ2xlIHJlY2lwZSwgYQotICAgICAgICAgICAgICAgICAgICByZWNpcGUncyA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdGFzayBtaWdodCBuZWVkIHRvIGNvbXBsZXRlIGJlZm9yZSBpdHMKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrIGNhbiBydW4uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGFza3MgaW4gZGlmZmVyZW50IHJlY2lwZXMsIG9uZQotICAgICAgICAgICAgICAgICAgICByZWNpcGUncyA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdGFzayBtaWdodCByZXF1aXJlIGFub3RoZXIgcmVjaXBlJ3MKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB0YXNrIHRvIGZpbmlzaCBmaXJzdCBzdWNoIHRoYXQgdGhlIGxpYnJhcmllcyBhbmQgaGVhZGVycwotICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgb3RoZXIgcmVjaXBlIGFyZSBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNldmVyYWwgd2F5cyB0byBkZWNsYXJlIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgICBSZW1lbWJlciwgZXZlbiB0aG91Z2ggZGVwZW5kZW5jaWVzIGFyZSBkZWNsYXJlZCBpbiBkaWZmZXJlbnQgd2F5cywgdGhleQotICAgICAgICAgICAgIGFyZSBhbGwgc2ltcGx5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRhc2tzLgotICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXBlbmRlbmNpZXMtaW50ZXJuYWwtdG8tdGhlLWJiLWZpbGUnPgotICAgICAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llcyBJbnRlcm5hbCB0byB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gZGlyZWN0aXZlCi0gICAgICAgICAgICAgICAgdG8gbWFuYWdlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBpbnRlcm5hbCB0byBhIGdpdmVuIHJlY2lwZQotICAgICAgICAgICAgICAgIGZpbGUuCi0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gZGlyZWN0aXZlIHRvCi0gICAgICAgICAgICAgICAgaW5kaWNhdGUgd2hlbiBhIHRhc2sgaXMgZGVwZW5kZW50IG9uIG90aGVyIHRhc2tzIG9yIHdoZW4KLSAgICAgICAgICAgICAgICBvdGhlciB0YXNrcyBkZXBlbmQgb24gdGhhdCByZWNpcGUuCi0gICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgYWRkdGFzayBwcmludGRhdGUgYWZ0ZXIgZG9fZmV0Y2ggYmVmb3JlIGRvX2J1aWxkCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRhc2sgZGVwZW5kcyBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrLCBhbmQgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzayBkZXBlbmRzIG9uIHRoZQotICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gb2YgdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRhc2suCi0gICAgICAgICAgICAgICAgPG5vdGU+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBhIHRhc2sgdG8gcnVuLCBpdCBtdXN0IGJlIGEgZGlyZWN0IG9yIGluZGlyZWN0Ci0gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb2Ygc29tZSBvdGhlciB0YXNrIHRoYXQgaXMgc2NoZWR1bGVkIHRvCi0gICAgICAgICAgICAgICAgICAgIHJ1bi48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGlsbHVzdHJhdGlvbiwgaGVyZSBhcmUgc29tZSBleGFtcGxlczoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFkZHRhc2sgbXl0YXNrIGJlZm9yZSBkb19jb25maWd1cmU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlcyA8ZmlsZW5hbWU+ZG9fbXl0YXNrPC9maWxlbmFtZT4gdG8gcnVuIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiBydW5zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgPGZpbGVuYW1lPmRvX215dGFzazwvZmlsZW5hbWU+IHN0aWxsIG9ubHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5zIGlmIGl0cyA8bGluayBsaW5rZW5kPSdjaGVja3N1bXMnPmlucHV0IGNoZWNrc3VtPC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VzIHRvIHRoZSBpbnB1dCBjaGVja3N1bSBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19teXRhc2s8L2ZpbGVuYW1lPiBhbHNvIGluZGlyZWN0bHkgY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gdG8gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RpdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzayBteXRhc2sgYWZ0ZXIgZG9fY29uZmlndXJlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBpdHNlbGYgbmV2ZXIgY2F1c2VzIDxmaWxlbmFtZT5kb19teXRhc2s8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fbXl0YXNrPC9maWxlbmFtZT4gY2FuIHN0aWxsIGJlIHJ1biBtYW51YWxseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+IC1jIG15dGFzawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJpbmcgPGZpbGVuYW1lPmRvX215dGFzazwvZmlsZW5hbWU+IGFzIGEgZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvbWUgb3RoZXIgdGFzayB0aGF0IGlzIHNjaGVkdWxlZCB0byBydW4gYWxzbyBjYXVzZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCB0byBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnYXJkbGVzcywgdGhlIHRhc2sgcnVucyBhZnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1kZXBlbmRlbmNpZXMnPgotICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIERlcGVuZGVuY2llczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBtYW5hZ2UgYnVpbGQgdGltZSBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5bZGVwdGFza108L2ZpbGVuYW1lPiB2YXJmbGFnIGZvciB0YXNrcwotICAgICAgICAgICAgICAgIHNpZ25pZmllcyB0aGUgdGFzayBvZiBlYWNoCi0gICAgICAgICAgICAgICAgaXRlbSBsaXN0ZWQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiB0aGF0IG11c3QKLSAgICAgICAgICAgICAgICBjb21wbGV0ZSBiZWZvcmUgdGhhdCB0YXNrIGNhbiBiZSBleGVjdXRlZC4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBkb19jb25maWd1cmVbZGVwdGFza10gPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRhc2sgb2YgZWFjaCBpdGVtIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gbXVzdCBjb21wbGV0ZSBiZWZvcmUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gY2FuIGV4ZWN1dGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ncnVudGltZS1kZXBlbmRlbmNpZXMnPgotICAgICAgICAgICAgPHRpdGxlPlJ1bnRpbWUgRGVwZW5kZW5jaWVzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LAotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LCBhbmQKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBtYW5hZ2UgcnVudGltZSBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBsaXN0cyBydW50aW1lCi0gICAgICAgICAgICAgICAgcGFja2FnZXMuCi0gICAgICAgICAgICAgICAgRWFjaCBvZiB0aG9zZSBwYWNrYWdlcyBjYW4gaGF2ZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiBydW50aW1lIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPltyZGVwdGFza108L2ZpbGVuYW1lPiBmbGFnIGZvciB0YXNrcyBpcyB1c2VkIHRvCi0gICAgICAgICAgICAgICAgc2lnbmlmeSB0aGUgdGFzayBvZiBlYWNoCi0gICAgICAgICAgICAgICAgaXRlbSBydW50aW1lIGRlcGVuZGVuY3kgd2hpY2ggbXVzdCBoYXZlIGNvbXBsZXRlZCBiZWZvcmUgdGhhdAotICAgICAgICAgICAgICAgIHRhc2sgY2FuIGJlIGV4ZWN1dGVkLgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZG9fcGFja2FnZV9xYVtyZGVwdGFza10gPSAiZG9fcGFja2FnZWRhdGEiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB0YXNrIG9mIGVhY2ggaXRlbSBpbiA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBtdXN0IGhhdmUKLSAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYmVmb3JlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT4gY2FuIGV4ZWN1dGUuCi0gICAgICAgICAgICAgICAgQWx0aG91Z2ggPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gY29udGFpbnMgZW50cmllcyBmcm9tIHRoZQotICAgICAgICAgICAgICAgIHJ1bnRpbWUgZGVwZW5kZW5jeSBuYW1lc3BhY2UsIEJpdEJha2Uga25vd3MgaG93IHRvIG1hcCB0aGVtIGJhY2sKLSAgICAgICAgICAgICAgICB0byB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmN5IG5hbWVzcGFjZSwgaW4gd2hpY2ggdGhlIHRhc2tzIGFyZSBkZWZpbmVkLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3JlY3Vyc2l2ZS1kZXBlbmRlbmNpZXMnPgotICAgICAgICAgICAgPHRpdGxlPlJlY3Vyc2l2ZSBEZXBlbmRlbmNpZXM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5bcmVjcmRlcHRhc2tdPC9maWxlbmFtZT4gZmxhZyB0byBtYW5hZ2UKLSAgICAgICAgICAgICAgICByZWN1cnNpdmUgdGFzayBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgQml0QmFrZSBsb29rcyB0aHJvdWdoIHRoZSBidWlsZC10aW1lIGFuZCBydW50aW1lCi0gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIHRoZSBjdXJyZW50IHJlY2lwZSwgbG9va3MgdGhyb3VnaAotICAgICAgICAgICAgICAgIHRoZSB0YXNrJ3MgaW50ZXItdGFzawotICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcywgYW5kIHRoZW4gYWRkcyBkZXBlbmRlbmNpZXMgZm9yIHRoZQotICAgICAgICAgICAgICAgIGxpc3RlZCB0YXNrLgotICAgICAgICAgICAgICAgIE9uY2UgQml0QmFrZSBoYXMgYWNjb21wbGlzaGVkIHRoaXMsIGl0IHJlY3Vyc2l2ZWx5IHdvcmtzIHRocm91Z2gKLSAgICAgICAgICAgICAgICB0aGUgZGVwZW5kZW5jaWVzIG9mIHRob3NlIHRhc2tzLgotICAgICAgICAgICAgICAgIEl0ZXJhdGl2ZSBwYXNzZXMgY29udGludWUgdW50aWwgYWxsIGRlcGVuZGVuY2llcyBhcmUgZGlzY292ZXJlZAotICAgICAgICAgICAgICAgIGFuZCBhZGRlZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5bcmVjcmRlcHRhc2tdPC9maWxlbmFtZT4gZmxhZyBpcyBtb3N0IGNvbW1vbmx5Ci0gICAgICAgICAgICAgICAgdXNlZCBpbiBoaWdoLWxldmVsCi0gICAgICAgICAgICAgICAgcmVjaXBlcyB0aGF0IG5lZWQgdG8gd2FpdCBmb3Igc29tZSB0YXNrIHRvIGZpbmlzaCAiZ2xvYmFsbHkiLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+IGhhcyB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZWRhdGEiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoaXMgc3RhdGVtZW50IHNheXMgdGhhdCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB0YXNrIG9mIHRoZSBjdXJyZW50IHJlY2lwZSBhbmQgYWxsIHJlY2lwZXMgcmVhY2hhYmxlCi0gICAgICAgICAgICAgICAgKGJ5IHdheSBvZiBkZXBlbmRlbmNpZXMpIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIG11c3QgcnVuIGJlZm9yZSB0aGUgPGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgdGFzayBjYW4gcnVuLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBhIHRhc2sgdG8gcmVjdXJzaXZlbHkgZGVwZW5kIG9uIGl0c2VsZiBieQotICAgICAgICAgICAgICAgIHJlZmVyZW5jaW5nIGl0c2VsZiBpbiB0aGUgdGFzayBsaXN0OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZG9fYVtyZWNyZGVwdGFza10gPSAiZG9fYSBkb19iIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBJbiB0aGUgc2FtZSB3YXkgYXMgYmVmb3JlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPiB0YXNrcyBvZiB0aGUgY3VycmVudCByZWNpcGUgYW5kIGFsbAotICAgICAgICAgICAgICAgIHJlY2lwZXMgcmVhY2hhYmxlIChieSB3YXkgb2YgZGVwZW5kZW5jaWVzKSBmcm9tIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICBtdXN0IHJ1biBiZWZvcmUgdGhlIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4gdGFzayBjYW4gcnVuLiBJbiB0aGlzCi0gICAgICAgICAgICAgICAgY2FzZSBCaXRCYWtlIHdpbGwgaWdub3JlIHRoZSBjdXJyZW50IHJlY2lwZSdzIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB0YXNrIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gaXRzZWxmLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2ludGVyLXRhc2stZGVwZW5kZW5jaWVzJz4KLSAgICAgICAgICAgIDx0aXRsZT5JbnRlci1UYXNrIERlcGVuZGVuY2llczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPltkZXBlbmRzXTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZmxhZyBpbiBhIG1vcmUgZ2VuZXJpYyBmb3JtCi0gICAgICAgICAgICAgICAgdG8gbWFuYWdlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgIFRoaXMgbW9yZSBnZW5lcmljIGZvcm0gYWxsb3dzIGZvciBpbnRlci1kZXBlbmRlbmN5Ci0gICAgICAgICAgICAgICAgY2hlY2tzIGZvciBzcGVjaWZpYyB0YXNrcyByYXRoZXIgdGhhbiBjaGVja3MgZm9yCi0gICAgICAgICAgICAgICAgdGhlIGRhdGEgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBkb19wYXRjaFtkZXBlbmRzXSA9ICJxdWlsdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHRhc2sgb2YgdGhlIHRhcmdldCA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBtdXN0IGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiB0YXNrIGNhbiBleGVjdXRlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPltyZGVwZW5kc108L2ZpbGVuYW1lPiBmbGFnIHdvcmtzIGluIGEgc2ltaWxhcgotICAgICAgICAgICAgICAgIHdheSBidXQgdGFrZXMgdGFyZ2V0cwotICAgICAgICAgICAgICAgIGluIHRoZSBydW50aW1lIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY3kKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2UuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nZnVuY3Rpb25zLXlvdS1jYW4tY2FsbC1mcm9tLXdpdGhpbi1weXRob24nPgotICAgICAgICA8dGl0bGU+RnVuY3Rpb25zIFlvdSBDYW4gQ2FsbCBGcm9tIFdpdGhpbiBQeXRob248L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQml0QmFrZSBwcm92aWRlcyBtYW55IGZ1bmN0aW9ucyB5b3UgY2FuIGNhbGwgZnJvbQotICAgICAgICAgICAgd2l0aGluIFB5dGhvbiBmdW5jdGlvbnMuCi0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbnMsCi0gICAgICAgICAgICBhbmQgbWVudGlvbnMgd2hlcmUgdG8gZmluZCBvdGhlcnMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZnVuY3Rpb25zLWZvci1hY2Nlc3NpbmctZGF0YXN0b3JlLXZhcmlhYmxlcyc+Ci0gICAgICAgICAgICA8dGl0bGU+RnVuY3Rpb25zIGZvciBBY2Nlc3NpbmcgRGF0YXN0b3JlIFZhcmlhYmxlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0byBhY2Nlc3MgdmFyaWFibGVzIGluIHRoZQotICAgICAgICAgICAgICAgIEJpdEJha2UgZGF0YXN0b3JlIHVzaW5nIFB5dGhvbiBmdW5jdGlvbnMuCi0gICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgZGF0YXN0b3JlIGhhcyBhbiBBUEkgdGhhdCBhbGxvd3MgeW91IHRoaXMKLSAgICAgICAgICAgICAgICBhY2Nlc3MuCi0gICAgICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIG9wZXJhdGlvbnM6Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSdub25lJz4KLSAgICAgICAgICAgICAgICAgICAgPHRncm91cCBjb2xzPScyJyBhbGlnbj0nbGVmdCcgY29sc2VwPScxJyByb3dzZXA9JzEnPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0nYzEnIGNvbHdpZHRoPScxKicvPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0nYzInIGNvbHdpZHRoPScxKicvPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGVtcGhhc2lzPk9wZXJhdGlvbjwvZW1waGFzaXM+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+RGVzY3JpcHRpb248L2VtcGhhc2lzPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZ2V0VmFyKCJYIiwgZXhwYW5kKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSAiWCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyAiZXhwYW5kPVRydWUiIGV4cGFuZHMgdGhlIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyAiTm9uZSIgaWYgdGhlIHZhcmlhYmxlICJYIiBkb2VzIG5vdCBleGlzdC48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuc2V0VmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2V0cyB0aGUgdmFyaWFibGUgIlgiIHRvICJ2YWx1ZSIuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmFwcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkFkZHMgInZhbHVlIiB0byB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZSAiWCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3RzIGxpa2UgPGZpbGVuYW1lPmQuc2V0VmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHZhcmlhYmxlICJYIiBkb2VzIG5vdCBleGlzdC48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucHJlcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkFkZHMgInZhbHVlIiB0byB0aGUgc3RhcnQgb2YgdGhlIHZhcmlhYmxlICJYIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdHMgbGlrZSA8ZmlsZW5hbWU+ZC5zZXRWYXIoIlgiLCAidmFsdWUiKTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgdmFyaWFibGUgIlgiIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXIoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIHRoZSB2YXJpYWJsZSAiWCIgZnJvbSB0aGUgZGF0YXN0b3JlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9lcyBub3RoaW5nIGlmIHRoZSB2YXJpYWJsZSAiWCIgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnJlbmFtZVZhcigiWCIsICJZIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UmVuYW1lcyB0aGUgdmFyaWFibGUgIlgiIHRvICJZIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvZXMgbm90aGluZyBpZiB0aGUgdmFyaWFibGUgIlgiIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFnKCJYIiwgZmxhZywgZXhwYW5kKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSAiWCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyAiZXhwYW5kPVRydWUiIGV4cGFuZHMgdGhlIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyAiTm9uZSIgaWYgZWl0aGVyIHRoZSB2YXJpYWJsZSAiWCIgb3IgdGhlIG5hbWVkIGZsYWcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2V0cyB0aGUgbmFtZWQgZmxhZyBmb3IgdmFyaWFibGUgIlgiIHRvICJ2YWx1ZSIuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmFwcGVuZFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5BcHBlbmRzICJ2YWx1ZSIgdG8gdGhlIG5hbWVkIGZsYWcgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAiWCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3RzIGxpa2UgPGZpbGVuYW1lPmQuc2V0VmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBuYW1lZCBmbGFnIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5wcmVwZW5kVmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlByZXBlbmRzICJ2YWx1ZSIgdG8gdGhlIG5hbWVkIGZsYWcgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSAiWCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3RzIGxpa2UgPGZpbGVuYW1lPmQuc2V0VmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBuYW1lZCBmbGFnIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXJGbGFnKCJYIiwgZmxhZyk8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+RGVsZXRlcyB0aGUgbmFtZWQgZmxhZyBvbiB0aGUgdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYIiBmcm9tIHRoZSBkYXRhc3RvcmUuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhckZsYWdzKCJYIiwgZmxhZ3NkaWN0KTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBmbGFncyBzcGVjaWZpZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZmxhZ3NkaWN0KCk8L2ZpbGVuYW1lPiBwYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2V0VmFyRmxhZ3M8L2ZpbGVuYW1lPiBkb2VzIG5vdCBjbGVhciBwcmV2aW91cyBmbGFncy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaW5rIG9mIHRoaXMgb3BlcmF0aW9uIGFzIDxmaWxlbmFtZT5hZGRWYXJGbGFnczwvZmlsZW5hbWU+LjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFncygiWCIpPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJldHVybnMgYSA8ZmlsZW5hbWU+ZmxhZ3NkaWN0PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmbGFncyBmb3IgdGhlIHZhcmlhYmxlICJYIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgIk5vbmUiIGlmIHRoZSB2YXJpYWJsZSAiWCIgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhckZsYWdzKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+RGVsZXRlcyBhbGwgdGhlIGZsYWdzIGZvciB0aGUgdmFyaWFibGUgIlgiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9lcyBub3RoaW5nIGlmIHRoZSB2YXJpYWJsZSAiWCIgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmV4cGFuZChleHByZXNzaW9uKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5FeHBhbmRzIHZhcmlhYmxlIHJlZmVyZW5jZXMgaW4gdGhlIHNwZWNpZmllZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGV4cHJlc3Npb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VzIHRvIHZhcmlhYmxlcyB0aGF0IGRvIG5vdCBleGlzdCBhcmUgbGVmdCBhcyBpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+ZC5leHBhbmQoImZvbyAke1h9Iik8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kcyB0byB0aGUgbGl0ZXJhbCBzdHJpbmcgImZvbyAke1h9IiBpZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICJYIiBkb2VzIG5vdCBleGlzdC48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgPC90Z3JvdXA+Ci0gICAgICAgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J290aGVyLWZ1bmN0aW9ucyc+Ci0gICAgICAgICAgICA8dGl0bGU+T3RoZXIgRnVuY3Rpb25zPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1hbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNhbGxlZAotICAgICAgICAgICAgICAgIGZyb20gUHl0aG9uIGJ5IGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYjwvZmlsZW5hbWU+IG1vZHVsZSwgd2hpY2ggaXMgaW4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvYmI8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvYmIvdXRpbHMucHk8L2ZpbGVuYW1lPiBpbmNsdWRlcwotICAgICAgICAgICAgICAgIHRoZSBjb21tb25seSB1c2VkIGZ1bmN0aW9ucwotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi51dGlscy5jb250YWlucygpPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLnV0aWxzLm1rZGlyaGllcigpPC9maWxlbmFtZT4sIHdoaWNoIGNvbWUKLSAgICAgICAgICAgICAgICB3aXRoIGRvY3N0cmluZ3MuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ndGFzay1jaGVja3N1bXMtYW5kLXNldHNjZW5lJz4KLSAgICAgICAgPHRpdGxlPlRhc2sgQ2hlY2tzdW1zIGFuZCBTZXRzY2VuZTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIHVzZXMgY2hlY2tzdW1zIChvciBzaWduYXR1cmVzKSBhbG9uZyB3aXRoIHRoZSBzZXRzY2VuZQotICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIGlmIGEgdGFzayBuZWVkcyB0byBiZSBydW4uCi0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBwcm9jZXNzLgotICAgICAgICAgICAgVG8gaGVscCB1bmRlcnN0YW5kIGhvdyBCaXRCYWtlIGRvZXMgdGhpcywgdGhlIHNlY3Rpb24gYXNzdW1lcyBhbgotICAgICAgICAgICAgT3BlbkVtYmVkZGVkIG1ldGFkYXRhLWJhc2VkIGV4YW1wbGUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZXNlIGNoZWNrc3VtcyBhcmUgc3RvcmVkIGluCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPi4KLSAgICAgICAgICAgIFlvdSBjYW4gZXhhbWluZSB0aGUgY2hlY2tzdW1zIHVzaW5nIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UtZHVtcHNpZ3MKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBzaWduYXR1cmUgZGF0YSBpbiBhIHJlYWRhYmxlIGZvcm1hdAotICAgICAgICAgICAgdGhhdCBhbGxvd3MgeW91IHRvIGV4YW1pbmUgdGhlIGlucHV0cyB1c2VkIHdoZW4gdGhlCi0gICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyBzaWduYXR1cmVzLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHVzaW5nIDxmaWxlbmFtZT5iaXRiYWtlLWR1bXBzaWdzPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gZXhhbWluZSB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgdGFzaydzIOKAnHNpZ2RhdGHigJ0gZm9yIGEgQyBhcHBsaWNhdGlvbiAoZS5nLgotICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICBSdW5uaW5nIHRoZSBjb21tYW5kIGFsc28gcmV2ZWFscyB0aGF0IHRoZSDigJxDQ+KAnSB2YXJpYWJsZSBpcyBwYXJ0IG9mCi0gICAgICAgICAgICB0aGUgaW5wdXRzIHRoYXQgYXJlIGhhc2hlZC4KLSAgICAgICAgICAgIEFueSBjaGFuZ2VzIHRvIHRoaXMgdmFyaWFibGUgd291bGQgaW52YWxpZGF0ZSB0aGUgc3RhbXAgYW5kCi0gICAgICAgICAgICBjYXVzZSB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrIHRvIHJ1bi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyByZWxhdGVkIHZhcmlhYmxlczoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZHVyaW5nCi0gICAgICAgICAgICAgICAgICAgIHRoZSAic2V0c2NlbmUiIHBhcnQgb2YgdGhlIHRhc2sncyBleGVjdXRpb24gaW4gb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgdG8gdmFsaWRhdGUgdGhlIGxpc3Qgb2YgdGFzayBoYXNoZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX1NFVFNDRU5FX0RFUFZBTElEJz48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfREVQVkFMSUQ8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIEJpdEJha2UgY2FsbHMgdGhhdCBkZXRlcm1pbmVzCi0gICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgQml0QmFrZSByZXF1aXJlcyBhIHNldHNjZW5lIGRlcGVuZGVuY3kgdG8KLSAgICAgICAgICAgICAgICAgICAgYmUgbWV0LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yJz48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OMjwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGF0IHZlcmlmaWVzIHRoZSBsaXN0IG9mCi0gICAgICAgICAgICAgICAgICAgIHBsYW5uZWQgdGFzayBleGVjdXRpb24gYmVmb3JlIHRoZSBtYWluIHRhc2sgZXhlY3V0aW9uCi0gICAgICAgICAgICAgICAgICAgIGhhcHBlbnMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX1NUQU1QX1BPTElDWSc+PGZpbGVuYW1lPkJCX1NUQU1QX1BPTElDWTwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbW9kZSBmb3IgY29tcGFyaW5nIHRpbWVzdGFtcHMgb2Ygc3RhbXAgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX1NUQU1QX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX1NUQU1QX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgTGlzdHMgc3RhbXAgZmlsZXMgdGhhdCBhcmUgbG9va2VkIGF0IHdoZW4gdGhlIHN0YW1wIHBvbGljeQotICAgICAgICAgICAgICAgICAgICBpcyAid2hpdGVsaXN0Ii4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfVEFTS0hBU0gnPjxmaWxlbmFtZT5CQl9UQVNLSEFTSDwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgV2l0aGluIGFuIGV4ZWN1dGluZyB0YXNrLCB0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBoYXNoCi0gICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXNrIGFzIHJldHVybmVkIGJ5IHRoZSBjdXJyZW50bHkgZW5hYmxlZAotICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgZ2VuZXJhdG9yLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBwYXRoIHRvIGNyZWF0ZSBzdGFtcCBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItU1RBTVBDTEVBTic+PGZpbGVuYW1lPlNUQU1QQ0xFQU48L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgIEFnYWluLCB0aGUgYmFzZSBwYXRoIHRvIGNyZWF0ZSBzdGFtcCBmaWxlcyBidXQgY2FuIHVzZSB3aWxkY2FyZHMKLSAgICAgICAgICAgICAgICAgICAgZm9yIG1hdGNoaW5nIGEgcmFuZ2Ugb2YgZmlsZXMgZm9yIGNsZWFuIG9wZXJhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nd2lsZGNhcmQtc3VwcG9ydC1pbi12YXJpYWJsZXMnPgotICAgICAgICA8dGl0bGU+V2lsZGNhcmQgU3VwcG9ydCBpbiBWYXJpYWJsZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgU3VwcG9ydCBmb3Igd2lsZGNhcmQgdXNlIGluIHZhcmlhYmxlcyB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZQotICAgICAgICAgICAgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNvbWUgdmFyaWFibGVzIGFuZCBmaWxlIG5hbWVzIGFsbG93IGxpbWl0ZWQgdXNlIG9mCi0gICAgICAgICAgICB3aWxkY2FyZHMgdGhyb3VnaCB0aGUgIjxmaWxlbmFtZT4lPC9maWxlbmFtZT4iIGFuZAotICAgICAgICAgICAgIjxmaWxlbmFtZT4qPC9maWxlbmFtZT4iIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBPdGhlciB2YXJpYWJsZXMgb3IgbmFtZXMgc3VwcG9ydCBQeXRob24ncwotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dsb2IuaHRtbCc+PGZpbGVuYW1lPmdsb2I8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICBzeW50YXgsCi0gICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm5tYXRjaC5odG1sI21vZHVsZS1mbm1hdGNoJz48ZmlsZW5hbWU+Zm5tYXRjaDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIHN5bnRheCwgb3IKLSAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlJz48ZmlsZW5hbWU+UmVndWxhciBFeHByZXNzaW9uIChyZSk8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICBzeW50YXguCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvciB2YXJpYWJsZXMgdGhhdCBoYXZlIHdpbGRjYXJkIHN1cG9ydCwgdGhlCi0gICAgICAgICAgICBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB3aGljaCBmb3JtIG9mIHdpbGRjYXJkLCBpdHMKLSAgICAgICAgICAgIHVzZSwgYW5kIGl0cyBsaW1pdGF0aW9ucy4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy5yc3QgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnJzdAppbmRleCBmYjFiMzUzLi43NGEzZWI4IDEwMDY0NAotLS0gYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnJzdAorKysgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnJzdApAQCAtMjksNyArMjksNyBAQAogCiAuLiBnbG9zc2FyeTo6CiAKLSAgIEFTU1VNRV9QUk9WSURFRAorICAgOnRlcm06YEFTU1VNRV9QUk9WSURFRGAKICAgICAgIExpc3RzIHJlY2lwZSBuYW1lcyAoOnRlcm06YFBOYCB2YWx1ZXMpIEJpdEJha2UgZG9lcyBub3QKICAgICAgIGF0dGVtcHQgdG8gYnVpbGQuIEluc3RlYWQsIEJpdEJha2UgYXNzdW1lcyB0aGVzZSByZWNpcGVzIGhhdmUgYWxyZWFkeQogICAgICAgYmVlbiBidWlsdC4KQEAgLTM5LDExICszOSwxMSBAQAogICAgICAgd2hlbiBzcGVjaWZpZWQgYWxsb3dzIGZvciB0aGUgR2l0IGJpbmFyeSBmcm9tIHRoZSBob3N0IHRvIGJlIHVzZWQKICAgICAgIHJhdGhlciB0aGFuIGJ1aWxkaW5nIGBgZ2l0LW5hdGl2ZWBgLgogCi0gICBCCisgICA6dGVybTpgQmAKICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggQml0QmFrZSBleGVjdXRlcyBmdW5jdGlvbnMgZHVyaW5nIGEgcmVjaXBlJ3MKICAgICAgIGJ1aWxkIHByb2Nlc3MuCiAKLSAgIEJCX0FMTE9XRURfTkVUV09SS1MKKyAgIDp0ZXJtOmBCQl9BTExPV0VEX05FVFdPUktTYAogICAgICAgU3BlY2lmaWVzIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgaG9zdHMgdGhhdCB0aGUgZmV0Y2hlciBpcyBhbGxvd2VkCiAgICAgICB0byB1c2UgdG8gb2J0YWluIHRoZSByZXF1aXJlZCBzb3VyY2UgY29kZS4gRm9sbG93aW5nIGFyZQogICAgICAgY29uc2lkZXJhdGlvbnMgc3Vycm91bmRpbmcgdGhpcyB2YXJpYWJsZToKQEAgLTgzLDE1ICs4MywxNSBAQAogICAgICAgZmV0Y2hlciBkb2VzIG5vdCBhdHRlbXB0IHRvIHVzZSB0aGUgaG9zdCBsaXN0ZWQgaW4gYGBTUkNfVVJJYGAgYWZ0ZXIKICAgICAgIGEgc3VjY2Vzc2Z1bCBmZXRjaCBmcm9tIHRoZSBgYFBSRU1JUlJPUlNgYCBvY2N1cnMuCiAKLSAgIEJCX0NPTlNPTEVMT0cKKyAgIDp0ZXJtOmBCQl9DT05TT0xFTE9HYAogICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIGEgbG9nIGZpbGUgaW50byB3aGljaCBCaXRCYWtlJ3MgdXNlciBpbnRlcmZhY2UKICAgICAgIHdyaXRlcyBvdXRwdXQgZHVyaW5nIHRoZSBidWlsZC4KIAotICAgQkJfQ1VSUkVOVFRBU0sKKyAgIDp0ZXJtOmBCQl9DVVJSRU5UVEFTS2AKICAgICAgIENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLiBUaGUgbmFtZSBkb2VzIG5vdAogICAgICAgaW5jbHVkZSB0aGUgYGBkb19gYCBwcmVmaXguCiAKLSAgIEJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWQorICAgOnRlcm06YEJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWWAKICAgICAgIERlZmluZXMgaG93IEJpdEJha2UgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIGFuIGFwcGVuZCBmaWxlCiAgICAgICAoYGAuYmJhcHBlbmRgYCkgaGFzIG5vIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKGBgLmJiYGApLiBUaGlzCiAgICAgICBjb25kaXRpb24gb2Z0ZW4gb2NjdXJzIHdoZW4gbGF5ZXJzIGdldCBvdXQgb2Ygc3luYyAoZS5nLiBgYG9lLWNvcmVgYApAQCAtMTAzLDEyICsxMDMsMTIgQEAKICAgICAgIGdpdmVuIHNvbWV0aGluZyBpcyBvdXQgb2Ygc3luYy4gSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgd2hlbiB5b3VyCiAgICAgICBjaGFuZ2VzIGFyZSBubyBsb25nZXIgYmVpbmcgYXBwbGllZC4KIAotICAgQkJfREVGQVVMVF9UQVNLCisgICA6dGVybTpgQkJfREVGQVVMVF9UQVNLYAogICAgICAgVGhlIGRlZmF1bHQgdGFzayB0byB1c2Ugd2hlbiBub25lIGlzIHNwZWNpZmllZCAoZS5nLiB3aXRoIHRoZSBgYC1jYGAKICAgICAgIGNvbW1hbmQgbGluZSBvcHRpb24pLiBUaGUgdGFzayBuYW1lIHNwZWNpZmllZCBzaG91bGQgbm90IGluY2x1ZGUgdGhlCiAgICAgICBgYGRvX2BgIHByZWZpeC4KIAotICAgQkJfRElTS01PTl9ESVJTCisgICA6dGVybTpgQkJfRElTS01PTl9ESVJTYAogICAgICAgTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBhbGxvd3MKICAgICAgIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZSBwYXJhbWV0ZXJzLgogCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICAgIGZyZWUgaW5vZGVzIGluIHRoZSBgYCR7VE1QRElSfWBgIGRpcmVjdG9yeSBkcm9wcyBiZWxvdyAxMDAgS2J5dGVzLiBObwogICAgICAgZGlzayBzcGFjZSBtb25pdG9yaW5nIGZvciB0aGUgZGlyZWN0b3J5IGl0c2VsZiBvY2N1cnMgaW4gdGhpcyBjYXNlLgogCi0gICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTAorICAgOnRlcm06YEJCX0RJU0tNT05fV0FSTklOVEVSVkFMYAogICAgICAgRGVmaW5lcyB0aGUgZGlzayBzcGFjZSBhbmQgZnJlZSBpbm9kZSB3YXJuaW5nIGludGVydmFscy4KIAogICAgICAgSWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIGBgQkJfRElTS01PTl9XQVJOSU5URVJWQUxgYCB2YXJpYWJsZSwgeW91CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgIGJhc2VkIG9uIHRoZSBpbnRlcnZhbCBvY2N1ciBlYWNoIHRpbWUgYSByZXNwZWN0aXZlIGludGVydmFsIGlzCiAgICAgICByZWFjaGVkIGJleW9uZCB0aGUgaW5pdGlhbCB3YXJuaW5nIChpLmUuIDEgR2J5dGVzIGFuZCAxMDAgS2J5dGVzKS4KIAotICAgQkJfRU5WX1dISVRFTElTVAorICAgOnRlcm06YEJCX0VOVl9XSElURUxJU1RgCiAgICAgICBTcGVjaWZpZXMgdGhlIGludGVybmFsIHdoaXRlbGlzdCBvZiB2YXJpYWJsZXMgdG8gYWxsb3cgdGhyb3VnaCBmcm9tCiAgICAgICB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW50byBCaXRCYWtlJ3MgZGF0YXN0b3JlLiBJZiB0aGUgdmFsdWUgb2YKICAgICAgIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGUgZm9sbG93aW5nCkBAIC0yMzAsNyArMjMwLDcgQEAKICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbiBvcmRlcgogICAgICAgICAgZm9yIGl0IHRvIHdvcmsuCiAKLSAgIEJCX0VOVl9FWFRSQVdISVRFCisgICA6dGVybTpgQkJfRU5WX0VYVFJBV0hJVEVgCiAgICAgICBTcGVjaWZpZXMgYW4gYWRkaXRpb25hbCBzZXQgb2YgdmFyaWFibGVzIHRvIGFsbG93IHRocm91Z2ggKHdoaXRlbGlzdCkKICAgICAgIGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IGludG8gQml0QmFrZSdzIGRhdGFzdG9yZS4gVGhpcyBsaXN0IG9mCiAgICAgICB2YXJpYWJsZXMgYXJlIG9uIHRvcCBvZiB0aGUgaW50ZXJuYWwgbGlzdCBzZXQgaW4KQEAgLTI0MSwxOSArMjQxLDE5IEBACiAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW4gb3JkZXIKICAgICAgICAgIGZvciBpdCB0byB3b3JrLgogCi0gICBCQl9GRVRDSF9QUkVNSVJST1JPTkxZCisgICA6dGVybTpgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWWAKICAgICAgIFdoZW4gc2V0IHRvICIxIiwgY2F1c2VzIEJpdEJha2UncyBmZXRjaGVyIG1vZHVsZSB0byBvbmx5IHNlYXJjaAogICAgICAgOnRlcm06YFBSRU1JUlJPUlNgIGZvciBmaWxlcy4gQml0QmFrZSB3aWxsIG5vdAogICAgICAgc2VhcmNoIHRoZSBtYWluIDp0ZXJtOmBTUkNfVVJJYCBvcgogICAgICAgOnRlcm06YE1JUlJPUlNgLgogCi0gICBCQl9GSUxFTkFNRQorICAgOnRlcm06YEJCX0ZJTEVOQU1FYAogICAgICAgQ29udGFpbnMgdGhlIGZpbGVuYW1lIG9mIHRoZSByZWNpcGUgdGhhdCBvd25zIHRoZSBjdXJyZW50bHkgcnVubmluZwogICAgICAgdGFzay4gRm9yIGV4YW1wbGUsIGlmIHRoZSBgYGRvX2ZldGNoYGAgdGFzayB0aGF0IHJlc2lkZXMgaW4gdGhlCiAgICAgICBgYG15LXJlY2lwZS5iYmBgIGlzIGV4ZWN1dGluZywgdGhlIGBgQkJfRklMRU5BTUVgYCB2YXJpYWJsZSBjb250YWlucwogICAgICAgIi9mb28vcGF0aC9teS1yZWNpcGUuYmIiLgogCi0gICBCQkZJTEVTX0RZTkFNSUMKKyAgIDp0ZXJtOmBCQkZJTEVTX0RZTkFNSUNgCiAgICAgICBBY3RpdmF0ZXMgY29udGVudCBkZXBlbmRpbmcgb24gcHJlc2VuY2Ugb2YgaWRlbnRpZmllZCBsYXllcnMuICBZb3UKICAgICAgIGlkZW50aWZ5IHRoZSBsYXllcnMgYnkgdGhlIGNvbGxlY3Rpb25zIHRoYXQgdGhlIGxheWVycyBkZWZpbmUuCiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICAgL3dvcmsvbXktbGF5ZXIvYmJhcHBlbmRzL21ldGEtc2VjdXJpdHktaXNhZncvKi8qLyouYmJhcHBlbmQKICAgICAgICAgIC93b3JrL215LWxheWVyL2JiYXBwZW5kcy9vcGVuZW1iZWRkZWQtY29yZS9tZXRhLyovKi8qLmJiYXBwZW5kCiAKLSAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUworICAgOnRlcm06YEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMU2AKICAgICAgIENhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcywgaW5jbHVkaW5nIHRoZSBHaXQgbWV0YWRhdGEsCiAgICAgICB0byBiZSBwbGFjZWQgaW4gdGhlIDp0ZXJtOmBETF9ESVJgIGRpcmVjdG9yeS4gQW55b25lCiAgICAgICB3aXNoaW5nIHRvIGNyZWF0ZSBhIHNvdXJjZSBtaXJyb3Igd291bGQgd2FudCB0byBlbmFibGUgdGhpcyB2YXJpYWJsZS4KQEAgLTMwMiw3ICszMDIsNyBAQAogCiAgICAgICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPSAiMSIKIAotICAgQkJfSEFTSENPTkZJR19XSElURUxJU1QKKyAgIDp0ZXJtOmBCQl9IQVNIQ09ORklHX1dISVRFTElTVGAKICAgICAgIExpc3RzIHZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIGJhc2UgY29uZmlndXJhdGlvbiBjaGVja3N1bSwKICAgICAgIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBjYW4gYmUgcmV1c2VkLgogCkBAIC0zMTQsMTQgKzMxNCwxNCBAQAogICAgICAgYW5kIGBgREFURWBgIGJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBhbHdheXMgY2hhbmdpbmcuIElmIHlvdSBkaWQKICAgICAgIG5vdCBleGNsdWRlIHRoZW0sIEJpdEJha2Ugd291bGQgbmV2ZXIgcmV1c2UgdGhlIGNhY2hlLgogCi0gICBCQl9IQVNIQkFTRV9XSElURUxJU1QKKyAgIDp0ZXJtOmBCQl9IQVNIQkFTRV9XSElURUxJU1RgCiAgICAgICBMaXN0cyB2YXJpYWJsZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSBjaGVja3N1bSBhbmQgZGVwZW5kZW5jeSBkYXRhLgogICAgICAgVmFyaWFibGVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGNhbiB0aGVyZWZvcmUgY2hhbmdlIHdpdGhvdXQgYWZmZWN0aW5nCiAgICAgICB0aGUgY2hlY2tzdW0gbWVjaGFuaXNtLiBBIGNvbW1vbiBleGFtcGxlIHdvdWxkIGJlIHRoZSB2YXJpYWJsZSBmb3IKICAgICAgIHRoZSBwYXRoIG9mIHRoZSBidWlsZC4gQml0QmFrZSdzIG91dHB1dCBzaG91bGQgbm90IChhbmQgdXN1YWxseSBkb2VzCiAgICAgICBub3QpIGRlcGVuZCBvbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IHdhcyBidWlsdC4KIAotICAgQkJfSEFTSENIRUNLX0ZVTkNUSU9OCisgICA6dGVybTpgQkJfSEFTSENIRUNLX0ZVTkNUSU9OYAogICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGR1cmluZyB0aGUgInNldHNjZW5lIiBwYXJ0CiAgICAgICBvZiB0aGUgdGFzaydzIGV4ZWN1dGlvbiBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgbGlzdCBvZiB0YXNrIGhhc2hlcy4KICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHNldHNjZW5lIHRhc2tzIHRoYXQgc2hvdWxkIGJlCkBAIC0zMzUsMTkgKzMzNSwxOSBAQAogICAgICAgSG93ZXZlciwgdGhlIG1vcmUgYWNjdXJhdGUgdGhlIGRhdGEgcmV0dXJuZWQsIHRoZSBtb3JlIGVmZmljaWVudCB0aGUKICAgICAgIGJ1aWxkIHdpbGwgYmUuCiAKLSAgIEJCX0lOVkFMSURDT05GCisgICA6dGVybTpgQkJfSU5WQUxJRENPTkZgCiAgICAgICBVc2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGBgQ29uZmlnUGFyc2VkYGAgZXZlbnQgdG8gdHJpZ2dlcgogICAgICAgcmUtcGFyc2luZyB0aGUgYmFzZSBtZXRhZGF0YSAoaS5lLiBhbGwgdGhlIHJlY2lwZXMpLiBUaGUKICAgICAgIGBgQ29uZmlnUGFyc2VkYGAgZXZlbnQgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gdHJpZ2dlciB0aGUgcmUtcGFyc2UuCiAgICAgICBZb3UgbXVzdCBiZSBjYXJlZnVsIHRvIGF2b2lkIHJlY3Vyc2l2ZSBsb29wcyB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS4KIAotICAgQkJfTE9HQ09ORklHCisgICA6dGVybTpgQkJfTE9HQ09ORklHYAogICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY29uZmlnIGZpbGUgdGhhdCBjb250YWlucyB0aGUgdXNlciBsb2dnaW5nCiAgICAgICBjb25maWd1cmF0aW9uLiBTZWUKICAgICAgIDpyZWY6YGJpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb246bG9nZ2luZ2AKICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiAKLSAgIEJCX0xPR0ZNVAorICAgOnRlcm06YEJCX0xPR0ZNVGAKICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbG9nIGZpbGVzIHNhdmVkIGludG8KICAgICAgIGBgJHtgYFwgOnRlcm06YFRgXCBgYH1gYC4gQnkgZGVmYXVsdCwgdGhlIGBgQkJfTE9HRk1UYGAKICAgICAgIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCBhbmQgdGhlIGxvZyBmaWxlIG5hbWVzIGdldCBjcmVhdGVkIHVzaW5nIHRoZQpAQCAtMzU4LDEzICszNTgsMTMgQEAKICAgICAgIElmIHlvdSB3YW50IHRvIGZvcmNlIGxvZyBmaWxlcyB0byB0YWtlIGEgc3BlY2lmaWMgbmFtZSwgeW91IGNhbiBzZXQgdGhpcwogICAgICAgdmFyaWFibGUgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCiAKLSAgIEJCX05JQ0VfTEVWRUwKKyAgIDp0ZXJtOmBCQl9OSUNFX0xFVkVMYAogICAgICAgQWxsb3dzIEJpdEJha2UgdG8gcnVuIGF0IGEgc3BlY2lmaWMgcHJpb3JpdHkgKGkuZS4gbmljZSBsZXZlbCkuCiAgICAgICBTeXN0ZW0gcGVybWlzc2lvbnMgdXN1YWxseSBtZWFuIHRoYXQgQml0QmFrZSBjYW4gcmVkdWNlIGl0cyBwcmlvcml0eQogICAgICAgYnV0IG5vdCByYWlzZSBpdCBhZ2Fpbi4gU2VlIDp0ZXJtOmBCQl9UQVNLX05JQ0VfTEVWRUxgIGZvcgogICAgICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KIAotICAgQkJfTk9fTkVUV09SSworICAgOnRlcm06YEJCX05PX05FVFdPUktgCiAgICAgICBEaXNhYmxlcyBuZXR3b3JrIGFjY2VzcyBpbiB0aGUgQml0QmFrZSBmZXRjaGVyIG1vZHVsZXMuIFdpdGggdGhpcwogICAgICAgYWNjZXNzIGRpc2FibGVkLCBhbnkgY29tbWFuZCB0aGF0IGF0dGVtcHRzIHRvIGFjY2VzcyB0aGUgbmV0d29yawogICAgICAgYmVjb21lcyBhbiBlcnJvci4KQEAgLTM3MywxNiArMzczLDE2IEBACiAgICAgICBydW5uaW5nIGJ1aWxkcyB3aGVuIG5vdCBjb25uZWN0ZWQgdG8gdGhlIEludGVybmV0LCBhbmQgd2hlbiBvcGVyYXRpbmcKICAgICAgIGluIGNlcnRhaW4ga2luZHMgb2YgZmlyZXdhbGwgZW52aXJvbm1lbnRzLgogCi0gICBCQl9OVU1CRVJfVEhSRUFEUworICAgOnRlcm06YEJCX05VTUJFUl9USFJFQURTYAogICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIEJpdEJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbCBhdCBhbnkgb25lCiAgICAgICB0aW1lLiBJZiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHN1cHBvcnRzIG11bHRpcGxlIGNvcmVzLCBhIGdvb2QKICAgICAgIHJ1bGUgb2YgdGh1bWIgaXMgdG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gdHdpY2UgdGhlIG51bWJlciBvZiBjb3Jlcy4KIAotICAgQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMKKyAgIDp0ZXJtOmBCQl9OVU1CRVJfUEFSU0VfVEhSRUFEU2AKICAgICAgIFNldHMgdGhlIG51bWJlciBvZiB0aHJlYWRzIEJpdEJha2UgdXNlcyB3aGVuIHBhcnNpbmcuIEJ5IGRlZmF1bHQsIHRoZQogICAgICAgbnVtYmVyIG9mIHRocmVhZHMgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgc3lzdGVtLgogCi0gICBCQl9PUklHRU5WCisgICA6dGVybTpgQkJfT1JJR0VOVmAKICAgICAgIENvbnRhaW5zIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW4gd2hpY2ggQml0QmFrZQogICAgICAgd2FzIHJ1bi4gVGhlIGNvcHkgaXMgdGFrZW4gYmVmb3JlIGFueSB3aGl0ZWxpc3RlZCB2YXJpYWJsZSB2YWx1ZXMgYXJlCiAgICAgICBmaWx0ZXJlZCBpbnRvIEJpdEJha2UncyBkYXRhc3RvcmUuCkBAIC0zOTIsNyArMzkyLDcgQEAKICAgICAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIHZhcmlhYmxlIGlzIGEgZGF0YXN0b3JlIG9iamVjdCB0aGF0IGNhbiBiZQogICAgICAgICAgcXVlcmllZCB1c2luZyB0aGUgbm9ybWFsIGRhdGFzdG9yZSBvcGVyYXRpb25zLgogCi0gICBCQl9QUkVTRVJWRV9FTlYKKyAgIDp0ZXJtOmBCQl9QUkVTRVJWRV9FTlZgCiAgICAgICBEaXNhYmxlcyB3aGl0ZWxpc3RpbmcgYW5kIGluc3RlYWQgYWxsb3dzIGFsbCB2YXJpYWJsZXMgdGhyb3VnaCBmcm9tCiAgICAgICB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW50byBCaXRCYWtlJ3MgZGF0YXN0b3JlLgogCkBAIC00MDEsNyArNDAxLDcgQEAKICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbiBvcmRlcgogICAgICAgICAgZm9yIGl0IHRvIHdvcmsuCiAKLSAgIEJCX1JVTkZNVAorICAgOnRlcm06YEJCX1JVTkZNVGAKICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBzY3JpcHQgZmlsZXMgKGkuZS4gcnVuIGZpbGVzKQogICAgICAgc2F2ZWQgaW50byBgYCR7YGBcIDp0ZXJtOmBUYFwgYGB9YGAuIEJ5IGRlZmF1bHQsIHRoZQogICAgICAgYGBCQl9SVU5GTVRgYCB2YXJpYWJsZSBpcyB1bmRlZmluZWQgYW5kIHRoZSBydW4gZmlsZSBuYW1lcyBnZXQKQEAgLTQxMiwxMiArNDEyLDEyIEBACiAgICAgICBJZiB5b3Ugd2FudCB0byBmb3JjZSBydW4gZmlsZXMgdG8gdGFrZSBhIHNwZWNpZmljIG5hbWUsIHlvdSBjYW4gc2V0IHRoaXMKICAgICAgIHZhcmlhYmxlIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLgogCi0gICBCQl9SVU5UQVNLCisgICA6dGVybTpgQkJfUlVOVEFTS2AKICAgICAgIENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHRhc2suIFRoZSB2YWx1ZSBpbmNsdWRlcwogICAgICAgdGhlICJkb1xfIiBwcmVmaXguIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrIGlzCiAgICAgICBgYGRvX2NvbmZpZ2BgLCB0aGUgdmFsdWUgaXMgImRvX2NvbmZpZyIuCiAKLSAgIEJCX1NDSEVEVUxFUgorICAgOnRlcm06YEJCX1NDSEVEVUxFUmAKICAgICAgIFNlbGVjdHMgdGhlIG5hbWUgb2YgdGhlIHNjaGVkdWxlciB0byB1c2UgZm9yIHRoZSBzY2hlZHVsaW5nIG9mCiAgICAgICBCaXRCYWtlIHRhc2tzLiBUaHJlZSBvcHRpb25zIGV4aXN0OgogCkBAIC00MzEsMTQgKzQzMSwxNCBAQAogICAgICAgLSAgKmNvbXBsZXRpb24qIC0gQ2F1c2VzIHRoZSBzY2hlZHVsZXIgdG8gdHJ5IHRvIGNvbXBsZXRlIGEgZ2l2ZW4KICAgICAgICAgIHJlY2lwZSBvbmNlIGl0cyBidWlsZCBoYXMgc3RhcnRlZC4KIAotICAgQkJfU0NIRURVTEVSUworICAgOnRlcm06YEJCX1NDSEVEVUxFUlNgCiAgICAgICBEZWZpbmVzIGN1c3RvbSBzY2hlZHVsZXJzIHRvIGltcG9ydC4gQ3VzdG9tIHNjaGVkdWxlcnMgbmVlZCB0byBiZQogICAgICAgZGVyaXZlZCBmcm9tIHRoZSBgYFJ1blF1ZXVlU2NoZWR1bGVyYGAgY2xhc3MuCiAKICAgICAgIEZvciBpbmZvcm1hdGlvbiBob3cgdG8gc2VsZWN0IGEgc2NoZWR1bGVyLCBzZWUgdGhlCiAgICAgICA6dGVybTpgQkJfU0NIRURVTEVSYCB2YXJpYWJsZS4KIAotICAgQkJfU0VUU0NFTkVfREVQVkFMSUQKKyAgIDp0ZXJtOmBCQl9TRVRTQ0VORV9ERVBWQUxJRGAKICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIEJpdEJha2UgY2FsbHMgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgQml0QmFrZQogICAgICAgcmVxdWlyZXMgYSBzZXRzY2VuZSBkZXBlbmRlbmN5IHRvIGJlIG1ldC4KIApAQCAtNDQ4LDcgKzQ0OCw3IEBACiAgICAgICBUaGUgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUgcmV0dXJucyBhICJUcnVlIiBvciAiRmFsc2UiCiAgICAgICBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSBtZXQuCiAKLSAgIEJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjIKKyAgIDp0ZXJtOmBCQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yYAogICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGF0IHZlcmlmaWVzIHRoZSBsaXN0IG9mIHBsYW5uZWQgdGFzawogICAgICAgZXhlY3V0aW9uIGJlZm9yZSB0aGUgbWFpbiB0YXNrIGV4ZWN1dGlvbiBoYXBwZW5zLiBUaGUgZnVuY3Rpb24gaXMKICAgICAgIGNhbGxlZCBvbmNlIEJpdEJha2UgaGFzIGEgbGlzdCBvZiBzZXRzY2VuZSB0YXNrcyB0aGF0IGhhdmUgcnVuIGFuZApAQCAtNDU5LDcgKzQ1OSw3IEBACiAgICAgICB0aGUgZnVuY3Rpb24gY2FuIGZvcmNlIEJpdEJha2UgdG8gcnVuIHRoZSB0YXNrLCB3aGljaCBpcyBuZWNlc3NhcnkKICAgICAgIHVuZGVyIGNlcnRhaW4gbWV0YWRhdGEgZGVmaW5lZCBjaXJjdW1zdGFuY2VzLgogCi0gICBCQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUworICAgOnRlcm06YEJCX1NJR05BVFVSRV9FWENMVURFX0ZMQUdTYAogICAgICAgTGlzdHMgdmFyaWFibGUgZmxhZ3MgKHZhcmZsYWdzKSB0aGF0IGNhbiBiZSBzYWZlbHkgZXhjbHVkZWQgZnJvbQogICAgICAgY2hlY2tzdW0gYW5kIGRlcGVuZGVuY3kgZGF0YSBmb3Iga2V5cyBpbiB0aGUgZGF0YXN0b3JlLiBXaGVuCiAgICAgICBnZW5lcmF0aW5nIGNoZWNrc3VtIG9yIGRlcGVuZGVuY3kgZGF0YSBmb3Iga2V5cyBpbiB0aGUgZGF0YXN0b3JlLCB0aGUKQEAgLTQ2OSw3ICs0NjksNyBAQAogICAgICAgIjpyZWY6YGJpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YTp2YXJpYWJsZSBmbGFnc2AiCiAgICAgICBzZWN0aW9uLgogCi0gICBCQl9TSUdOQVRVUkVfSEFORExFUgorICAgOnRlcm06YEJCX1NJR05BVFVSRV9IQU5ETEVSYAogICAgICAgRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGhhbmRsZXIgQml0QmFrZSB1c2VzLiBUaGUgc2lnbmF0dXJlCiAgICAgICBoYW5kbGVyIGRlZmluZXMgdGhlIHdheSBzdGFtcCBmaWxlcyBhcmUgY3JlYXRlZCBhbmQgaGFuZGxlZCwgaWYgYW5kCiAgICAgICBob3cgdGhlIHNpZ25hdHVyZSBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgc3RhbXBzLCBhbmQgaG93IHRoZQpAQCAtNDc4LDcgKzQ3OCw3IEBACiAgICAgICBBIG5ldyBzaWduYXR1cmUgaGFuZGxlciBjYW4gYmUgYWRkZWQgYnkgaW5qZWN0aW5nIGEgY2xhc3MgZGVyaXZlZAogICAgICAgZnJvbSB0aGUgYGBTaWduYXR1cmVHZW5lcmF0b3JgYCBjbGFzcyBpbnRvIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgogCi0gICBCQl9TUkNSRVZfUE9MSUNZCisgICA6dGVybTpgQkJfU1JDUkVWX1BPTElDWWAKICAgICAgIERlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmZXRjaGVyIHdoZW4gaXQgaW50ZXJhY3RzIHdpdGggc291cmNlCiAgICAgICBjb250cm9sIHN5c3RlbXMgYW5kIGR5bmFtaWMgc291cmNlIHJldmlzaW9ucy4gVGhlCiAgICAgICBgYEJCX1NSQ1JFVl9QT0xJQ1lgYCB2YXJpYWJsZSBpcyB1c2VmdWwgd2hlbiB3b3JraW5nIHdpdGhvdXQgYQpAQCAtNDkyLDcgKzQ5Miw3IEBACiAgICAgICAtICAqY2xlYXIqIC0gUXVlcmllcyB0aGUgc291cmNlIGNvbnRyb2xzIHN5c3RlbSBldmVyeSB0aW1lLiBXaXRoIHRoaXMKICAgICAgICAgIHBvbGljeSwgdGhlcmUgaXMgbm8gY2FjaGUuIFRoZSAiY2xlYXIiIHBvbGljeSBpcyB0aGUgZGVmYXVsdC4KIAotICAgQkJfU1RBTVBfUE9MSUNZCisgICA6dGVybTpgQkJfU1RBTVBfUE9MSUNZYAogICAgICAgRGVmaW5lcyB0aGUgbW9kZSB1c2VkIGZvciBob3cgdGltZXN0YW1wcyBvZiBzdGFtcCBmaWxlcyBhcmUgY29tcGFyZWQuCiAgICAgICBZb3UgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgbW9kZXM6CiAKQEAgLTUxMCwxOCArNTEwLDE4IEBACiAgICAgICAgICBTdGFtcCBwb2xpY2llcyBhcmUgbGFyZ2VseSBvYnNvbGV0ZSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YKICAgICAgICAgIHNldHNjZW5lIHRhc2tzLgogCi0gICBCQl9TVEFNUF9XSElURUxJU1QKKyAgIDp0ZXJtOmBCQl9TVEFNUF9XSElURUxJU1RgCiAgICAgICBMaXN0cyBmaWxlcyB3aG9zZSBzdGFtcCBmaWxlIHRpbWVzdGFtcHMgYXJlIGNvbXBhcmVkIHdoZW4gdGhlIHN0YW1wCiAgICAgICBwb2xpY3kgbW9kZSBpcyBzZXQgdG8gIndoaXRlbGlzdCIuIEZvciBpbmZvcm1hdGlvbiBvbiBzdGFtcCBwb2xpY2llcywKICAgICAgIHNlZSB0aGUgOnRlcm06YEJCX1NUQU1QX1BPTElDWWAgdmFyaWFibGUuCiAKLSAgIEJCX1NUUklDVF9DSEVDS1NVTQorICAgOnRlcm06YEJCX1NUUklDVF9DSEVDS1NVTWAKICAgICAgIFNldHMgYSBtb3JlIHN0cmljdCBjaGVja3N1bSBtZWNoYW5pc20gZm9yIG5vbi1sb2NhbCBVUkxzLiBTZXR0aW5nCiAgICAgICB0aGlzIHZhcmlhYmxlIHRvIGEgdmFsdWUgY2F1c2VzIEJpdEJha2UgdG8gcmVwb3J0IGFuIGVycm9yIGlmIGl0CiAgICAgICBlbmNvdW50ZXJzIGEgbm9uLWxvY2FsIFVSTCB0aGF0IGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIGNoZWNrc3VtCiAgICAgICBzcGVjaWZpZWQuCiAKLSAgIEJCX1RBU0tfSU9OSUNFX0xFVkVMCisgICA6dGVybTpgQkJfVEFTS19JT05JQ0VfTEVWRUxgCiAgICAgICBBbGxvd3MgYWRqdXN0bWVudCBvZiBhIHRhc2sncyBJbnB1dC9PdXRwdXQgcHJpb3JpdHkuIER1cmluZwogICAgICAgQXV0b2J1aWxkZXIgdGVzdGluZywgcmFuZG9tIGZhaWx1cmVzIGNhbiBvY2N1ciBmb3IgdGFza3MgZHVlIHRvIEkvTwogICAgICAgc3RhcnZhdGlvbi4gVGhlc2UgZmFpbHVyZXMgb2NjdXIgZHVyaW5nIHZhcmlvdXMgUUVNVSBydW50aW1lCkBAIC01NTMsOSArNTUzLDkgQEAKICAgICAgICAgIGRldmljZS4gVG8gc2VsZWN0IHRoZSBzY2hlZHVsZXIsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybSB3aGVyZQogICAgICAgICAgZGV2aWNlIGlzIHRoZSBkZXZpY2UgKGUuZy4gc2RhLCBzZGIsIGFuZCBzbyBmb3J0aCk6IDo6CiAKLSAgICAgICAgICAgICQgc3VkbyBzaCAtYyDigJxlY2hvIGNmcSA+IC9zeXMvYmxvY2svZGV2aWNlL3F1ZXUvc2NoZWR1bGVyCisgICAgICAgICAgICAkIHN1ZG8gc2ggLWMgImVjaG8gY2ZxID4gL3N5cy9ibG9jay9kZXZpY2UvcXVldS9zY2hlZHVsZXIiCiAKLSAgIEJCX1RBU0tfTklDRV9MRVZFTAorICAgOnRlcm06YEJCX1RBU0tfTklDRV9MRVZFTGAKICAgICAgIEFsbG93cyBzcGVjaWZpYyB0YXNrcyB0byBjaGFuZ2UgdGhlaXIgcHJpb3JpdHkgKGkuZS4gbmljZSBsZXZlbCkuCiAKICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgaW4gY29tYmluYXRpb24gd2l0aCB0YXNrIG92ZXJyaWRlcyB0byByYWlzZQpAQCAtNTY0LDIyICs1NjQsMjIgQEAKICAgICAgIGluIGltYWdlcyBpcyBnaXZlbiBhIGhpZ2hlciBwcmlvcml0eSBhcyBjb21wYXJlZCB0byBidWlsZCB0YXNrcyB0bwogICAgICAgZW5zdXJlIHRoYXQgaW1hZ2VzIGRvIG5vdCBzdWZmZXIgdGltZW91dHMgb24gbG9hZGVkIHN5c3RlbXMuCiAKLSAgIEJCX1RBU0tIQVNICisgICA6dGVybTpgQkJfVEFTS0hBU0hgCiAgICAgICBXaXRoaW4gYW4gZXhlY3V0aW5nIHRhc2ssIHRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGhhc2ggb2YgdGhlIHRhc2sgYXMKICAgICAgIHJldHVybmVkIGJ5IHRoZSBjdXJyZW50bHkgZW5hYmxlZCBzaWduYXR1cmUgZ2VuZXJhdG9yLgogCi0gICBCQl9WRVJCT1NFX0xPR1MKKyAgIDp0ZXJtOmBCQl9WRVJCT1NFX0xPR1NgCiAgICAgICBDb250cm9scyBob3cgdmVyYm9zZSBCaXRCYWtlIGlzIGR1cmluZyBidWlsZHMuIElmIHNldCwgc2hlbGwgc2NyaXB0cwogICAgICAgZWNobyBjb21tYW5kcyBhbmQgc2hlbGwgc2NyaXB0IG91dHB1dCBhcHBlYXJzIG9uIHN0YW5kYXJkIG91dAogICAgICAgKHN0ZG91dCkuCiAKLSAgIEJCX1dPUktFUkNPTlRFWFQKKyAgIDp0ZXJtOmBCQl9XT1JLRVJDT05URVhUYAogICAgICAgU3BlY2lmaWVzIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgZXhlY3V0aW5nIGEgdGFzay4gQml0QmFrZSBzZXRzCiAgICAgICB0aGlzIHZhcmlhYmxlIHRvICIxIiB3aGVuIGEgdGFzayBpcyBiZWluZyBleGVjdXRlZC4gVGhlIHZhbHVlIGlzIG5vdAogICAgICAgc2V0IHdoZW4gdGhlIHRhc2sgaXMgaW4gc2VydmVyIGNvbnRleHQgZHVyaW5nIHBhcnNpbmcgb3IgZXZlbnQKICAgICAgIGhhbmRsaW5nLgogCi0gICBCQkNMQVNTRVhURU5ECisgICA6dGVybTpgQkJDTEFTU0VYVEVORGAKICAgICAgIEFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzIG9mIHRoZQogICAgICAgc29mdHdhcmUuIFNvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdmFyaWFudHMgZm9yIHJlY2lwZXMgZnJvbSB0aGUKICAgICAgIE9wZW5FbWJlZGRlZC1Db3JlIG1ldGFkYXRhIGFyZSAibmF0aXZlcyIgc3VjaCBhcyBgYHF1aWx0LW5hdGl2ZWBgLApAQCAtNjExLDcgKzYxMSw3IEBACiAgICAgICAgICBzaW5jZSBgYGluY2x1ZGVgYCBzdGF0ZW1lbnRzIGFyZSBwcm9jZXNzZWQgd2hlbiB0aGUgcmVjaXBlIGlzCiAgICAgICAgICBwYXJzZWQuCiAKLSAgIEJCREVCVUcKKyAgIDp0ZXJtOmBCQkRFQlVHYAogICAgICAgU2V0cyB0aGUgQml0QmFrZSBkZWJ1ZyBvdXRwdXQgbGV2ZWwgdG8gYSBzcGVjaWZpYyB2YWx1ZSBhcwogICAgICAgaW5jcmVtZW50ZWQgYnkgdGhlIGBgLURgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgogCkBAIC02MjAsMTkgKzYyMCwxOSBAQAogICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IGluIG9yZGVyCiAgICAgICAgICBmb3IgaXQgdG8gd29yay4KIAotICAgQkJGSUxFX0NPTExFQ1RJT05TCisgICA6dGVybTpgQkJGSUxFX0NPTExFQ1RJT05TYAogICAgICAgTGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLiBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kCiAgICAgICB0aGUgb3RoZXIgYGBCQkZJTEVfKmBgIHZhcmlhYmxlcy4gVHlwaWNhbGx5LCBlYWNoIGxheWVyIGFwcGVuZHMgaXRzCiAgICAgICBuYW1lIHRvIHRoaXMgdmFyaWFibGUgaW4gaXRzIGBgY29uZi9sYXllci5jb25mYGAgZmlsZS4KIAotICAgQkJGSUxFX1BBVFRFUk4KKyAgIDp0ZXJtOmBCQkZJTEVfUEFUVEVSTmAKICAgICAgIFZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tCiAgICAgICA6dGVybTpgQkJGSUxFU2AgaW4gYSBwYXJ0aWN1bGFyIGxheWVyLiBUaGlzCiAgICAgICB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBgYGNvbmYvbGF5ZXIuY29uZmBgIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQKICAgICAgIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyIChlLmcuCiAgICAgICBgYEJCRklMRV9QQVRURVJOX2VtZW5sb3dgYCkuCiAKLSAgIEJCRklMRV9QUklPUklUWQorICAgOnRlcm06YEJCRklMRV9QUklPUklUWWAKICAgICAgIEFzc2lnbnMgdGhlIHByaW9yaXR5IGZvciByZWNpcGUgZmlsZXMgaW4gZWFjaCBsYXllci4KIAogICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgc2FtZSByZWNpcGUgYXBwZWFycwpAQCAtNjU4LDcgKzY1OCw3IEBACiAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY29tbWFuZCBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyB0byBsaXN0IGFsbAogICAgICAgICAgY29uZmlndXJlZCBsYXllcnMgYWxvbmcgd2l0aCB0aGVpciBwcmlvcml0aWVzLgogCi0gICBCQkZJTEVTCisgICA6dGVybTpgQkJGSUxFU2AKICAgICAgIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgcmVjaXBlIGZpbGVzIEJpdEJha2UgdXNlcyB0byBidWlsZAogICAgICAgc29mdHdhcmUuCiAKQEAgLTY2NywyMSArNjY3LDIxIEBACiAgICAgICBGb3IgZGV0YWlscyBvbiB0aGUgc3ludGF4LCBzZWUgdGhlIGRvY3VtZW50YXRpb24gYnkgZm9sbG93aW5nIHRoZQogICAgICAgcHJldmlvdXMgbGluay4KIAotICAgQkJJTkNMVURFRAorICAgOnRlcm06YEJCSU5DTFVERURgCiAgICAgICBDb250YWlucyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbCBvZiBhbGwgZmlsZXMgdGhhdCBCaXRCYWtlJ3MKICAgICAgIHBhcnNlciBpbmNsdWRlZCBkdXJpbmcgcGFyc2luZyBvZiB0aGUgY3VycmVudCBmaWxlLgogCi0gICBCQklOQ0xVREVMT0dTCisgICA6dGVybTpgQkJJTkNMVURFTE9HU2AKICAgICAgIElmIHNldCB0byBhIHZhbHVlLCBlbmFibGVzIHByaW50aW5nIHRoZSB0YXNrIGxvZyB3aGVuIHJlcG9ydGluZyBhCiAgICAgICBmYWlsZWQgdGFzay4KIAotICAgQkJJTkNMVURFTE9HU19MSU5FUworICAgOnRlcm06YEJCSU5DTFVERUxPR1NfTElORVNgCiAgICAgICBJZiA6dGVybTpgQkJJTkNMVURFTE9HU2AgaXMgc2V0LCBzcGVjaWZpZXMKICAgICAgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSB0YXNrIGxvZyBmaWxlIHRvIHByaW50IHdoZW4KICAgICAgIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLiBJZiB5b3UgZG8gbm90IHNldCBgYEJCSU5DTFVERUxPR1NfTElORVNgYCwKICAgICAgIHRoZSBlbnRpcmUgbG9nIGlzIHByaW50ZWQuCiAKLSAgIEJCTEFZRVJTCisgICA6dGVybTpgQkJMQVlFUlNgCiAgICAgICBMaXN0cyB0aGUgbGF5ZXJzIHRvIGVuYWJsZSBkdXJpbmcgdGhlIGJ1aWxkLiBUaGlzIHZhcmlhYmxlIGlzIGRlZmluZWQKICAgICAgIGluIHRoZSBgYGJibGF5ZXJzLmNvbmZgYCBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZTogOjoKQEAgLTY5NiwxMiArNjk2LDEyIEBACiAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBmb3VyIGxheWVycywgb25lIG9mIHdoaWNoIGlzIGEgY3VzdG9tLCB1c2VyLWRlZmluZWQKICAgICAgIGxheWVyIG5hbWVkIGBgbWV0YS1teWtlcm5lbGBgLgogCi0gICBCQkxBWUVSU19GRVRDSF9ESVIKKyAgIDp0ZXJtOmBCQkxBWUVSU19GRVRDSF9ESVJgCiAgICAgICBTZXRzIHRoZSBiYXNlIGxvY2F0aW9uIHdoZXJlIGxheWVycyBhcmUgc3RvcmVkLiBUaGlzIHNldHRpbmcgaXMgdXNlZAogICAgICAgaW4gY29uanVuY3Rpb24gd2l0aCBgYGJpdGJha2UtbGF5ZXJzIGxheWVyaW5kZXgtZmV0Y2hgYCBhbmQgdGVsbHMKICAgICAgIGBgYml0YmFrZS1sYXllcnNgYCB3aGVyZSB0byBwbGFjZSB0aGUgZmV0Y2hlZCBsYXllcnMuCiAKLSAgIEJCTUFTSworICAgOnRlcm06YEJCTUFTS2AKICAgICAgIFByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHJlY2lwZXMgYW5kIHJlY2lwZSBhcHBlbmQgZmlsZXMuCiAKICAgICAgIFlvdSBjYW4gdXNlIHRoZSBgYEJCTUFTS2BgIHZhcmlhYmxlIHRvICJoaWRlIiB0aGVzZSBgYC5iYmBgIGFuZApAQCAtNzM3LDcgKzczNyw3IEBACiAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnkgbmFtZSwgdXNlIHRoZSB0cmFpbGluZyBzbGFzaCBjaGFyYWN0ZXIKICAgICAgICAgIHRvIGVuc3VyZSB5b3UgbWF0Y2gganVzdCB0aGF0IGRpcmVjdG9yeSBuYW1lLgogCi0gICBCQk1VTFRJQ09ORklHCisgICA6dGVybTpgQkJNVUxUSUNPTkZJR2AKICAgICAgIEVuYWJsZXMgQml0QmFrZSB0byBwZXJmb3JtIG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gYnVpbGRzIGFuZCBsaXN0cwogICAgICAgZWFjaCBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIChtdWx0aWNvbmZpZykuIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUKICAgICAgIHRvIGNhdXNlIEJpdEJha2UgdG8gYnVpbGQgbXVsdGlwbGUgdGFyZ2V0cyB3aGVyZSBlYWNoIHRhcmdldCBoYXMgYQpAQCAtNzU4LDcgKzc1OCw3IEBACiAgICAgICAiOnJlZjpgYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvOmV4ZWN1dGluZyBhIG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gYnVpbGRgIgogICAgICAgc2VjdGlvbi4KIAotICAgQkJQQVRICisgICA6dGVybTpgQkJQQVRIYAogICAgICAgVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZSBjbGFzcyAoYGAuYmJjbGFzc2BgKSBhbmQgY29uZmlndXJhdGlvbgogICAgICAgKGBgLmNvbmZgYCkgZmlsZXMuIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZSBgYFBBVEhgYAogICAgICAgdmFyaWFibGUuCkBAIC03NzIsMTUgKzc3MiwxNSBAQAogICAgICAgICAgJCBleHBvcnQgQkJQQVRICiAgICAgICAgICAkIGJpdGJha2UgdGFyZ2V0CiAKLSAgIEJCU0VSVkVSCisgICA6dGVybTpgQkJTRVJWRVJgCiAgICAgICBQb2ludHMgdG8gdGhlIHNlcnZlciB0aGF0IHJ1bnMgbWVtb3J5LXJlc2lkZW50IEJpdEJha2UuIFRoZSB2YXJpYWJsZQogICAgICAgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQgQml0QmFrZS4KIAotICAgQkJUQVJHRVRTCisgICA6dGVybTpgQkJUQVJHRVRTYAogICAgICAgQWxsb3dzIHlvdSB0byB1c2UgYSBjb25maWd1cmF0aW9uIGZpbGUgdG8gYWRkIHRvIHRoZSBsaXN0IG9mCiAgICAgICBjb21tYW5kLWxpbmUgdGFyZ2V0IHJlY2lwZXMgeW91IHdhbnQgdG8gYnVpbGQuCiAKLSAgIEJCVkVSU0lPTlMKKyAgIDp0ZXJtOmBCQlZFUlNJT05TYAogICAgICAgQWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIHByb2plY3QgZnJvbSBhCiAgICAgICBzaW5nbGUgcmVjaXBlIGZpbGUuIFlvdSBhbHNvIGFibGUgdG8gc3BlY2lmeSBjb25kaXRpb25hbCBtZXRhZGF0YQogICAgICAgdXNpbmcgdGhlIDp0ZXJtOmBPVkVSUklERVNgIG1lY2hhbmlzbSBmb3IgYQpAQCAtNzkwLDcgKzc5MCw3IEBACiAgICAgICAiOnJlZjpgYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhOnZhcmlhbnRzIC0gY2xhc3MgZXh0ZW5zaW9uIG1lY2hhbmlzbWAiCiAgICAgICBzZWN0aW9uLgogCi0gICBCSVRCQUtFX1VJCisgICA6dGVybTpgQklUQkFLRV9VSWAKICAgICAgIFVzZWQgdG8gc3BlY2lmeSB0aGUgVUkgbW9kdWxlIHRvIHVzZSB3aGVuIHJ1bm5pbmcgQml0QmFrZS4gVXNpbmcgdGhpcwogICAgICAgdmFyaWFibGUgaXMgZXF1aXZhbGVudCB0byB1c2luZyB0aGUgYGAtdWBgIGNvbW1hbmQtbGluZSBvcHRpb24uCiAKQEAgLTc5OSwyMyArNzk5LDIzIEBACiAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW4gb3JkZXIKICAgICAgICAgIGZvciBpdCB0byB3b3JrLgogCi0gICBCVUlMRE5BTUUKKyAgIDp0ZXJtOmBCVUlMRE5BTUVgCiAgICAgICBBIG5hbWUgYXNzaWduZWQgdG8gdGhlIGJ1aWxkLiBUaGUgbmFtZSBkZWZhdWx0cyB0byBhIGRhdGV0aW1lIHN0YW1wCiAgICAgICBvZiB3aGVuIHRoZSBidWlsZCB3YXMgc3RhcnRlZCBidXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIG1ldGFkYXRhLgogCi0gICBCWlJESVIKKyAgIDp0ZXJtOmBCWlJESVJgCiAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IG9mIGEgQmF6YWFyIHN5c3RlbSBhcmUKICAgICAgIHN0b3JlZC4KIAotICAgQ0FDSEUKKyAgIDp0ZXJtOmBDQUNIRWAKICAgICAgIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBhIGNhY2hlIG9mIHRoZSBtZXRhZGF0YQogICAgICAgc28gaXQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJzZWQgZXZlcnkgdGltZSBCaXRCYWtlIGlzIHN0YXJ0ZWQuCiAKLSAgIENWU0RJUgorICAgOnRlcm06YENWU0RJUmAKICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgdW5kZXIgdGhlIENWUyBzeXN0ZW0gYXJlCiAgICAgICBzdG9yZWQuCiAKLSAgIERFRkFVTFRfUFJFRkVSRU5DRQorICAgOnRlcm06YERFRkFVTFRfUFJFRkVSRU5DRWAKICAgICAgIFNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4KIAogICAgICAgVGhlIG1vc3QgY29tbW9uIHVzYWdlIG9mIHRoaXMgaXMgdmFyaWFibGUgaXMgdG8gc2V0IGl0IHRvICItMSIgd2l0aGluCkBAIC04MzAsNyArODMwLDcgQEAKICAgICAgICAgIDp0ZXJtOmBCQkZJTEVfUFJJT1JJVFlgIGlmIHRoYXQgdmFyaWFibGUgaXMgZGlmZmVyZW50IGJldHdlZW4gdHdvCiAgICAgICAgICBsYXllcnMgdGhhdCBjb250YWluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSByZWNpcGUuCiAKLSAgIERFUEVORFMKKyAgIDp0ZXJtOmBERVBFTkRTYAogICAgICAgTGlzdHMgYSByZWNpcGUncyBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGUgZmlsZXMpLgogCiAgICAgICBDb25zaWRlciB0aGlzIHNpbXBsZSBleGFtcGxlIGZvciB0d28gcmVjaXBlcyBuYW1lZCAiYSIgYW5kICJiIiB0aGF0CkBAIC04NDcsMTYgKzg0NywxNiBAQAogICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCBzZWUgdGhlIDp0ZXJtOmBSREVQRU5EU2AKICAgICAgIHZhcmlhYmxlLgogCi0gICBERVNDUklQVElPTgorICAgOnRlcm06YERFU0NSSVBUSU9OYAogICAgICAgQSBsb25nIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVjaXBlLgogCi0gICBETF9ESVIKKyAgIDp0ZXJtOmBETF9ESVJgCiAgICAgICBUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzdG9yZQogICAgICAgZG93bmxvYWRzLiBCeSBkZWZhdWx0LCBgYERMX0RJUmBgIGdldHMgZmlsZXMgc3VpdGFibGUgZm9yIG1pcnJvcmluZyBmb3IKICAgICAgIGV2ZXJ5dGhpbmcgZXhjZXB0IEdpdCByZXBvc2l0b3JpZXMuIElmIHlvdSB3YW50IHRhcmJhbGxzIG9mIEdpdAogICAgICAgcmVwb3NpdG9yaWVzLCB1c2UgdGhlIDp0ZXJtOmBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFNgIHZhcmlhYmxlLgogCi0gICBFWENMVURFX0ZST01fV09STEQKKyAgIDp0ZXJtOmBFWENMVURFX0ZST01fV09STERgCiAgICAgICBEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLgogICAgICAgYGBiaXRiYWtlIHdvcmxkYGApLiBEdXJpbmcgd29ybGQgYnVpbGRzLCBCaXRCYWtlIGxvY2F0ZXMsIHBhcnNlcyBhbmQKICAgICAgIGJ1aWxkcyBhbGwgcmVjaXBlcyBmb3VuZCBpbiBldmVyeSBsYXllciBleHBvc2VkIGluIHRoZQpAQCAtODcyLDY4ICs4NzIsNjggQEAKICAgICAgICAgIHJlY2lwZSB0byBgYEVYQ0xVREVfRlJPTV9XT1JMRGBgIG9ubHkgZW5zdXJlcyB0aGF0IHRoZSByZWNpcGUgaXMgbm90CiAgICAgICAgICBleHBsaWNpdGx5IGFkZGVkIHRvIHRoZSBsaXN0IG9mIGJ1aWxkIHRhcmdldHMgaW4gYSB3b3JsZCBidWlsZC4KIAotICAgRkFLRVJPT1QKKyAgIDp0ZXJtOmBGQUtFUk9PVGAKICAgICAgIENvbnRhaW5zIHRoZSBjb21tYW5kIHRvIHVzZSB3aGVuIHJ1bm5pbmcgYSBzaGVsbCBzY3JpcHQgaW4gYSBmYWtlcm9vdAogICAgICAgZW52aXJvbm1lbnQuIFRoZSBgYEZBS0VST09UYGAgdmFyaWFibGUgaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuCiAgICAgICByZXBsYWNlZCBieSB0aGUgb3RoZXIgYGBGQUtFUk9PVCpgYCB2YXJpYWJsZXMuIFNlZSB0aGVzZSBlbnRyaWVzIGluCiAgICAgICB0aGUgZ2xvc3NhcnkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLSAgIEZBS0VST09UQkFTRUVOVgorICAgOnRlcm06YEZBS0VST09UQkFTRUVOVmAKICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBleGVjdXRpbmcgdGhlIGNvbW1hbmQgZGVmaW5lZAogICAgICAgYnkgOnRlcm06YEZBS0VST09UQ01EYCB0aGF0IHN0YXJ0cyB0aGUKICAgICAgIGJpdGJha2Utd29ya2VyIHByb2Nlc3MgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgogCi0gICBGQUtFUk9PVENNRAorICAgOnRlcm06YEZBS0VST09UQ01EYAogICAgICAgQ29udGFpbnMgdGhlIGNvbW1hbmQgdGhhdCBzdGFydHMgdGhlIGJpdGJha2Utd29ya2VyIHByb2Nlc3MgaW4gdGhlCiAgICAgICBmYWtlcm9vdCBlbnZpcm9ubWVudC4KIAotICAgRkFLRVJPT1RESVJTCisgICA6dGVybTpgRkFLRVJPT1RESVJTYAogICAgICAgTGlzdHMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlIGJlZm9yZSBydW5uaW5nIGEgdGFzayBpbiB0aGUgZmFrZXJvb3QKICAgICAgIGVudmlyb25tZW50LgogCi0gICBGQUtFUk9PVEVOVgorICAgOnRlcm06YEZBS0VST09URU5WYAogICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrIGluIHRoZQogICAgICAgZmFrZXJvb3QgZW52aXJvbm1lbnQuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGVudmlyb25tZW50CiAgICAgICB2YXJpYWJsZXMgYW5kIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudCwgc2VlIHRoZQogICAgICAgOnRlcm06YEZBS0VST09UQkFTRUVOVmAgdmFyaWFibGUuCiAKLSAgIEZBS0VST09UTk9FTlYKKyAgIDp0ZXJtOmBGQUtFUk9PVE5PRU5WYAogICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrIHRoYXQgaXMgbm90IGluCiAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGVudmlyb25tZW50CiAgICAgICB2YXJpYWJsZXMgYW5kIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudCwgc2VlIHRoZQogICAgICAgOnRlcm06YEZBS0VST09URU5WYCB2YXJpYWJsZS4KIAotICAgRkVUQ0hDTUQKKyAgIDp0ZXJtOmBGRVRDSENNRGAKICAgICAgIERlZmluZXMgdGhlIGNvbW1hbmQgdGhlIEJpdEJha2UgZmV0Y2hlciBtb2R1bGUgZXhlY3V0ZXMgd2hlbiBydW5uaW5nCiAgICAgICBmZXRjaCBvcGVyYXRpb25zLiBZb3UgbmVlZCB0byB1c2UgYW4gb3ZlcnJpZGUgc3VmZml4IHdoZW4geW91IHVzZSB0aGUKICAgICAgIHZhcmlhYmxlIChlLmcuIGBgRkVUQ0hDTURfZ2l0YGAgb3IgYGBGRVRDSENNRF9zdm5gYCkuCiAKLSAgIEZJTEUKKyAgIDp0ZXJtOmBGSUxFYAogICAgICAgUG9pbnRzIGF0IHRoZSBjdXJyZW50IGZpbGUuIEJpdEJha2Ugc2V0cyB0aGlzIHZhcmlhYmxlIGR1cmluZyB0aGUKICAgICAgIHBhcnNpbmcgcHJvY2VzcyB0byBpZGVudGlmeSB0aGUgZmlsZSBiZWluZyBwYXJzZWQuIEJpdEJha2UgYWxzbyBzZXRzCiAgICAgICB0aGlzIHZhcmlhYmxlIHdoZW4gYSByZWNpcGUgaXMgYmVpbmcgZXhlY3V0ZWQgdG8gaWRlbnRpZnkgdGhlIHJlY2lwZQogICAgICAgZmlsZS4KIAotICAgRklMRVNQQVRICisgICA6dGVybTpgRklMRVNQQVRIYAogICAgICAgU3BlY2lmaWVzIGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIHNlYXJjaGluZyBmb3IgcGF0Y2hlcyBhbmQKICAgICAgIGZpbGVzLiBUaGUgImxvY2FsIiBmZXRjaGVyIG1vZHVsZSB1c2VzIHRoZXNlIGRpcmVjdG9yaWVzIHdoZW4KICAgICAgIGhhbmRsaW5nIGBgZmlsZTovL2BgIFVSTHMuIFRoZSB2YXJpYWJsZSBiZWhhdmVzIGxpa2UgYSBzaGVsbCBgYFBBVEhgYAogICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUuIFRoZSB2YWx1ZSBpcyBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mCiAgICAgICBkaXJlY3RvcmllcyB0aGF0IGFyZSBzZWFyY2hlZCBsZWZ0LXRvLXJpZ2h0IGluIG9yZGVyLgogCi0gICBHSVRESVIKKyAgIDp0ZXJtOmBHSVRESVJgCiAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGEgbG9jYWwgY29weSBvZiBhIEdpdCByZXBvc2l0b3J5IGlzIHN0b3JlZAogICAgICAgd2hlbiBpdCBpcyBjbG9uZWQuCiAKLSAgIEhHRElSCisgICA6dGVybTpgSEdESVJgCiAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IG9mIGEgTWVyY3VyaWFsIHN5c3RlbSBhcmUKICAgICAgIHN0b3JlZC4KIAotICAgSE9NRVBBR0UKKyAgIDp0ZXJtOmBIT01FUEFHRWAKICAgICAgIFdlYnNpdGUgd2hlcmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcwogICAgICAgYnVpbGRpbmcgY2FuIGJlIGZvdW5kLgogCi0gICBJTkhFUklUCisgICA6dGVybTpgSU5IRVJJVGAKICAgICAgIENhdXNlcyB0aGUgbmFtZWQgY2xhc3Mgb3IgY2xhc3NlcyB0byBiZSBpbmhlcml0ZWQgZ2xvYmFsbHkuIEFub255bW91cwogICAgICAgZnVuY3Rpb25zIGluIHRoZSBjbGFzcyBvciBjbGFzc2VzIGFyZSBub3QgZXhlY3V0ZWQgZm9yIHRoZSBiYXNlCiAgICAgICBjb25maWd1cmF0aW9uIGFuZCBpbiBlYWNoIGluZGl2aWR1YWwgcmVjaXBlLiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkCkBAIC05NDMsNyArOTQzLDcgQEAKICAgICAgICI6cmVmOmBiaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGE6XGBcYGluaGVyaXRcYFxgIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlYCIKICAgICAgIHNlY3Rpb24uCiAKLSAgIExBWUVSREVQRU5EUworICAgOnRlcm06YExBWUVSREVQRU5EU2AKICAgICAgIExpc3RzIHRoZSBsYXllcnMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHVwb24gd2hpY2ggdGhpcyByZWNpcGUKICAgICAgIGRlcGVuZHMuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBhIHNwZWNpZmljIGxheWVyIHZlcnNpb24gZm9yIGEKICAgICAgIGRlcGVuZGVuY3kgYnkgYWRkaW5nIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxheWVyIG5hbWUgd2l0aCBhIGNvbG9uLApAQCAtOTU2LDIwICs5NTYsMjAgQEAKICAgICAgIHVzZSB0aGUgc3BlY2lmaWMgbGF5ZXIgbmFtZSBhcyBhIHN1ZmZpeCB0byB0aGUgdmFyaWFibGUgKGUuZy4KICAgICAgIGBgTEFZRVJERVBFTkRTX215bGF5ZXJgYCkuCiAKLSAgIExBWUVSRElSCisgICA6dGVybTpgTEFZRVJESVJgCiAgICAgICBXaGVuIHVzZWQgaW5zaWRlIHRoZSBgYGxheWVyLmNvbmZgYCBjb25maWd1cmF0aW9uIGZpbGUsIHRoaXMgdmFyaWFibGUKICAgICAgIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLiBUaGlzIHZhcmlhYmxlIGlzIG5vdAogICAgICAgYXZhaWxhYmxlIG91dHNpZGUgb2YgYGBsYXllci5jb25mYGAgYW5kIHJlZmVyZW5jZXMgYXJlIGV4cGFuZGVkCiAgICAgICBpbW1lZGlhdGVseSB3aGVuIHBhcnNpbmcgb2YgdGhlIGZpbGUgY29tcGxldGVzLgogCi0gICBMQVlFUkRJUl9SRQorICAgOnRlcm06YExBWUVSRElSX1JFYAogICAgICAgV2hlbiB1c2VkIGluc2lkZSB0aGUgYGBsYXllci5jb25mYGAgY29uZmlndXJhdGlvbiBmaWxlLCB0aGlzIHZhcmlhYmxlCiAgICAgICBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllciwgZXNjYXBlZCBmb3IgdXNlIGluIGEgcmVndWxhcgogICAgICAgZXhwcmVzc2lvbiAoOnRlcm06YEJCRklMRV9QQVRURVJOYCkuIFRoaXMKICAgICAgIHZhcmlhYmxlIGlzIG5vdCBhdmFpbGFibGUgb3V0c2lkZSBvZiBgYGxheWVyLmNvbmZgYCBhbmQgcmVmZXJlbmNlcwogICAgICAgYXJlIGV4cGFuZGVkIGltbWVkaWF0ZWx5IHdoZW4gcGFyc2luZyBvZiB0aGUgZmlsZSBjb21wbGV0ZXMuCiAKLSAgIExBWUVSVkVSU0lPTgorICAgOnRlcm06YExBWUVSVkVSU0lPTmAKICAgICAgIE9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLiBZb3UKICAgICAgIGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB3aXRoaW4KICAgICAgIDp0ZXJtOmBMQVlFUkRFUEVORFNgIGZvciBhbm90aGVyIGxheWVyIGluCkBAIC05NzksMTAgKzk3OSwxMCBAQAogICAgICAgdXNlIHRoZSBzcGVjaWZpYyBsYXllciBuYW1lIGFzIGEgc3VmZml4IHRvIHRoZSB2YXJpYWJsZSAoZS5nLgogICAgICAgYGBMQVlFUkRFUEVORFNfbXlsYXllcmBgKS4KIAotICAgTElDRU5TRQorICAgOnRlcm06YExJQ0VOU0VgCiAgICAgICBUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuCiAKLSAgIE1JUlJPUlMKKyAgIDp0ZXJtOmBNSVJST1JTYAogICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCBCaXRCYWtlIGdldHMgc291cmNlIGNvZGUuIFdoZW4KICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdCB0cmllcyB0aGUgbG9jYWwKICAgICAgIGRvd25sb2FkIGRpcmVjdG9yeS4gSWYgdGhhdCBsb2NhdGlvbiBmYWlscywgdGhlIGJ1aWxkIHN5c3RlbSB0cmllcwpAQCAtOTkwLDcgKzk5MCw3IEBACiAgICAgICB1cHN0cmVhbSBzb3VyY2UsIGFuZCB0aGVuIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkgYGBNSVJST1JTYGAgaW4gdGhhdAogICAgICAgb3JkZXIuCiAKLSAgIE1VTFRJX1BST1ZJREVSX1dISVRFTElTVAorICAgOnRlcm06YE1VTFRJX1BST1ZJREVSX1dISVRFTElTVGAKICAgICAgIEFsbG93cyB5b3UgdG8gc3VwcHJlc3MgQml0QmFrZSB3YXJuaW5ncyBjYXVzZWQgd2hlbiBidWlsZGluZyB0d28KICAgICAgIHNlcGFyYXRlIHJlY2lwZXMgdGhhdCBwcm92aWRlIHRoZSBzYW1lIG91dHB1dC4KIApAQCAtMTAwMyw3ICsxMDAzLDcgQEAKICAgICAgIFRvIHVzZSB0aGUgdmFyaWFibGUsIGxpc3QgcHJvdmlkZXIgbmFtZXMgKGUuZy4gcmVjaXBlIG5hbWVzLAogICAgICAgYGB2aXJ0dWFsL2tlcm5lbGBgLCBhbmQgc28gZm9ydGgpLgogCi0gICBPVkVSUklERVMKKyAgIDp0ZXJtOmBPVkVSUklERVNgCiAgICAgICBCaXRCYWtlIHVzZXMgYGBPVkVSUklERVNgYCB0byBjb250cm9sIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuCiAgICAgICBhZnRlciBCaXRCYWtlIHBhcnNlcyByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgogCkBAIC0xMDEzLDE0ICsxMDEzLDE0IEBACiAgICAgICAiOnJlZjpgYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhOmNvbmRpdGlvbmFsIHN5bnRheAogICAgICAgKG92ZXJyaWRlcylgIiBzZWN0aW9uLgogCi0gICBQNERJUgorICAgOnRlcm06YFA0RElSYAogICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBhIGxvY2FsIGNvcHkgb2YgYSBQZXJmb3JjZSBkZXBvdCBpcyBzdG9yZWQKICAgICAgIHdoZW4gaXQgaXMgZmV0Y2hlZC4KIAotICAgUEFDS0FHRVMKKyAgIDp0ZXJtOmBQQUNLQUdFU2AKICAgICAgIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHRoZSByZWNpcGUgY3JlYXRlcy4KIAotICAgUEFDS0FHRVNfRFlOQU1JQworICAgOnRlcm06YFBBQ0tBR0VTX0RZTkFNSUNgCiAgICAgICBBIHByb21pc2UgdGhhdCB5b3VyIHJlY2lwZSBzYXRpc2ZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yCiAgICAgICBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuCiAgICAgICBgYFBBQ0tBR0VTX0RZTkFNSUNgYCBkb2VzIG5vdCBhY3R1YWxseSBzYXRpc2Z5IHRoZSBkZXBlbmRlbmNpZXMsIGl0CkBAIC0xMDMwLDI5ICsxMDMwLDI5IEBACiAgICAgICBgYFBBQ0tBR0VTX0RZTkFNSUNgYCB2YXJpYWJsZSwgYnV0IGEgcGFja2FnZSB3aXRoIHRoZSBtb2R1bGUgbmFtZSBpcwogICAgICAgbmV2ZXIgYWN0dWFsbHkgcHJvZHVjZWQsIHRoZW4gdGhlIG90aGVyIHBhY2thZ2Ugd2lsbCBiZSBicm9rZW4uCiAKLSAgIFBFCisgICA6dGVybTpgUEVgCiAgICAgICBUaGUgZXBvY2ggb2YgdGhlIHJlY2lwZS4gQnkgZGVmYXVsdCwgdGhpcyB2YXJpYWJsZSBpcyB1bnNldC4gVGhlCiAgICAgICB2YXJpYWJsZSBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUgdmVyc2lvbmluZyBzY2hlbWUKICAgICAgIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIHdheS4KIAotICAgUEVSU0lTVEVOVF9ESVIKKyAgIDp0ZXJtOmBQRVJTSVNURU5UX0RJUmAKICAgICAgIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBkYXRhIHRoYXQgc2hvdWxkIGJlCiAgICAgICBwcmVzZXJ2ZWQgYmV0d2VlbiBidWlsZHMuIEluIHBhcnRpY3VsYXIsIHRoZSBkYXRhIHN0b3JlZCBpcyB0aGUgZGF0YQogICAgICAgdGhhdCB1c2VzIEJpdEJha2UncyBwZXJzaXN0ZW50IGRhdGEgQVBJIGFuZCB0aGUgZGF0YSB1c2VkIGJ5IHRoZSBQUgogICAgICAgU2VydmVyIGFuZCBQUiBTZXJ2aWNlLgogCi0gICBQRgorICAgOnRlcm06YFBGYAogICAgICAgU3BlY2lmaWVzIHRoZSByZWNpcGUgb3IgcGFja2FnZSBuYW1lIGFuZCBpbmNsdWRlcyBhbGwgdmVyc2lvbiBhbmQKICAgICAgIHJldmlzaW9uIG51bWJlcnMgKGkuZS4gYGBlZ2xpYmMtMi4xMy1yMjArc3ZucjE1NTA4L2BgIGFuZAogICAgICAgYGBiYXNoLTQuMi1yMS9gYCkuCiAKLSAgIFBOCisgICA6dGVybTpgUE5gCiAgICAgICBUaGUgcmVjaXBlIG5hbWUuCiAKLSAgIFBSCisgICA6dGVybTpgUFJgCiAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHJlY2lwZS4KIAotICAgUFJFRkVSUkVEX1BST1ZJREVSCisgICA6dGVybTpgUFJFRkVSUkVEX1BST1ZJREVSYAogICAgICAgRGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2Ugd2hlbiBtdWx0aXBsZQogICAgICAgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGl0ZW0uIFlvdSBzaG91bGQgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUKICAgICAgIHdpdGggdGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVkIGl0ZW0sIGFuZCB5b3Ugc2hvdWxkIHNldCBpdCB0byB0aGUKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAgICAgICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID0gInhzZXJ2ZXIteGY4NiIKICAgICAgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgogCi0gICBQUkVGRVJSRURfUFJPVklERVJTCisgICA6dGVybTpgUFJFRkVSUkVEX1BST1ZJREVSU2AKICAgICAgIERldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlIGZvciBjYXNlcyB3aGVyZQogICAgICAgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGl0ZW0uIEZ1bmN0aW9uYWxseSwKICAgICAgIGBgUFJFRkVSUkVEX1BST1ZJREVSU2BgIGlzIGlkZW50aWNhbCB0bwpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKICAgICAgICAgIFBSRUZFUlJFRF9QUk9WSURFUl94eHggPSAieXl5IgogICAgICAgICAgUFJFRkVSUkVEX1BST1ZJREVSX2FhYSA9ICJiYmIiCiAKLSAgIFBSRUZFUlJFRF9WRVJTSU9OCisgICA6dGVybTpgUFJFRkVSUkVEX1ZFUlNJT05gCiAgICAgICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUKICAgICAgIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiBZb3UgbXVzdCBhbHdheXMKICAgICAgIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUgOnRlcm06YFBOYCB5b3Ugd2FudCB0bwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAKICAgICAgICAgIGVuZCBvZiB0aGUgc3RyaW5nLiBZb3UgY2Fubm90IHVzZSB0aGUgd2lsZGNhcmQgY2hhcmFjdGVyIGluIGFueSBvdGhlcgogICAgICAgICAgbG9jYXRpb24gb2YgdGhlIHN0cmluZy4KIAotICAgUFJFTUlSUk9SUworICAgOnRlcm06YFBSRU1JUlJPUlNgCiAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIEJpdEJha2UgZ2V0cyBzb3VyY2UgY29kZS4gV2hlbgogICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0IHRyaWVzIHRoZSBsb2NhbAogICAgICAgZG93bmxvYWQgZGlyZWN0b3J5LiBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzCkBAIC0xMTIyLDcgKzExMjIsNyBAQAogICAgICAgdXNlIGBgZmlsZTovL2BgIFVSTHMgdG8gcG9pbnQgdG8gbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMKICAgICAgIHdlbGwuCiAKLSAgIFBST1ZJREVTCisgICA6dGVybTpgUFJPVklERVNgCiAgICAgICBBIGxpc3Qgb2YgYWxpYXNlcyBieSB3aGljaCBhIHBhcnRpY3VsYXIgcmVjaXBlIGNhbiBiZSBrbm93bi4gQnkKICAgICAgIGRlZmF1bHQsIGEgcmVjaXBlJ3Mgb3duIGBgUE5gYCBpcyBpbXBsaWNpdGx5IGFscmVhZHkgaW4gaXRzCiAgICAgICBgYFBST1ZJREVTYGAgbGlzdC4gSWYgYSByZWNpcGUgdXNlcyBgYFBST1ZJREVTYGAsIHRoZSBhZGRpdGlvbmFsCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogICAgICAgInZpcnR1YWwvZnVuY3Rpb24iIChlLmcuICJ2aXJ0dWFsL2tlcm5lbCIpLiBUaGUgc2xhc2ggaXMgc2ltcGx5IHBhcnQKICAgICAgIG9mIHRoZSBuYW1lIGFuZCBoYXMgbm8gc3ludGFjdGljYWwgc2lnbmlmaWNhbmNlLgogCi0gICBQUlNFUlZfSE9TVAorICAgOnRlcm06YFBSU0VSVl9IT1NUYAogICAgICAgVGhlIG5ldHdvcmsgYmFzZWQgOnRlcm06YFBSYCBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuCiAKICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0aGUgYGBQUlNFUlZfSE9TVGBgIHZhcmlhYmxlIGlzIHNldDogOjoKQEAgLTExNjIsMTAgKzExNjIsMTAgQEAKICAgICAgIHNlcnZpY2UuIFlvdSBjYW4gc2V0IGBgUFJTRVJWX0hPU1RgYCB0byBvdGhlciB2YWx1ZXMgdG8gdXNlIGEgcmVtb3RlIFBSCiAgICAgICBzZXJ2aWNlLgogCi0gICBQVgorICAgOnRlcm06YFBWYAogICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4KIAotICAgUkRFUEVORFMKKyAgIDp0ZXJtOmBSREVQRU5EU2AKICAgICAgIExpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKSB0aGF0CiAgICAgICBtdXN0IGJlIGluc3RhbGxlZCBpbiBvcmRlciBmb3IgdGhlIGJ1aWx0IHBhY2thZ2UgdG8gcnVuIGNvcnJlY3RseS4gSWYKICAgICAgIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgY2Fubm90IGJlIGZvdW5kIGR1cmluZyB0aGUgYnVpbGQsIHlvdSB3aWxsIGdldApAQCAtMTIwNiwxMSArMTIwNiwxMSBAQAogICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLCBzZWUgdGhlIDp0ZXJtOmBERVBFTkRTYAogICAgICAgdmFyaWFibGUuCiAKLSAgIFJFUE9ESVIKKyAgIDp0ZXJtOmBSRVBPRElSYAogICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBhIGxvY2FsIGNvcHkgb2YgYSBgYGdvb2dsZS1yZXBvYGAgZGlyZWN0b3J5IGlzCiAgICAgICBzdG9yZWQgd2hlbiBpdCBpcyBzeW5jZWQuCiAKLSAgIFJQUk9WSURFUworICAgOnRlcm06YFJQUk9WSURFU2AKICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLiBUaGVzZQogICAgICAgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIG90aGVyCiAgICAgICBwYWNrYWdlcyBib3RoIGR1cmluZyB0aGUgYnVpbGQgYW5kIG9uIHRoZSB0YXJnZXQgKGFzIHNwZWNpZmllZCBieQpAQCAtMTIyMiw3ICsxMjIyLDcgQEAKIAogICAgICAgICAgUlBST1ZJREVTXyR7UE59ID0gIndpZGdldC1hYmktMiIKIAotICAgUlJFQ09NTUVORFMKKyAgIDp0ZXJtOmBSUkVDT01NRU5EU2AKICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UgYmVpbmcKICAgICAgIGJ1aWx0LiBUaGUgcGFja2FnZSBiZWluZyBidWlsdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhpcyBsaXN0IG9mCiAgICAgICBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCBuZWVkcyB0aGVtIGZvciB0aGUKQEAgLTEyNDksMTAgKzEyNDksMTAgQEAKIAogICAgICAgICAgUlJFQ09NTUVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgogCi0gICBTRUNUSU9OCisgICA6dGVybTpgU0VDVElPTmAKICAgICAgIFRoZSBzZWN0aW9uIGluIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBjYXRlZ29yaXplZC4KIAotICAgU1JDX1VSSQorICAgOnRlcm06YFNSQ19VUklgCiAgICAgICBUaGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgLSBsb2NhbCBvciByZW1vdGUuIFRoaXMgdmFyaWFibGUgdGVsbHMKICAgICAgIEJpdEJha2Ugd2hpY2ggYml0cyB0byBwdWxsIGZvciB0aGUgYnVpbGQgYW5kIGhvdyB0byBwdWxsIHRoZW0uIEZvcgogICAgICAgZXhhbXBsZSwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBuZWVkcyB0byBmZXRjaCBhIHNpbmdsZSB0YXJiYWxsCkBAIC0xMzE2LDEyICsxMzE2LDEyIEBACiAgICAgICAtICBgYGRvd25sb2FkZmlsZW5hbWVgYCA6IFNwZWNpZmllcyB0aGUgZmlsZW5hbWUgdXNlZCB3aGVuIHN0b3JpbmcKICAgICAgICAgIHRoZSBkb3dubG9hZGVkIGZpbGUuCiAKLSAgIFNSQ0RBVEUKKyAgIDp0ZXJtOmBTUkNEQVRFYAogICAgICAgVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUKICAgICAgIGFwcGxpZXMgb25seSBpZiB0aGUgc291cmNlIHdhcyBmZXRjaGVkIGZyb20gYSBTb3VyY2UgQ29kZSBNYW5hZ2VyCiAgICAgICAoU0NNKS4KIAotICAgU1JDUkVWCisgICA6dGVybTpgU1JDUkVWYAogICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLiBUaGlzCiAgICAgICB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQKICAgICAgIEJhemFhci4gSWYgeW91IHdhbnQgdG8gYnVpbGQgYSBmaXhlZCByZXZpc2lvbiBhbmQgeW91IHdhbnQgdG8gYXZvaWQKQEAgLTEzMjksNyArMTMyOSw3IEBACiAgICAgICB5b3VyIHJlY2lwZSwgeW91IHNob3VsZCBzcGVjaWZ5IGEgYGBTUkNSRVZgYCB0aGF0IGlzIGEgZnVsbCByZXZpc2lvbgogICAgICAgaWRlbnRpZmllciBhbmQgbm90IGp1c3QgYSB0YWcuCiAKLSAgIFNSQ1JFVl9GT1JNQVQKKyAgIDp0ZXJtOmBTUkNSRVZfRk9STUFUYAogICAgICAgSGVscHMgY29uc3RydWN0IHZhbGlkIDp0ZXJtOmBTUkNSRVZgIHZhbHVlcyB3aGVuCiAgICAgICBtdWx0aXBsZSBzb3VyY2UgY29udHJvbGxlZCBVUkxzIGFyZSB1c2VkIGluCiAgICAgICA6dGVybTpgU1JDX1VSSWAuCkBAIC0xMzQzLDMwICsxMzQzLDMwIEBACiAgICAgICBgYEFVVE9JTkNgYCBwbGFjZWhvbGRlciBpcyBhZGRlZCBhbmQgaWYgbmVlZGVkLiBBbmQsIHRoaXMgcGxhY2Vob2xkZXIKICAgICAgIGlzIHBsYWNlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJldHVybmVkIHN0cmluZy4KIAotICAgU1RBTVAKKyAgIDp0ZXJtOmBTVEFNUGAKICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4gVGhlIHBhdGgKICAgICAgIHRvIGFuIGFjdHVhbCBzdGFtcCBmaWxlIGlzIGNvbnN0cnVjdGVkIGJ5IGV2YWx1YXRpbmcgdGhpcyBzdHJpbmcgYW5kCiAgICAgICB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogCi0gICBTVEFNUENMRUFOCisgICA6dGVybTpgU1RBTVBDTEVBTmAKICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4gVW5saWtlIHRoZQogICAgICAgOnRlcm06YFNUQU1QYCB2YXJpYWJsZSwgYGBTVEFNUENMRUFOYGAgY2FuIGNvbnRhaW4KICAgICAgIHdpbGRjYXJkcyB0byBtYXRjaCB0aGUgcmFuZ2Ugb2YgZmlsZXMgYSBjbGVhbiBvcGVyYXRpb24gc2hvdWxkCiAgICAgICByZW1vdmUuIEJpdEJha2UgdXNlcyBhIGNsZWFuIG9wZXJhdGlvbiB0byByZW1vdmUgYW55IG90aGVyIHN0YW1wcyBpdAogICAgICAgc2hvdWxkIGJlIHJlbW92aW5nIHdoZW4gY3JlYXRpbmcgYSBuZXcgc3RhbXAuCiAKLSAgIFNVTU1BUlkKKyAgIDp0ZXJtOmBTVU1NQVJZYAogICAgICAgQSBzaG9ydCBzdW1tYXJ5IGZvciB0aGUgcmVjaXBlLCB3aGljaCBpcyA3MiBjaGFyYWN0ZXJzIG9yIGxlc3MuCiAKLSAgIFNWTkRJUgorICAgOnRlcm06YFNWTkRJUmAKICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBTdWJ2ZXJzaW9uIHN5c3RlbSBhcmUKICAgICAgIHN0b3JlZC4KIAotICAgVAorICAgOnRlcm06YFRgCiAgICAgICBQb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2VyZSBCaXRCYWtlIHBsYWNlcyB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoCiAgICAgICBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyCiAgICAgICByZWNpcGUuCiAKLSAgIFRPUERJUgorICAgOnRlcm06YFRPUERJUmAKICAgICAgIFBvaW50cyB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LiBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzCiAgICAgICB2YXJpYWJsZS4KZGlmZiAtLWdpdCBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sIGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjliMjQuLjAwMDAwMDAKLS0tIGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTM3ICswLDAgQEAKLTwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKLSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCi1bPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+Ci0KLTwhLS0gRHVtbXkgY2hhcHRlciAtLT4KLTxjaGFwdGVyIGlkPSdyZWYtYmItdmFyaWFibGVzLWdsb3MnPgotCi08dGl0bGU+VmFyaWFibGVzIEdsb3NzYXJ5PC90aXRsZT4KLQotPHBhcmE+Ci0gICAgVGhpcyBjaGFwdGVyIGxpc3RzIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBieSBCaXRCYWtlIGFuZCBnaXZlcyBhbiBvdmVydmlldwotICAgIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBjb250ZW50cy4KLTwvcGFyYT4KLQotPG5vdGU+Ci0gICAgRm9sbG93aW5nIGFyZSBzb21lIHBvaW50cyByZWdhcmRpbmcgdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeToKLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeQotICAgICAgICAgICAgYXJlIHNwZWNpZmljIHRvIEJpdEJha2UuCi0gICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBkZXNjcmlwdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhhdCBjb250ZXh0LgotICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbHNvLCB2YXJpYWJsZXMgZXhpc3QgaW4gb3RoZXIgc3lzdGVtcyB0aGF0IHVzZSBCaXRCYWtlCi0gICAgICAgICAgICAoZS5nLiBUaGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkKSB0aGF0IGhhdmUgbmFtZXMgaWRlbnRpY2FsCi0gICAgICAgICAgICB0byB0aG9zZSBmb3VuZCBpbiB0aGlzIGdsb3NzYXJ5LgotICAgICAgICAgICAgRm9yIHN1Y2ggY2FzZXMsIHRoZSB2YXJpYWJsZXMgaW4gdGhvc2Ugc3lzdGVtcyBleHRlbmQgdGhlCi0gICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2YXJpYWJsZSBhcyBpdCBpcyBkZXNjcmliZWQgaGVyZSBpbgotICAgICAgICAgICAgdGhpcyBnbG9zc2FyeS4KLSAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluYWxseSwgdGhlcmUgYXJlIHZhcmlhYmxlcyBtZW50aW9uZWQgaW4gdGhpcwotICAgICAgICAgICAgZ2xvc3NhcnkgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZSBCaXRCYWtlIGdsb3NzYXJ5LgotICAgICAgICAgICAgVGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB2YXJpYWJsZXMgdXNlZCBpbiBzeXN0ZW1zIHRoYXQgdXNlCi0gICAgICAgICAgICBCaXRCYWtlLgotICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci08L25vdGU+Ci0KLTxnbG9zc2FyeSBpZD0ncmVmLWJiLXZhcmlhYmxlcy1nbG9zc2FyeSc+Ci0KLSAgICA8cGFyYT4KLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQVNTVU1FX1BST1ZJREVEJz5BPC9saW5rPgotICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CJz5CPC9saW5rPgotICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1DQUNIRSc+QzwvbGluaz4KLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItREVGQVVMVF9QUkVGRVJFTkNFJz5EPC9saW5rPgotICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1FWENMVURFX0ZST01fV09STEQnPkU8L2xpbms+Ci0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUZBS0VST09UJz5GPC9saW5rPgotICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1HSVRESVInPkc8L2xpbms+Ci0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUhHRElSJz5IPC9saW5rPgotICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1JTkhFUklUJz5JPC9saW5rPgotPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1qJz5KPC9saW5rPiAtLT4KLTwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtBUkNIJz5LPC9saW5rPiAtLT4KLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItTEFZRVJERVBFTkRTJz5MPC9saW5rPgotICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1NSVJST1JTJz5NPC9saW5rPgotPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1uJz5OPC9saW5rPiAtLT4KLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItT1ZFUlJJREVTJz5PPC9saW5rPgotICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QNERJUic+UDwvbGluaz4KLTwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz5RPC9saW5rPiAtLT4KLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUkRFUEVORFMnPlI8L2xpbms+Ci0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNFQ1RJT04nPlM8L2xpbms+Ci0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVQnPlQ8L2xpbms+Ci08IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9DT05GSUcnPlU8L2xpbms+IC0tPgotPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS12Jz5WPC9saW5rPiAtLT4KLTwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPlc8L2xpbms+IC0tPgotPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS14Jz5YPC9saW5rPiAtLT4KLTwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3NhcnkteSc+WTwvbGluaz4gLS0+Ci08IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXonPlo8L2xpbms+LS0+Ci0gICAgPC9wYXJhPgotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItYmItZ2xvc3NhcnktYSc+PHRpdGxlPkE8L3RpdGxlPgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQVNTVU1FX1BST1ZJREVEJz48Z2xvc3N0ZXJtPkFTU1VNRV9QUk9WSURFRDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBMaXN0cyByZWNpcGUgbmFtZXMKLSAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlcykgQml0QmFrZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBCaXRCYWtlIGFzc3VtZXMgdGhlc2UgcmVjaXBlcyBoYXZlIGFscmVhZHkgYmVlbgotICAgICAgICAgICAgICAgICAgICBidWlsdC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSW4gT3BlbkVtYmVkZGVkLUNvcmUsIDxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBtb3N0bHkgc3BlY2lmaWVzIG5hdGl2ZSB0b29scyB0aGF0IHNob3VsZCBub3QgYmUgYnVpbHQuCi0gICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPiwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgd2hlbiBzcGVjaWZpZWQgYWxsb3dzIGZvciB0aGUgR2l0IGJpbmFyeSBmcm9tIHRoZSBob3N0IHRvCi0gICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgcmF0aGVyIHRoYW4gYnVpbGRpbmcKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICA8L2dsb3NzZGl2PgotCi0KLSAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1iYi1nbG9zc2FyeS1iJz48dGl0bGU+QjwvdGl0bGU+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CJz48Z2xvc3N0ZXJtPkI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBCaXRCYWtlIGV4ZWN1dGVzIGZ1bmN0aW9ucwotICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSByZWNpcGUncyBidWlsZCBwcm9jZXNzLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0FMTE9XRURfTkVUV09SS1MnPjxnbG9zc3Rlcm0+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyCi0gICAgICAgICAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuCi0gICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY29uc2lkZXJhdGlvbnMgc3Vycm91bmRpbmcgdGhpcyB2YXJpYWJsZToKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhvc3QgbGlzdCBpcyBvbmx5IHVzZWQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfTk9fTkVUV09SSyc+PGZpbGVuYW1lPkJCX05PX05FVFdPUks8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlaXRoZXIgbm90IHNldCBvciBzZXQgdG8gIjAiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbWl0ZWQgc3VwcG9ydCBmb3IgdGhlICI8ZmlsZW5hbWU+KjwvZmlsZW5hbWU+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkIGNoYXJhY3RlciBmb3IgbWF0Y2hpbmcgYWdhaW5zdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgaG9zdCBuYW1lcyBleGlzdHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0dGluZyBtYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC5nbnUub3JnPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZ0cC5nbnUub3JnPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb28uZ2l0LmdudS5vcmc8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCX0FMTE9XRURfTkVUV09SS1MgPSAiKi5nbnUub3JnIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+SW1wb3J0YW50PC90aXRsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHVzZSBvZiB0aGUgIjxmaWxlbmFtZT4qPC9maWxlbmFtZT4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBvbmx5IHdvcmtzIGF0IHRoZSBiZWdpbm5pbmcgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBob3N0IG5hbWUgYW5kIGl0IG11c3QgYmUgaXNvbGF0ZWQgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVtYWluZGVyIG9mIHRoZSBob3N0IG5hbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3QgdXNlIHRoZSB3aWxkY2FyZCBjaGFyYWN0ZXIgaW4gYW55Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIGxvY2F0aW9uIG9mIHRoZSBuYW1lIG9yIGNvbWJpbmVkIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyb250IHBhcnQgb2YgdGhlIG5hbWUuPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBleGFtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5mb28uYmFyPC9maWxlbmFtZT4gaXMgc3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSA8ZmlsZW5hbWU+KmFhLmZvby5iYXI8L2ZpbGVuYW1lPiBpcyBub3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlycm9ycyBub3QgaW4gdGhlIGhvc3QgbGlzdCBhcmUgc2tpcHBlZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZWQgaW4gZGVidWcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW1wdHMgdG8gYWNjZXNzIG5ldHdvcmtzIG5vdCBpbiB0aGUgaG9zdCBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2UgYSBmYWlsdXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPkJCX0FMTE9XRURfTkVUV09SS1M8L2ZpbGVuYW1lPiBpbgotICAgICAgICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBpcyB2ZXJ5IHVzZWZ1bC4KLSAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBob3N0IHlvdSB3YW50IHRvIHVzZSB0bwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gdGhlIHNvdXJjZSBjb2RlCi0gICAgICAgICAgICAgICAgICAgIGJlaW5nIGZldGNoZWQgZnJvbSBhbiBhbGxvd2VkIGxvY2F0aW9uIGFuZCBhdm9pZHMgcmFpc2luZwotICAgICAgICAgICAgICAgICAgICBhbiBlcnJvciB3aGVuIGEgaG9zdCB0aGF0IGlzIG5vdCBhbGxvd2VkIGlzIGluIGEKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBmZXRjaGVyIGRvZXMgbm90IGF0dGVtcHQgdG8gdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICBob3N0IGxpc3RlZCBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFmdGVyIGEKLSAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bCBmZXRjaCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IG9jY3Vycy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9DT05TT0xFTE9HJz48Z2xvc3N0ZXJtPkJCX0NPTlNPTEVMT0c8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIGEgbG9nIGZpbGUgaW50byB3aGljaCBCaXRCYWtlJ3MgdXNlcgotICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Ugd3JpdGVzIG91dHB1dCBkdXJpbmcgdGhlIGJ1aWxkLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0NVUlJFTlRUQVNLJz48Z2xvc3N0ZXJtPkJCX0NVUlJFTlRUQVNLPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgotICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBkb2VzIG5vdCBpbmNsdWRlIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fPC9maWxlbmFtZT4gcHJlZml4LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWSc+PGdsb3NzdGVybT5CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFk8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kCi0gICAgICAgICAgICAgICAgICAgIGZpbGUgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgaGFzIG5vCi0gICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZGl0aW9uIG9mdGVuIG9jY3VycyB3aGVuIGxheWVycyBnZXQgb3V0IG9mIHN5bmMKLSAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPm9lLWNvcmU8L2ZpbGVuYW1lPiBidW1wcyBhCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSB2ZXJzaW9uIGFuZCB0aGUgb2xkIHJlY2lwZSBubyBsb25nZXIgZXhpc3RzIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgb3RoZXIgbGF5ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgdG8gdGhlIG5ldyB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgeWV0KS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZmF0YWwgYmVoYXZpb3IgaXMgc2FmZXN0IGJlY2F1c2UgaXQgaXMKLSAgICAgICAgICAgICAgICAgICAgdGhlIHNhbmUgcmVhY3Rpb24gZ2l2ZW4gc29tZXRoaW5nIGlzIG91dCBvZiBzeW5jLgotICAgICAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB3aGVuIHlvdXIgY2hhbmdlcyBhcmUgbm8gbG9uZ2VyCi0gICAgICAgICAgICAgICAgICAgIGJlaW5nIGFwcGxpZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfREVGQVVMVF9UQVNLJz48Z2xvc3N0ZXJtPkJCX0RFRkFVTFRfVEFTSzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXNrIHRvIHVzZSB3aGVuIG5vbmUgaXMgc3BlY2lmaWVkIChlLmcuCi0gICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxmaWxlbmFtZT4tYzwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZSBvcHRpb24pLgotICAgICAgICAgICAgICAgICAgICBUaGUgdGFzayBuYW1lIHNwZWNpZmllZCBzaG91bGQgbm90IGluY2x1ZGUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb188L2ZpbGVuYW1lPiBwcmVmaXguCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfRElTS01PTl9ESVJTJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fRElSUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBNb25pdG9ycyBkaXNrIHNwYWNlIGFuZCBhdmFpbGFibGUgaW5vZGVzIGR1cmluZyB0aGUgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgYW5kIGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgYnVpbGQgYmFzZWQgb24gdGhlc2UKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGlzayBzcGFjZSBtb25pdG9yaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGlzIHZhcmlhYmxlLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCX0RJU0tNT05fRElSUyA9ICImbHQ7YWN0aW9uJmd0OywmbHQ7ZGlyJmd0OywmbHQ7dGhyZXNob2xkJmd0OyBbLi4uXSIKLQotICAgICB3aGVyZToKLQotICAgICAgICAmbHQ7YWN0aW9uJmd0OyBpczoKLSAgICAgICAgICAgQUJPUlQ6ICAgICBJbW1lZGlhdGVseSBhYm9ydCB0aGUgYnVpbGQgd2hlbgotICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KLSAgICAgICAgICAgU1RPUFRBU0tTOiBTdG9wIHRoZSBidWlsZCBhZnRlciB0aGUgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIHRhc2tzIGhhdmUgZmluaXNoZWQgd2hlbgotICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KLSAgICAgICAgICAgV0FSTjogICAgICBJc3N1ZSBhIHdhcm5pbmcgYnV0IGNvbnRpbnVlIHRoZQotICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHdoZW4gYSB0aHJlc2hvbGQgaXMgYnJva2VuLgotICAgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBhcwotICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvbGluaz4gdmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBiZSBkZWZpbmVkLgotCi0gICAgICAgICZsdDtkaXImZ3Q7IGlzOgotICAgICAgICAgICBBbnkgZGlyZWN0b3J5IHlvdSBjaG9vc2UuIFlvdSBjYW4gc3BlY2lmeSBvbmUgb3IKLSAgICAgICAgICAgbW9yZSBkaXJlY3RvcmllcyB0byBtb25pdG9yIGJ5IHNlcGFyYXRpbmcgdGhlCi0gICAgICAgICAgIGdyb3VwaW5ncyB3aXRoIGEgc3BhY2UuICBJZiB0d28gZGlyZWN0b3JpZXMgYXJlCi0gICAgICAgICAgIG9uIHRoZSBzYW1lIGRldmljZSwgb25seSB0aGUgZmlyc3QgZGlyZWN0b3J5Ci0gICAgICAgICAgIGlzIG1vbml0b3JlZC4KLQotICAgICAgICAmbHQ7dGhyZXNob2xkJmd0OyBpczoKLSAgICAgICAgICAgRWl0aGVyIHRoZSBtaW5pbXVtIGF2YWlsYWJsZSBkaXNrIHNwYWNlLAotICAgICAgICAgICB0aGUgbWluaW11bSBudW1iZXIgb2YgZnJlZSBpbm9kZXMsIG9yCi0gICAgICAgICAgIGJvdGguICBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZS4gIFRvCi0gICAgICAgICAgIG9taXQgb25lIG9yIHRoZSBvdGhlciwgc2ltcGx5IG9taXQgdGhlIHZhbHVlLgotICAgICAgICAgICBTcGVjaWZ5IHRoZSB0aHJlc2hvbGQgdXNpbmcgRywgTSwgSyBmb3IgR2J5dGVzLAotICAgICAgICAgICBNYnl0ZXMsIGFuZCBLYnl0ZXMsIHJlc3BlY3RpdmVseS4gSWYgeW91IGRvCi0gICAgICAgICAgIG5vdCBzcGVjaWZ5IEcsIE0sIG9yIEssIEtieXRlcyBpcyBhc3N1bWVkIGJ5Ci0gICAgICAgICAgIGRlZmF1bHQuICBEbyBub3QgdXNlIEdCLCBNQiwgb3IgS0IuCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiQUJPUlQsJHtUTVBESVJ9LDFHLDEwMEsgV0FSTiwke1NTVEFURV9ESVJ9LDFHLDEwMEsiCi0gICAgIEJCX0RJU0tNT05fRElSUyA9ICJTVE9QVEFTS1MsJHtUTVBESVJ9LDFHIgotICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiQUJPUlQsJHtUTVBESVJ9LCwxMDBLIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBleGFtcGxlIHdvcmtzIG9ubHkgaWYgeW91IGFsc28gc2V0Ci0gICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGltbWVkaWF0ZWx5Ci0gICAgICAgICAgICAgICAgICAgIGFib3J0IHdoZW4gZWl0aGVyIHRoZSBkaXNrIHNwYWNlIGluIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPiBkcm9wcwotICAgICAgICAgICAgICAgICAgICBiZWxvdyAxIEdieXRlIG9yIHRoZSBhdmFpbGFibGUgZnJlZSBpbm9kZXMgZHJvcHMgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgMTAwIEtieXRlcy4KLSAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0d28gZGlyZWN0b3JpZXMgYXJlIHByb3ZpZGVkIHdpdGggdGhlIHZhcmlhYmxlLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGFsc28gaXNzdWVzIGEKLSAgICAgICAgICAgICAgICAgICAgd2FybmluZyB3aGVuIHRoZSBkaXNrIHNwYWNlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTU1RBVEVfRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBkcm9wcwotICAgICAgICAgICAgICAgICAgICBiZWxvdyAxIEdieXRlIG9yIHRoZSBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZHJvcHMKLSAgICAgICAgICAgICAgICAgICAgYmVsb3cgMTAwIEtieXRlcy4KLSAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGR1cmluZyBpbnRlcnZhbHMgYXMKLSAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBzdG9wcyB0aGUgYnVpbGQgYWZ0ZXIgYWxsIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgY29tcGxldGUgd2hlbiB0aGUgbWluaW11bSBkaXNrIHNwYWNlCi0gICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+JHtUTVBESVJ9PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGRyb3BzIGJlbG93IDEgR2J5dGUuCi0gICAgICAgICAgICAgICAgICAgIE5vIGRpc2sgbW9uaXRvcmluZyBvY2N1cnMgZm9yIHRoZSBmcmVlIGlub2RlcyBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBleGFtcGxlIGltbWVkaWF0ZWx5IGFib3J0cyB0aGUgYnVpbGQgd2hlbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGluIHRoZSA8ZmlsZW5hbWU+JHtUTVBESVJ9PC9maWxlbmFtZT4gZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGRyb3BzIGJlbG93IDEwMCBLYnl0ZXMuCi0gICAgICAgICAgICAgICAgICAgIE5vIGRpc2sgc3BhY2UgbW9uaXRvcmluZyBmb3IgdGhlIGRpcmVjdG9yeSBpdHNlbGYgb2NjdXJzCi0gICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+PGdsb3NzdGVybT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBkaXNrIHNwYWNlIGFuZCBmcmVlIGlub2RlIHdhcm5pbmcgaW50ZXJ2YWxzLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgIGFsc28gdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfRElTS01PTl9ESVJTJz48ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgaXRzIGFjdGlvbiBhcyAiV0FSTiIuCi0gICAgICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBlYWNoIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgZGlzayBzcGFjZSBvciBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZnVydGhlciByZWR1Y2VzIGJ5Ci0gICAgICAgICAgICAgICAgICAgIHRoZSByZXNwZWN0aXZlIGludGVydmFsLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgeW91IGRvIHVzZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT4gd2l0aAotICAgICAgICAgICAgICAgICAgICB0aGUgIldBUk4iIGFjdGlvbiwgdGhlIGRpc2sgbW9uaXRvcmluZyBpbnRlcnZhbCBkZWZhdWx0cyB0bwotICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgdGhlIHZhcmlhYmxlIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLAotICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBmb3JtOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIiZsdDtkaXNrX3NwYWNlX2ludGVydmFsJmd0OywmbHQ7ZGlza19pbm9kZV9pbnRlcnZhbCZndDsiCi0KLSAgICAgd2hlcmU6Ci0KLSAgICAgICAgJmx0O2Rpc2tfc3BhY2VfaW50ZXJ2YWwmZ3Q7IGlzOgotICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBtZW1vcnkgZXhwcmVzc2VkIGluIGVpdGhlcgotICAgICAgICAgICBHLCBNLCBvciBLIGZvciBHYnl0ZXMsIE1ieXRlcywgb3IgS2J5dGVzLAotICAgICAgICAgICByZXNwZWN0aXZlbHkuIFlvdSBjYW5ub3QgdXNlIEdCLCBNQiwgb3IgS0IuCi0KLSAgICAgICAgJmx0O2Rpc2tfaW5vZGVfaW50ZXJ2YWwmZ3Q7IGlzOgotICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBmcmVlIGlub2RlcyBleHByZXNzZWQgaW4gZWl0aGVyCi0gICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCi0gICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQkJfRElTS01PTl9ESVJTID0gIldBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgotICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICI1ME0sNUsiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGNhdXNlIEJpdEJha2UgdG8KLSAgICAgICAgICAgICAgICAgICAgaXNzdWUgc3Vic2VxdWVudCB3YXJuaW5ncyBlYWNoIHRpbWUgdGhlIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICBkaXNrIHNwYWNlIGZ1cnRoZXIgcmVkdWNlcyBieSA1MCBNYnl0ZXMgb3IgdGhlIG51bWJlcgotICAgICAgICAgICAgICAgICAgICBvZiBmcmVlIGlub2RlcyBmdXJ0aGVyIHJlZHVjZXMgYnkgNSBLYnl0ZXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NTVEFURV9ESVJ9PC9maWxlbmFtZT4gZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHdhcm5pbmdzIGJhc2VkIG9uIHRoZSBpbnRlcnZhbCBvY2N1ciBlYWNoIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgYSByZXNwZWN0aXZlIGludGVydmFsIGlzIHJlYWNoZWQgYmV5b25kIHRoZSBpbml0aWFsIHdhcm5pbmcKLSAgICAgICAgICAgICAgICAgICAgKGkuZS4gMSBHYnl0ZXMgYW5kIDEwMCBLYnl0ZXMpLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0VOVl9XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfRU5WX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGludGVybmFsIHdoaXRlbGlzdCBvZiB2YXJpYWJsZXMgdG8gYWxsb3cKLSAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncwotICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgICAgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBsaXN0IGlzIHVzZWQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9QUkVTRVJWRV9FTlYnPjxmaWxlbmFtZT5CQl9QUkVTRVJWRV9FTlY8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9FTlZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfRU5WX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9FTlZfRVhUUkFXSElURSc+PGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT48L2xpbms+LgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9FTlZfRVhUUkFXSElURSc+PGdsb3NzdGVybT5CQl9FTlZfRVhUUkFXSElURTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYW4gYWRkaXRpb25hbCBzZXQgb2YgdmFyaWFibGVzIHRvIGFsbG93IHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICAgKHdoaXRlbGlzdCkgZnJvbSB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW50byBCaXRCYWtlJ3MKLSAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLgotICAgICAgICAgICAgICAgICAgICBUaGlzIGxpc3Qgb2YgdmFyaWFibGVzIGFyZSBvbiB0b3Agb2YgdGhlIGludGVybmFsIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgc2V0IGluCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9FTlZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfRU5WX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPi4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSc+PGdsb3NzdGVybT5CQl9GRVRDSF9QUkVNSVJST1JPTkxZPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICIxIiwgY2F1c2VzIEJpdEJha2UncyBmZXRjaGVyIG1vZHVsZSB0byBvbmx5Ci0gICAgICAgICAgICAgICAgICAgIHNlYXJjaAotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHdpbGwgbm90IHNlYXJjaCB0aGUgbWFpbgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0ZJTEVOQU1FJz48Z2xvc3N0ZXJtPkJCX0ZJTEVOQU1FPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSBmaWxlbmFtZSBvZiB0aGUgcmVjaXBlIHRoYXQgb3ducyB0aGUgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm15LXJlY2lwZS5iYjwvZmlsZW5hbWU+IGlzCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGluZywgdGhlIDxmaWxlbmFtZT5CQl9GSUxFTkFNRTwvZmlsZW5hbWU+IHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zICIvZm9vL3BhdGgvbXktcmVjaXBlLmJiIi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxnbG9zc3Rlcm0+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIENhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcywgaW5jbHVkaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICBHaXQgbWV0YWRhdGEsIHRvIGJlIHBsYWNlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIEFueW9uZSB3aXNoaW5nIHRvIGNyZWF0ZSBhIHNvdXJjZSBtaXJyb3Igd291bGQgd2FudCB0bwotICAgICAgICAgICAgICAgICAgICBlbmFibGUgdGhpcyB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGNyZWF0aW5nIGFuZCBwbGFjaW5nIHRhcmJhbGxzIG9mCi0gICAgICAgICAgICAgICAgICAgIHRoZSBHaXQgcmVwb3NpdG9yaWVzIGlzIG5vdCB0aGUgZGVmYXVsdCBhY3Rpb24gYnkgQml0QmFrZS4KLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPSAiMSIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0hBU0hDT05GSUdfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkJCX0hBU0hDT05GSUdfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIExpc3RzIHZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIGJhc2UgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSwgd2hpY2ggaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNhY2hlIGNhbgotICAgICAgICAgICAgICAgICAgICBiZSByZXVzZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIE9uZSBvZiB0aGUgd2F5cyBCaXRCYWtlIGRldGVybWluZXMgd2hldGhlciB0byByZS1wYXJzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgbWFpbiBtZXRhZGF0YSBpcyB0aHJvdWdoIGNoZWNrc3VtcyBvZiB0aGUgdmFyaWFibGVzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUgb2YgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBkYXRhLgotICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgdmFyaWFibGVzIHRoYXQgeW91IHR5cGljYWxseSB3YW50IHRvIGV4Y2x1ZGUgd2hlbgotICAgICAgICAgICAgICAgICAgICBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0byByZS1wYXJzZSBhbmQgdGh1cyByZWJ1aWxkIHRoZQotICAgICAgICAgICAgICAgICAgICBjYWNoZS4KLSAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgeW91IHdvdWxkIHVzdWFsbHkgZXhjbHVkZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VElNRTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+REFURTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBhbHdheXMgY2hhbmdpbmcuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBkaWQgbm90IGV4Y2x1ZGUgdGhlbSwgQml0QmFrZSB3b3VsZCBuZXZlciByZXVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgY2FjaGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfSEFTSEJBU0VfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkJCX0hBU0hCQVNFX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBMaXN0cyB2YXJpYWJsZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSBjaGVja3N1bSBhbmQKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBkYXRhLgotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZXMgdGhhdCBhcmUgZXhjbHVkZWQgY2FuIHRoZXJlZm9yZSBjaGFuZ2Ugd2l0aG91dAotICAgICAgICAgICAgICAgICAgICBhZmZlY3RpbmcgdGhlIGNoZWNrc3VtIG1lY2hhbmlzbS4KLSAgICAgICAgICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSB3b3VsZCBiZSB0aGUgdmFyaWFibGUgZm9yIHRoZSBwYXRoIG9mCi0gICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZC4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIG91dHB1dCBzaG91bGQgbm90IChhbmQgdXN1YWxseSBkb2VzIG5vdCkgZGVwZW5kCi0gICAgICAgICAgICAgICAgICAgIG9uIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgd2FzIGJ1aWx0LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0hBU0hDSEVDS19GVU5DVElPTic+PGdsb3NzdGVybT5CQl9IQVNIQ0hFQ0tfRlVOQ1RJT048L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGR1cmluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgInNldHNjZW5lIiBwYXJ0IG9mIHRoZSB0YXNrJ3MgZXhlY3V0aW9uIGluIG9yZGVyIHRvCi0gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlIHRoZSBsaXN0IG9mIHRhc2sgaGFzaGVzLgotICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGlzdCBvZiBzZXRzY2VuZSB0YXNrcyB0aGF0IHNob3VsZAotICAgICAgICAgICAgICAgICAgICBiZSBleGVjdXRlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCBpbiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLCB0aGUgb2JqZWN0aXZlCi0gICAgICAgICAgICAgICAgICAgIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGEgZ2l2ZW4gc2V0c2NlbmUgZnVuY3Rpb24gaXMgbGlrZWx5Ci0gICAgICAgICAgICAgICAgICAgIHRvIHdvcmsgb3Igbm90LgotICAgICAgICAgICAgICAgICAgICBJdCdzIGVhc2llciB0byBjaGVjayB0aGUgbGlzdCBvZiBzZXRzY2VuZSBmdW5jdGlvbnMgaW4KLSAgICAgICAgICAgICAgICAgICAgb25lIHBhc3MgdGhhbiB0byBjYWxsIG1hbnkgaW5kaXZpZHVhbCB0YXNrcy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHJldHVybmVkIGxpc3QgbmVlZCBub3QgYmUgY29tcGxldGVseSBhY2N1cmF0ZS4KLSAgICAgICAgICAgICAgICAgICAgQSBnaXZlbiBzZXRzY2VuZSB0YXNrIGNhbiBzdGlsbCBsYXRlciBmYWlsLgotICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgbW9yZSBhY2N1cmF0ZSB0aGUgZGF0YSByZXR1cm5lZCwgdGhlIG1vcmUKLSAgICAgICAgICAgICAgICAgICAgZWZmaWNpZW50IHRoZSBidWlsZCB3aWxsIGJlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX0lOVkFMSURDT05GJz48Z2xvc3N0ZXJtPkJCX0lOVkFMSURDT05GPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNvbmZpZ1BhcnNlZDwvZmlsZW5hbWU+IGV2ZW50IHRvIHRyaWdnZXIKLSAgICAgICAgICAgICAgICAgICAgcmUtcGFyc2luZyB0aGUgYmFzZSBtZXRhZGF0YSAoaS5lLiBhbGwgdGhlCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZXMpLgotICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkNvbmZpZ1BhcnNlZDwvZmlsZW5hbWU+IGV2ZW50IGNhbiBzZXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHRyaWdnZXIgdGhlIHJlLXBhcnNlLgotICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBiZSBjYXJlZnVsIHRvIGF2b2lkIHJlY3Vyc2l2ZSBsb29wcyB3aXRoIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9MT0dDT05GSUcnPjxnbG9zc3Rlcm0+QkJfTE9HQ09ORklHPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGNvbmZpZyBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHVzZXIKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2luZyBjb25maWd1cmF0aW9uLiBTZWUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ibG9nZ2luZyI+TG9nZ2luZzwvbGluaz4gZm9yIGFkZGl0aW9uYWwKLSAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9MT0dGTVQnPjxnbG9zc3Rlcm0+QkJfTE9HRk1UPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbG9nIGZpbGVzIHNhdmVkIGludG8KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItYmItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCX0xPR0ZNVDwvZmlsZW5hbWU+IHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCBhbmQgdGhlIGxvZyBmaWxlIG5hbWVzIGdldCBjcmVhdGVkIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZm9ybToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBsb2cue3Rhc2t9LntwaWR9Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgbG9nIGZpbGVzIHRvIHRha2UgYSBzcGVjaWZpYyBuYW1lLAotICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX05JQ0VfTEVWRUwnPjxnbG9zc3Rlcm0+QkJfTklDRV9MRVZFTDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBbGxvd3MgQml0QmFrZSB0byBydW4gYXQgYSBzcGVjaWZpYyBwcmlvcml0eQotICAgICAgICAgICAgICAgICAgICAoaS5lLiBuaWNlIGxldmVsKS4KLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtIHBlcm1pc3Npb25zIHVzdWFsbHkgbWVhbiB0aGF0IEJpdEJha2UgY2FuIHJlZHVjZSBpdHMKLSAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgYnV0IG5vdCByYWlzZSBpdCBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgICAgU2VlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9UQVNLX05JQ0VfTEVWRUwnPjxmaWxlbmFtZT5CQl9UQVNLX05JQ0VfTEVWRUw8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfTk9fTkVUV09SSyc+PGdsb3NzdGVybT5CQl9OT19ORVRXT1JLPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIERpc2FibGVzIG5ldHdvcmsgYWNjZXNzIGluIHRoZSBCaXRCYWtlIGZldGNoZXIgbW9kdWxlcy4KLSAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGlzIGFjY2VzcyBkaXNhYmxlZCwgYW55IGNvbW1hbmQgdGhhdCBhdHRlbXB0cyB0bwotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdGhlIG5ldHdvcmsgYmVjb21lcyBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGlzYWJsaW5nIG5ldHdvcmsgYWNjZXNzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgbWlycm9ycywgcnVubmluZyBidWlsZHMgd2hlbiBub3QgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCwKLSAgICAgICAgICAgICAgICAgICAgYW5kIHdoZW4gb3BlcmF0aW5nIGluIGNlcnRhaW4ga2luZHMgb2YgZmlyZXdhbGwKLSAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX05VTUJFUl9USFJFQURTJz48Z2xvc3N0ZXJtPkJCX05VTUJFUl9USFJFQURTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXNrcyBCaXRCYWtlIHNob3VsZCBydW4gaW4gcGFyYWxsZWwKLSAgICAgICAgICAgICAgICAgICAgYXQgYW55IG9uZSB0aW1lLgotICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHN1cHBvcnRzIG11bHRpcGxlIGNvcmVzLAotICAgICAgICAgICAgICAgICAgICBhIGdvb2QgcnVsZSBvZiB0aHVtYiBpcyB0byBzZXQgdGhpcyB2YXJpYWJsZSB0byB0d2ljZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGNvcmVzLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48Z2xvc3N0ZXJtPkJCX05VTUJFUl9QQVJTRV9USFJFQURTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIG51bWJlciBvZiB0aHJlYWRzIEJpdEJha2UgdXNlcyB3aGVuIHBhcnNpbmcuCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBpcyBlcXVhbCB0byB0aGUgbnVtYmVyCi0gICAgICAgICAgICAgICAgICAgIG9mIGNvcmVzIG9uIHRoZSBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfT1JJR0VOVic+PGdsb3NzdGVybT5CQl9PUklHRU5WPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW4KLSAgICAgICAgICAgICAgICAgICAgd2hpY2ggQml0QmFrZSB3YXMgcnVuLgotICAgICAgICAgICAgICAgICAgICBUaGUgY29weSBpcyB0YWtlbiBiZWZvcmUgYW55IHdoaXRlbGlzdGVkIHZhcmlhYmxlIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICBhcmUgZmlsdGVyZWQgaW50byBCaXRCYWtlJ3MgZGF0YXN0b3JlLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIHZhcmlhYmxlIGlzIGEgZGF0YXN0b3JlIG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgcXVlcmllZCB1c2luZyB0aGUgbm9ybWFsIGRhdGFzdG9yZQotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX1BSRVNFUlZFX0VOVic+PGdsb3NzdGVybT5CQl9QUkVTRVJWRV9FTlY8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgd2hpdGVsaXN0aW5nIGFuZCBpbnN0ZWFkIGFsbG93cyBhbGwgdmFyaWFibGVzCi0gICAgICAgICAgICAgICAgICAgIHRocm91Z2ggZnJvbSB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW50byBCaXRCYWtlJ3MKLSAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbAotICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9SVU5GTVQnPjxnbG9zc3Rlcm0+QkJfUlVORk1UPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBzY3JpcHQgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgKGkuZS4gcnVuIGZpbGVzKSBzYXZlZCBpbnRvCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLWJiLVQnPjxmaWxlbmFtZT5UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5CQl9SVU5GTVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICBpcyB1bmRlZmluZWQgYW5kIHRoZSBydW4gZmlsZSBuYW1lcyBnZXQgY3JlYXRlZCB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGZvcm06Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcnVuLnt0YXNrfS57cGlkfQotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGZvcmNlIHJ1biBmaWxlcyB0byB0YWtlIGEgc3BlY2lmaWMgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9SVU5UQVNLJz48Z2xvc3N0ZXJtPkJCX1JVTlRBU0s8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGluY2x1ZGVzIHRoZSAiZG9fIiBwcmVmaXguCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrIGlzCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWc8L2ZpbGVuYW1lPiwgdGhlIHZhbHVlIGlzCi0gICAgICAgICAgICAgICAgICAgICJkb19jb25maWciLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX1NDSEVEVUxFUic+PGdsb3NzdGVybT5CQl9TQ0hFRFVMRVI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU2VsZWN0cyB0aGUgbmFtZSBvZiB0aGUgc2NoZWR1bGVyIHRvIHVzZSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxpbmcgb2YgQml0QmFrZSB0YXNrcy4KLSAgICAgICAgICAgICAgICAgICAgVGhyZWUgb3B0aW9ucyBleGlzdDoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YmFzaWM8L2VtcGhhc2lzPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2ljIGZyYW1ld29yayBmcm9tIHdoaWNoIGV2ZXJ5dGhpbmcgZGVyaXZlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBjYXVzZXMgdGFza3MgdG8gYmUgb3JkZXJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNhbGx5IGFzIHRoZXkgYXJlIHBhcnNlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3BlZWQ8L2VtcGhhc2lzPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZXMgdGFza3MgZmlyc3QgdGhhdCBoYXZlIG1vcmUgdGFza3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgInNwZWVkIiBvcHRpb24gaXMgdGhlIGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNvbXBsZXRpb248L2VtcGhhc2lzPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBzY2hlZHVsZXIgdG8gdHJ5IHRvIGNvbXBsZXRlIGEgZ2l2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgb25jZSBpdHMgYnVpbGQgaGFzIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX1NDSEVEVUxFUlMnPjxnbG9zc3Rlcm0+QkJfU0NIRURVTEVSUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGN1c3RvbSBzY2hlZHVsZXJzIHRvIGltcG9ydC4KLSAgICAgICAgICAgICAgICAgICAgQ3VzdG9tIHNjaGVkdWxlcnMgbmVlZCB0byBiZSBkZXJpdmVkIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SdW5RdWV1ZVNjaGVkdWxlcjwvZmlsZW5hbWU+IGNsYXNzLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gaG93IHRvIHNlbGVjdCBhIHNjaGVkdWxlciwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfU0NIRURVTEVSJz48ZmlsZW5hbWU+QkJfU0NIRURVTEVSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX1NFVFNDRU5FX0RFUFZBTElEJz48Z2xvc3N0ZXJtPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIEJpdEJha2UgY2FsbHMgdGhhdCBkZXRlcm1pbmVzCi0gICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgQml0QmFrZSByZXF1aXJlcyBhIHNldHNjZW5lIGRlcGVuZGVuY3kgdG8gYmUgbWV0LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgYSBzZXRzY2VuZSB0YXNrLCBCaXRCYWtlIG5lZWRzIHRvCi0gICAgICAgICAgICAgICAgICAgIGtub3cgd2hpY2ggZGVwZW5kZW5jaWVzIG9mIHRoYXQgc2V0c2NlbmUgdGFzayBhbHNvIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgdG8gYmUgcnVuLgotICAgICAgICAgICAgICAgICAgICBXaGV0aGVyIGRlcGVuZGVuY2llcyBhbHNvIG5lZWQgdG8gYmUgcnVuIGlzIGhpZ2hseQotICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhlIG1ldGFkYXRhLgotICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUgcmV0dXJucyBhCi0gICAgICAgICAgICAgICAgICAgICJUcnVlIiBvciAiRmFsc2UiIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBkZXBlbmRlbmN5IG5lZWRzCi0gICAgICAgICAgICAgICAgICAgIHRvIGJlIG1ldC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yJz48Z2xvc3N0ZXJtPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGF0IHZlcmlmaWVzIHRoZSBsaXN0IG9mCi0gICAgICAgICAgICAgICAgICAgIHBsYW5uZWQgdGFzayBleGVjdXRpb24gYmVmb3JlIHRoZSBtYWluIHRhc2sgZXhlY3V0aW9uCi0gICAgICAgICAgICAgICAgICAgIGhhcHBlbnMuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBCaXRCYWtlIGhhcyBhIGxpc3Qgb2Ygc2V0c2NlbmUKLSAgICAgICAgICAgICAgICAgICAgdGFza3MgdGhhdCBoYXZlIHJ1biBhbmQgZWl0aGVyIHN1Y2NlZWRlZCBvciBmYWlsZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBhbGxvd3MgZm9yIGEgdGFzayBsaXN0IGNoZWNrIHRvIHNlZSBpZiB0aGV5Ci0gICAgICAgICAgICAgICAgICAgIG1ha2Ugc2Vuc2UuCi0gICAgICAgICAgICAgICAgICAgIEV2ZW4gaWYgQml0QmFrZSB3YXMgcGxhbm5pbmcgdG8gc2tpcCBhIHRhc2ssIHRoZQotICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gY2FuIGZvcmNlIEJpdEJha2UgdG8gcnVuCi0gICAgICAgICAgICAgICAgICAgIHRoZSB0YXNrLCB3aGljaCBpcyBuZWNlc3NhcnkgdW5kZXIgY2VydGFpbiBtZXRhZGF0YQotICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNpcmN1bXN0YW5jZXMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1MnPjxnbG9zc3Rlcm0+QkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1M8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgTGlzdHMgdmFyaWFibGUgZmxhZ3MgKHZhcmZsYWdzKQotICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSBzYWZlbHkgZXhjbHVkZWQgZnJvbSBjaGVja3N1bQotICAgICAgICAgICAgICAgICAgICBhbmQgZGVwZW5kZW5jeSBkYXRhIGZvciBrZXlzIGluIHRoZSBkYXRhc3RvcmUuCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gZ2VuZXJhdGluZyBjaGVja3N1bSBvciBkZXBlbmRlbmN5IGRhdGEgZm9yIGtleXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZSwgdGhlIGZsYWdzIHNldCBhZ2FpbnN0IHRoYXQga2V5IGFyZSBub3JtYWxseQotICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgY2hlY2tzdW0uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHZhcmZsYWdzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2YXJpYWJsZS1mbGFncyc+VmFyaWFibGUgRmxhZ3M8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX1NJR05BVFVSRV9IQU5ETEVSJz48Z2xvc3N0ZXJtPkJCX1NJR05BVFVSRV9IQU5ETEVSPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNpZ25hdHVyZSBoYW5kbGVyIEJpdEJha2UgdXNlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHNpZ25hdHVyZSBoYW5kbGVyIGRlZmluZXMgdGhlIHdheSBzdGFtcCBmaWxlcyBhcmUKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgaGFuZGxlZCwgaWYgYW5kIGhvdyB0aGUgc2lnbmF0dXJlIGlzCi0gICAgICAgICAgICAgICAgICAgIGluY29ycG9yYXRlZCBpbnRvIHRoZSBzdGFtcHMsIGFuZCBob3cgdGhlIHNpZ25hdHVyZQotICAgICAgICAgICAgICAgICAgICBpdHNlbGYgaXMgZ2VuZXJhdGVkLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBIG5ldyBzaWduYXR1cmUgaGFuZGxlciBjYW4gYmUgYWRkZWQgYnkgaW5qZWN0aW5nIGEgY2xhc3MKLSAgICAgICAgICAgICAgICAgICAgZGVyaXZlZCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U2lnbmF0dXJlR2VuZXJhdG9yPC9maWxlbmFtZT4gY2xhc3MgaW50byB0aGUKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIG5hbWVzcGFjZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9TUkNSRVZfUE9MSUNZJz48Z2xvc3N0ZXJtPkJCX1NSQ1JFVl9QT0xJQ1k8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZldGNoZXIgd2hlbiBpdCBpbnRlcmFjdHMgd2l0aAotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29udHJvbCBzeXN0ZW1zIGFuZCBkeW5hbWljIHNvdXJjZSByZXZpc2lvbnMuCi0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkJfU1JDUkVWX1BPTElDWTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCi0gICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aG91dCBhIG5ldHdvcmsuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBjYW4gYmUgc2V0IHVzaW5nIG9uZSBvZiB0d28gcG9saWNpZXM6Ci0gICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNhY2hlPC9lbXBoYXNpcz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldGFpbnMgdGhlIHZhbHVlIHRoZSBzeXN0ZW0gb2J0YWluZWQgcHJldmlvdXNseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsZWFyPC9lbXBoYXNpcz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJpZXMgdGhlIHNvdXJjZSBjb250cm9scyBzeXN0ZW0gZXZlcnkgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgcG9saWN5LCB0aGVyZSBpcyBubyBjYWNoZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgImNsZWFyIiBwb2xpY3kgaXMgdGhlIGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX1NUQU1QX1BPTElDWSc+PGdsb3NzdGVybT5CQl9TVEFNUF9QT0xJQ1k8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbW9kZSB1c2VkIGZvciBob3cgdGltZXN0YW1wcyBvZiBzdGFtcCBmaWxlcwotICAgICAgICAgICAgICAgICAgICBhcmUgY29tcGFyZWQuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyBtb2RlczoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGVyZmlsZTwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lc3RhbXAgY29tcGFyaXNvbnMgYXJlIG9ubHkgbWFkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gdGltZXN0YW1wcyBvZiBhIHNwZWNpZmljIHJlY2lwZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmZ1bGw8L2VtcGhhc2lzPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXN0YW1wIGNvbXBhcmlzb25zIGFyZSBtYWRlIGZvciBhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPndoaXRlbGlzdDwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZGVudGljYWwgdG8gImZ1bGwiIG1vZGUgZXhjZXB0IHRpbWVzdGFtcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25zIGFyZSBtYWRlIGZvciByZWNpcGVzIGxpc3RlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJfU1RBTVBfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfU1RBTVBfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YW1wIHBvbGljaWVzIGFyZSBsYXJnZWx5IG9ic29sZXRlIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2Ygc2V0c2NlbmUgdGFza3MuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9TVEFNUF9XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfU1RBTVBfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIExpc3RzIGZpbGVzIHdob3NlIHN0YW1wIGZpbGUgdGltZXN0YW1wcyBhcmUgY29tcGFyZWQgd2hlbgotICAgICAgICAgICAgICAgICAgICB0aGUgc3RhbXAgcG9saWN5IG1vZGUgaXMgc2V0IHRvICJ3aGl0ZWxpc3QiLgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc3RhbXAgcG9saWNpZXMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLUJCX1NUQU1QX1BPTElDWSc+PGZpbGVuYW1lPkJCX1NUQU1QX1BPTElDWTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9TVFJJQ1RfQ0hFQ0tTVU0nPjxnbG9zc3Rlcm0+QkJfU1RSSUNUX0NIRUNLU1VNPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNldHMgYSBtb3JlIHN0cmljdCBjaGVja3N1bSBtZWNoYW5pc20gZm9yIG5vbi1sb2NhbCBVUkxzLgotICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYSB2YWx1ZSBjYXVzZXMgQml0QmFrZQotICAgICAgICAgICAgICAgICAgICB0byByZXBvcnQgYW4gZXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1sb2NhbCBVUkwKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBkb2VzIG5vdCBoYXZlIGF0IGxlYXN0IG9uZSBjaGVja3N1bSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfVEFTS19JT05JQ0VfTEVWRUwnPjxnbG9zc3Rlcm0+QkJfVEFTS19JT05JQ0VfTEVWRUw8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQWxsb3dzIGFkanVzdG1lbnQgb2YgYSB0YXNrJ3MgSW5wdXQvT3V0cHV0IHByaW9yaXR5LgotICAgICAgICAgICAgICAgICAgICBEdXJpbmcgQXV0b2J1aWxkZXIgdGVzdGluZywgcmFuZG9tIGZhaWx1cmVzIGNhbiBvY2N1cgotICAgICAgICAgICAgICAgICAgICBmb3IgdGFza3MgZHVlIHRvIEkvTyBzdGFydmF0aW9uLgotICAgICAgICAgICAgICAgICAgICBUaGVzZSBmYWlsdXJlcyBvY2N1ciBkdXJpbmcgdmFyaW91cyBRRU1VIHJ1bnRpbWUgdGltZW91dHMuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+QkJfVEFTS19JT05JQ0VfTEVWRUw8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBhZGp1c3QgdGhlIEkvTyBwcmlvcml0eSBvZiB0aGVzZSB0YXNrcy4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHdvcmtzIHNpbWlsYXJseSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9UQVNLX05JQ0VfTEVWRUwnPjxmaWxlbmFtZT5CQl9UQVNLX05JQ0VfTEVWRUw8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGV4Y2VwdCB3aXRoIGEgdGFzaydzIEkvTyBwcmlvcml0aWVzLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBCQl9UQVNLX0lPTklDRV9MRVZFTCA9ICI8cmVwbGFjZWFibGU+Y2xhc3M8L3JlcGxhY2VhYmxlPi48cmVwbGFjZWFibGU+cHJpbzwvcmVwbGFjZWFibGU+IgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIEZvciA8cmVwbGFjZWFibGU+Y2xhc3M8L3JlcGxhY2VhYmxlPiwgdGhlIGRlZmF1bHQgdmFsdWUgaXMKLSAgICAgICAgICAgICAgICAgICAgIjIiLCB3aGljaCBpcyBhIGJlc3QgZWZmb3J0LgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSAiMSIgZm9yIHJlYWx0aW1lIGFuZCAiMyIgZm9yIGlkbGUuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSByZWFsdGltZSwgeW91IG11c3QgaGF2ZSBzdXBlcnVzZXIKLSAgICAgICAgICAgICAgICAgICAgcHJpdmlsZWdlcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIDxyZXBsYWNlYWJsZT5wcmlvPC9yZXBsYWNlYWJsZT4sIHlvdSBjYW4gdXNlIGFueQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSBmcm9tICIwIiwgd2hpY2ggaXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHksIHRvICI3IiwKLSAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGxvd2VzdC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIjQiLgotICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgYW55IHNwZWNpYWwgcHJpdmlsZWdlcyB0byB1c2UgdGhpcyByYW5nZQotICAgICAgICAgICAgICAgICAgICBvZiBwcmlvcml0eSB2YWx1ZXMuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIHlvdXIgSS9PIHByaW9yaXR5IHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdGhlIENvbXBsZXRlbHkgRmFpciBRdWV1aW5nIChDRlEpIFNjaGVkdWxlcgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZm9yIHRoZSBiYWNraW5nIGJsb2NrIGRldmljZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRvIHNlbGVjdCB0aGUgc2NoZWR1bGVyLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT5kZXZpY2U8L3JlcGxhY2VhYmxlPiBpcyB0aGUgZGV2aWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBzZGEsIHNkYiwgYW5kIHNvIGZvcnRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgICQgc3VkbyBzaCAtYyDigJxlY2hvIGNmcSA+IC9zeXMvYmxvY2svPHJlcGxhY2VhYmxlPmRldmljZTwvcmVwbGFjZWFibGU+L3F1ZXUvc2NoZWR1bGVyCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9UQVNLX05JQ0VfTEVWRUwnPjxnbG9zc3Rlcm0+QkJfVEFTS19OSUNFX0xFVkVMPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFsbG93cyBzcGVjaWZpYyB0YXNrcyB0byBjaGFuZ2UgdGhlaXIgcHJpb3JpdHkKLSAgICAgICAgICAgICAgICAgICAgKGkuZS4gbmljZSBsZXZlbCkuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgaW4gY29tYmluYXRpb24gd2l0aCB0YXNrCi0gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0byByYWlzZSBvciBsb3dlciBwcmlvcml0aWVzIG9mIHNwZWNpZmljIHRhc2tzLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdDwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIGF1dG9idWlsZGVyLCBRRU1VIGVtdWxhdGlvbiBpbiBpbWFnZXMgaXMgZ2l2ZW4gYSBoaWdoZXIKLSAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgYXMgY29tcGFyZWQgdG8gYnVpbGQgdGFza3MgdG8gZW5zdXJlIHRoYXQgaW1hZ2VzCi0gICAgICAgICAgICAgICAgICAgIGRvIG5vdCBzdWZmZXIgdGltZW91dHMgb24gbG9hZGVkIHN5c3RlbXMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJfVEFTS0hBU0gnPjxnbG9zc3Rlcm0+QkJfVEFTS0hBU0g8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgV2l0aGluIGFuIGV4ZWN1dGluZyB0YXNrLCB0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBoYXNoCi0gICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXNrIGFzIHJldHVybmVkIGJ5IHRoZSBjdXJyZW50bHkgZW5hYmxlZAotICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgZ2VuZXJhdG9yLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCX1ZFUkJPU0VfTE9HUyc+PGdsb3NzdGVybT5CQl9WRVJCT1NFX0xPR1M8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaG93IHZlcmJvc2UgQml0QmFrZSBpcyBkdXJpbmcgYnVpbGRzLgotICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIHNoZWxsIHNjcmlwdHMgZWNobyBjb21tYW5kcyBhbmQgc2hlbGwgc2NyaXB0IG91dHB1dAotICAgICAgICAgICAgICAgICAgICBhcHBlYXJzIG9uIHN0YW5kYXJkIG91dCAoc3Rkb3V0KS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQl9XT1JLRVJDT05URVhUJz48Z2xvc3N0ZXJtPkJCX1dPUktFUkNPTlRFWFQ8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgZXhlY3V0aW5nIGEgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXRzIHRoaXMgdmFyaWFibGUgdG8gIjEiIHdoZW4gYSB0YXNrIGlzCi0gICAgICAgICAgICAgICAgICAgIGJlaW5nIGV4ZWN1dGVkLgotICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgbm90IHNldCB3aGVuIHRoZSB0YXNrIGlzIGluIHNlcnZlciBjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgIGR1cmluZyBwYXJzaW5nIG9yIGV2ZW50IGhhbmRsaW5nLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJDTEFTU0VYVEVORCc+PGdsb3NzdGVybT5CQkNMQVNTRVhURU5EPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzCi0gICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzb2Z0d2FyZS4KLSAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiB0aGVzZSB2YXJpYW50cyBmb3IgcmVjaXBlcyBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQtQ29yZSBtZXRhZGF0YSBhcmUgIm5hdGl2ZXMiIHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnF1aWx0LW5hdGl2ZTwvZmlsZW5hbWU+LCB3aGljaCBpcyBhIGNvcHkgb2YKLSAgICAgICAgICAgICAgICAgICAgUXVpbHQgYnVpbHQgdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW07ICJjcm9zc2VzIiBzdWNoCi0gICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYSBjb21waWxlcgotICAgICAgICAgICAgICAgICAgICBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUgYnV0IHByb2R1Y2VzIGJpbmFyaWVzCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgcnVuIG9uIHRoZSB0YXJnZXQgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsKLSAgICAgICAgICAgICAgICAgICAgIm5hdGl2ZXNkayIsIHdoaWNoIHRhcmdldHMgdGhlIFNESyBtYWNoaW5lIGluc3RlYWQgb2YKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsgYW5kICJtdWxpdGxpYnMiIGluIHRoZSBmb3JtCi0gICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+bXVsdGlsaWI6PC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXVsdGlsaWJfbmFtZTwvcmVwbGFjZWFibGU+Ii4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVG8gYnVpbGQgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgcmVjaXBlIHdpdGggYSBtaW5pbWFsCi0gICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBjb2RlLCBpdCB1c3VhbGx5IGlzIGFzIHNpbXBsZSBhcyBhZGRpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHlvdXIgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMuCi0gICAgICAgICAgICAgICAgICAgIFRoZSAibmF0aXZlIiB2YXJpYW50cyBhcmUgZnJvbSB0aGUgT3BlbkVtYmVkZGVkLUNvcmUKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKLSAgICAgQkJDTEFTU0VYVEVORCA9KyAibXVsdGlsaWI6PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxseSwgdGhlIDxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSBnZW5lcmF0ZXMgcmVjaXBlIHZhcmlhbnRzIGJ5IHJld3JpdGluZwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzIGFuZCBhcHBseWluZyBvdmVycmlkZXMgc3VjaCBhcwotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9jbGFzcy1uYXRpdmU8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBnZW5lcmF0ZSBhIG5hdGl2ZSB2ZXJzaW9uIG9mIGEgcmVjaXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgYQotICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbiAiZm9vIiBpcyByZXdyaXR0ZW4gdG8gYSA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbiAiZm9vLW5hdGl2ZSIuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbiB3aGVuIHVzaW5nIDxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT4sIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGlzIG9ubHkgcGFyc2VkIG9uY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBQYXJzaW5nIG9uY2UgYWRkcyBzb21lIGxpbWl0YXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBhIGRpZmZlcmVudCBmaWxlIGRlcGVuZGluZyBvbiB0aGUgdmFyaWFudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbmNlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gc3RhdGVtZW50cyBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB3aGVuIHRoZSByZWNpcGUgaXMgcGFyc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCREVCVUcnPjxnbG9zc3Rlcm0+QkJERUJVRzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBCaXRCYWtlIGRlYnVnIG91dHB1dCBsZXZlbCB0byBhIHNwZWNpZmljIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGFzIGluY3JlbWVudGVkIGJ5IHRoZSA8ZmlsZW5hbWU+LUQ8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJGSUxFX0NPTExFQ1RJT05TJz48Z2xvc3N0ZXJtPkJCRklMRV9DT0xMRUNUSU9OUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPkxpc3RzIHRoZSBuYW1lcyBvZiBjb25maWd1cmVkIGxheWVycy4KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgbmFtZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgb3RoZXIgPGZpbGVuYW1lPkJCRklMRV8qPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgotICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIGVhY2ggbGF5ZXIgYXBwZW5kcyBpdHMgbmFtZSB0byB0aGlzIHZhcmlhYmxlIGluIGl0cwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQkZJTEVfUEFUVEVSTic+PGdsb3NzdGVybT5CQkZJTEVfUEFUVEVSTjwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPlZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBpbiBhIHBhcnRpY3VsYXIgbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIG11c3QKLSAgICAgICAgICAgICAgICAgICAgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIgKGUuZy4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRV9QQVRURVJOX2VtZW5sb3c8L2ZpbGVuYW1lPikuPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJGSUxFX1BSSU9SSVRZJz48Z2xvc3N0ZXJtPkJCRklMRV9QUklPUklUWTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPkFzc2lnbnMgdGhlIHByaW9yaXR5IGZvciByZWNpcGUgZmlsZXMgaW4gZWFjaCBsYXllci48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+VGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgc2FtZSByZWNpcGUgYXBwZWFycyBpbgotICAgICAgICAgICAgICAgICAgICBtb3JlIHRoYW4gb25lIGxheWVyLgotICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBwcmlvcml0aXplIGEKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYWdhaW5zdCBvdGhlciBsYXllcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHJlY2lwZSAtIGVmZmVjdGl2ZWx5Ci0gICAgICAgICAgICAgICAgICAgIGxldHRpbmcgeW91IGNvbnRyb2wgdGhlIHByZWNlZGVuY2UgZm9yIHRoZSBtdWx0aXBsZSBsYXllcnMuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBwcmVjZWRlbmNlIGVzdGFibGlzaGVkIHRocm91Z2ggdGhpcyB2YXJpYWJsZSBzdGFuZHMgcmVnYXJkbGVzcyBvZiBhCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSdzIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlKS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgbGF5ZXIgdGhhdCBoYXMgYSByZWNpcGUgd2l0aCBhIGhpZ2hlciA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiB2YWx1ZSBidXQgZm9yCi0gICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gaXMgc2V0IHRvIGhhdmUgYSBsb3dlciBwcmVjZWRlbmNlIHN0aWxsIGhhcyBhCi0gICAgICAgICAgICAgICAgICAgIGxvd2VyIHByZWNlZGVuY2UuPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPkEgbGFyZ2VyIHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIHJlc3VsdHMgaW4gYSBoaWdoZXIKLSAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSA2IGhhcyBhIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gdGhlIHZhbHVlIDUuCi0gICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IGJhc2VkIG9uIGxheWVyCi0gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyAoc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLWJiLUxBWUVSREVQRU5EUyc+TEFZRVJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlIGZvcgotICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBwcmlvcml0eSwgaWYgdW5zcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGF5ZXIgd2l0aCBubyBkZXBlbmRlbmNpZXMsIGlzIHRoZSBsb3dlc3QgZGVmaW5lZCBwcmlvcml0eSArIDEKLSAgICAgICAgICAgICAgICAgICAgKG9yIDEgaWYgbm8gcHJpb3JpdGllcyBhcmUgZGVmaW5lZCkuPC9wYXJhPgotICAgICAgICAgICAgICAgIDx0aXA+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBjb21tYW5kIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBzaG93LWxheWVyczwvZmlsZW5hbWU+IHRvIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgYWxsIGNvbmZpZ3VyZWQgbGF5ZXJzIGFsb25nIHdpdGggdGhlaXIgcHJpb3JpdGllcy4KLSAgICAgICAgICAgICAgICA8L3RpcD4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCRklMRVMnPjxnbG9zc3Rlcm0+QkJGSUxFUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSBmaWxlcyBCaXRCYWtlIHVzZXMgdG8KLSAgICAgICAgICAgICAgICAgICAgYnVpbGQgc29mdHdhcmUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyByZWNpcGUgZmlsZXMsIHlvdSBjYW4gcGF0dGVybiBtYXRjaCB1c2luZwotICAgICAgICAgICAgICAgICAgICBQeXRob24ncwotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2xvYi5odG1sJz48ZmlsZW5hbWU+Z2xvYjwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgc3ludGF4LgotICAgICAgICAgICAgICAgICAgICBGb3IgZGV0YWlscyBvbiB0aGUgc3ludGF4LCBzZWUgdGhlIGRvY3VtZW50YXRpb24gYnkKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHRoZSBwcmV2aW91cyBsaW5rLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRVNfRFlOQU1JQyc+PGdsb3NzdGVybT5CQkZJTEVTX0RZTkFNSUM8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIEJCRklMRVNfRFlOQU1JQ1tkb2NdID0gIkFjdGl2YXRlcyBjb250ZW50IGRlcGVuZGluZyBvbiBwcmVzZW5jZSBvZiBpZGVudGlmaWVkIGxheWVycy4iCi0gICAgICAgICAgICA8L2luZm8+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2YXRlcyBjb250ZW50IGRlcGVuZGluZyBvbiBwcmVzZW5jZSBvZiBpZGVudGlmaWVkIGxheWVycy4KLSAgICAgICAgICAgICAgICAgICAgWW91IGlkZW50aWZ5IHRoZSBsYXllcnMgYnkgdGhlIGNvbGxlY3Rpb25zIHRoYXQgdGhlIGxheWVycwotICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPkJCRklMRVNfRFlOQU1JQzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvCi0gICAgICAgICAgICAgICAgICAgIGF2b2lkIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcyB3aG9zZQotICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGlzIGluIGEgbGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBhdHRlbXB0cyB0byBtb2RpZnkgb3RoZXIgbGF5ZXJzIHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGJ1dCBkb2VzIG5vdCB3YW50IHRvCi0gICAgICAgICAgICAgICAgICAgIGludHJvZHVjZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiB0aG9zZSBvdGhlciBsYXllcnMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSB5b3UgY2FuIHByZWZpeCB0aGUgcnVsZSB3aXRoICIhIiB0byBhZGQgCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzCi0gICAgICAgICAgICAgICAgICAgIGluIGNhc2UgYSBsYXllciBpcyBub3QgcHJlc2VudC4KLSAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgYXZvaWQgaGFyZCBkZXBlbmRlbmN5IG9uIHRob3NlIG90aGVyIGxheWVycy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVNfRFlOQU1JQzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+Y29sbGVjdGlvbl9uYW1lPC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPmZpbGVuYW1lX3BhdHRlcm48L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpZGVudGlmaWVzIHR3byBjb2xsZWN0aW9uIG5hbWVzIGFuZAotICAgICAgICAgICAgICAgICAgICB0d28gZmlsZW5hbWUgcGF0dGVybnM6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJCRklMRVNfRFlOQU1JQyArPSAiXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYW5nLWxheWVyOiR7TEFZRVJESVJ9L2JiYXBwZW5kcy9tZXRhLWNsYW5nLyovKi8qLmJiYXBwZW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlOiR7TEFZRVJESVJ9L2JiYXBwZW5kcy9vcGVuZW1iZWRkZWQtY29yZS9tZXRhLyovKi8qLmJiYXBwZW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBjb2xsZWN0aW9uIG5hbWUgaXMgcHJlZml4ZWQgd2l0aCAiISIgaXQgd2lsbCBhZGQgdGhlIGZpbGUgcGF0dGVybiBpbiBjYXNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSBsYXllciBpcyBhYnNlbnQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJCRklMRVNfRFlOQU1JQyArPSAiXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjbGFuZy1sYXllcjoke0xBWUVSRElSfS9iYWNrZmlsbC9tZXRhLWNsYW5nLyovKi8qLmJiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgc2hvd3MgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IG9jY3VycwotICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGludmFsaWQgZW50cmllcyBhcmUgZm91bmQsIHdoaWNoIGNhdXNlIHBhcnNpbmcgdG8KLSAgICAgICAgICAgICAgICAgICAgYWJvcnQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgICAgICAgICAgICAgICAgRVJST1I6IEJCRklMRVNfRFlOQU1JQyBlbnRyaWVzIG11c3QgYmUgb2YgdGhlIGZvcm0geyF9Jmx0O2NvbGxlY3Rpb24gbmFtZSZndDs6Jmx0O2ZpbGVuYW1lIHBhdHRlcm4mZ3Q7LCBub3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvd29yay9teS1sYXllci9iYmFwcGVuZHMvbWV0YS1zZWN1cml0eS1pc2Fmdy8qLyovKi5iYmFwcGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgL3dvcmsvbXktbGF5ZXIvYmJhcHBlbmRzL29wZW5lbWJlZGRlZC1jb3JlL21ldGEvKi8qLyouYmJhcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCSU5DTFVERUQnPjxnbG9zc3Rlcm0+QkJJTkNMVURFRDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBDb250YWlucyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbCBvZiBhbGwgZmlsZXMgdGhhdAotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlJ3MgcGFyc2VyIGluY2x1ZGVkIGR1cmluZyBwYXJzaW5nIG9mIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJJTkNMVURFTE9HUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIHNldCB0byBhIHZhbHVlLCBlbmFibGVzIHByaW50aW5nIHRoZSB0YXNrIGxvZyB3aGVuCi0gICAgICAgICAgICAgICAgICAgIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUJCSU5DTFVERUxPR1NfTElORVMnPjxnbG9zc3Rlcm0+QkJJTkNMVURFTE9HU19MSU5FUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBJZgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItQkJJTkNMVURFTE9HUyc+PGZpbGVuYW1lPkJCSU5DTFVERUxPR1M8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgaXMgc2V0LCBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgIHRhc2sgbG9nIGZpbGUgdG8gcHJpbnQgd2hlbiByZXBvcnRpbmcgYSBmYWlsZWQgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzZXQgPGZpbGVuYW1lPkJCSU5DTFVERUxPR1NfTElORVM8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgdGhlIGVudGlyZSBsb2cgaXMgcHJpbnRlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQkxBWUVSUyc+PGdsb3NzdGVybT5CQkxBWUVSUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPkxpc3RzIHRoZSBsYXllcnMgdG8gZW5hYmxlIGR1cmluZyB0aGUgYnVpbGQuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCTEFZRVJTID0gIiBcCi0gICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhIFwKLSAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8gXAotICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0by1ic3AgXAotICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS1teWtlcm5lbCBcCi0gICAgICAgIgotCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuYWJsZXMgZm91ciBsYXllcnMsIG9uZSBvZiB3aGljaCBpcyBhIGN1c3RvbSwgdXNlci1kZWZpbmVkIGxheWVyCi0gICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5tZXRhLW15a2VybmVsPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJMQVlFUlNfRkVUQ0hfRElSJz48Z2xvc3N0ZXJtPkJCTEFZRVJTX0ZFVENIX0RJUjwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBiYXNlIGxvY2F0aW9uIHdoZXJlIGxheWVycyBhcmUgc3RvcmVkLgotICAgICAgICAgICAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBsYXllcmluZGV4LWZldGNoPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgIHRlbGxzIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IHdoZXJlIHRvIHBsYWNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSBmZXRjaGVkIGxheWVycy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQk1BU0snPjxnbG9zc3Rlcm0+QkJNQVNLPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHJlY2lwZXMgYW5kIHJlY2lwZQotICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZXMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgdG8gImhpZGUiIHRoZXNlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlnbm9yZXMgYW55IHJlY2lwZSBvciByZWNpcGUgYXBwZW5kIGZpbGVzIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2ggYW55IG9mIHRoZSBleHByZXNzaW9ucy4KLSAgICAgICAgICAgICAgICAgICAgSXQgaXMgYXMgaWYgQml0QmFrZSBkb2VzIG5vdCBzZWUgdGhlbSBhdCBhbGwuCi0gICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgbWF0Y2hpbmcgZmlsZXMgYXJlIG5vdCBwYXJzZWQgb3Igb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgIHVzZWQgYnkgQml0QmFrZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyB5b3UgcHJvdmlkZSBhcmUgcGFzc2VkIHRvIFB5dGhvbidzIHJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBjb21waWxlci4KLSAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgc3ludGF4IGZvbGxvd3MgUHl0aG9uJ3MgUmVndWxhcgotICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIChyZSkgc3ludGF4LgotICAgICAgICAgICAgICAgICAgICBUaGUgZXhwcmVzc2lvbnMgYXJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIGZ1bGwgcGF0aHMgdG8KLSAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4IGluZm9ybWF0aW9uLCBzZWUgUHl0aG9uJ3MKLSAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBhdAotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYSBjb21wbGV0ZSByZWd1bGFyIGV4cHJlc3Npb24KLSAgICAgICAgICAgICAgICAgICAgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZSBhbGwgcmVjaXBlIGFuZCByZWNpcGUgYXBwZW5kCi0gICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS10aS9yZWNpcGVzLW1pc2MvPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy8iCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbWFzayBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgb3IgcmVjaXBlcywKLSAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcmFnbWVudHMuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hc2tzIG91dCBtdWx0aXBsZSBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCByZWNpcGVzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCTUFTSyArPSAiL21ldGEtdGkvcmVjaXBlcy1taXNjLyBtZXRhLXRpL3JlY2lwZXMtdGkvcGFja2FnZWdyb3VwLyIKLSAgICAgQkJNQVNLICs9ICIvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvIgotICAgICBCQk1BU0sgKz0gIi9tZXRhLWZvby8uKi9vcGVubGRhcCIKLSAgICAgQkJNQVNLICs9ICJvcGVuY3YuKlwuYmJhcHBlbmQiCi0gICAgIEJCTUFTSyArPSAibHptYSIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBhIGRpcmVjdG9yeSBuYW1lLCB1c2UgdGhlIHRyYWlsaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBzbGFzaCBjaGFyYWN0ZXIgdG8gZW5zdXJlIHlvdSBtYXRjaCBqdXN0IHRoYXQgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJNVUxUSUNPTkZJRyc+PGdsb3NzdGVybT5CQk1VTFRJQ09ORklHPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgICBCQk1VTFRJQ09ORklHW2RvY10gPSAiRW5hYmxlcyBCaXRCYWtlIHRvIHBlcmZvcm0gbXVsdGlwbGUgY29uZmlndXJhdGlvbiBidWlsZHMgYW5kIGxpc3RzIGVhY2ggc2VwYXJhdGUgY29uZmlndXJhdGlvbiAobXVsdGljb25maWcpLiIKLSAgICAgICAgICAgIDwvaW5mbz4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KLTwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+Ci0gICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgQml0QmFrZSB0byBwZXJmb3JtIG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gYnVpbGRzCi0gICAgICAgICAgICAgICAgICAgIGFuZCBsaXN0cyBlYWNoIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gKG11bHRpY29uZmlnKS4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB0byBjYXVzZSBCaXRCYWtlIHRvIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIHRhcmdldHMgd2hlcmUgZWFjaCB0YXJnZXQgaGFzIGEgc2VwYXJhdGUKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lIDxmaWxlbmFtZT5CQk1VTFRJQ09ORklHPC9maWxlbmFtZT4gaW4geW91cgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGxpbmUgc3BlY2lmaWVzIHRocmVlCi0gICAgICAgICAgICAgICAgICAgIG11bHRpY29uZmlncywgZWFjaCBoYXZpbmcgYSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIGZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQkJNVUxUSUZPTkZJRyA9ICJjb25maWdBIGNvbmZpZ0IgY29uZmlnQyIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBFYWNoIGNvbmZpZ3VyYXRpb24gZmlsZSB5b3UgdXNlIG11c3QgcmVzaWRlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICBidWlsZCBkaXJlY3Rvcnkgd2l0aGluIGEgZGlyZWN0b3J5IG5hbWVkCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL211bHRpY29uZmlnPC9maWxlbmFtZT4gKGUuZy4KLSAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi9jb25mL211bHRpY29uZmlnL2NvbmZpZ0EuY29uZjwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCTVVMVElDT05GSUc8L2ZpbGVuYW1lPiBpbiBhbiBlbnZpcm9ubWVudCB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIGJ1aWxkaW5nIHRhcmdldHMgd2l0aCBtdWx0aXBsZSBjb25maWd1cmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZXhlY3V0aW5nLWEtbXVsdGlwbGUtY29uZmlndXJhdGlvbi1idWlsZCc+RXhlY3V0aW5nIGEgTXVsdGlwbGUgQ29uZmlndXJhdGlvbiBCdWlsZDwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJQQVRIJz48Z2xvc3N0ZXJtPkJCUEFUSDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IEJpdEJha2UgdG8gbG9jYXRlIGNsYXNzCi0gICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgYW5kIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gQml0QmFrZSBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkIGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgYmUgc3VyZSB0byBzZXQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIHRoZQotICAgICAgICAgICAgICAgICAgICBidWlsZCBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgYXMgeW91IHdvdWxkIGFueSBlbnZpcm9ubWVudCB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBydW4gQml0QmFrZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIEJCUEFUSD0iPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgotICAgICAkIGV4cG9ydCBCQlBBVEgKLSAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJTRVJWRVInPjxnbG9zc3Rlcm0+QkJTRVJWRVI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLgotICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CQlRBUkdFVFMnPjxnbG9zc3Rlcm0+QkJUQVJHRVRTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gdXNlIGEgY29uZmlndXJhdGlvbiBmaWxlIHRvIGFkZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgICBvZiBjb21tYW5kLWxpbmUgdGFyZ2V0IHJlY2lwZXMgeW91IHdhbnQgdG8gYnVpbGQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQkJWRVJTSU9OUyc+PGdsb3NzdGVybT5CQlZFUlNJT05TPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFsbG93cyBhIHNpbmdsZSByZWNpcGUgdG8gYnVpbGQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYQotICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGZyb20gYSBzaW5nbGUgcmVjaXBlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIGFibGUgdG8gc3BlY2lmeSBjb25kaXRpb25hbCBtZXRhZGF0YQotICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gZm9yIGEgc2luZ2xlIHZlcnNpb24gb3IgZm9yIGFuIG9wdGlvbmFsbHkgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Ugb2YgdmVyc2lvbnMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5CQlZFUlNJT05TPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhbnRzLWNsYXNzLWV4dGVuc2lvbi1tZWNoYW5pc20nPlZhcmlhbnRzIC0gQ2xhc3MgRXh0ZW5zaW9uIE1lY2hhbmlzbTwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItQklUQkFLRV9VSSc+PGdsb3NzdGVybT5CSVRCQUtFX1VJPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gc3BlY2lmeSB0aGUgVUkgbW9kdWxlIHRvIHVzZSB3aGVuIHJ1bm5pbmcgQml0QmFrZS4KLSAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyB2YXJpYWJsZSBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXU8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CVUlMRE5BTUUnPjxnbG9zc3Rlcm0+QlVJTEROQU1FPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEEgbmFtZSBhc3NpZ25lZCB0byB0aGUgYnVpbGQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIGRlZmF1bHRzIHRvIGEgZGF0ZXRpbWUgc3RhbXAgb2Ygd2hlbiB0aGUgYnVpbGQgd2FzCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgYnV0IGNhbiBiZSBkZWZpbmVkIGJ5IHRoZSBtZXRhZGF0YS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1CWlJESVInPjxnbG9zc3Rlcm0+QlpSRElSPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBCYXphYXIKLSAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgPC9nbG9zc2Rpdj4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LWMnPjx0aXRsZT5DPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUNBQ0hFJz48Z2xvc3N0ZXJtPkNBQ0hFPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBhIGNhY2hlCi0gICAgICAgICAgICAgICAgICAgIG9mIHRoZSBtZXRhZGF0YSBzbyBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcnNlZCBldmVyeQotICAgICAgICAgICAgICAgICAgICB0aW1lIEJpdEJha2UgaXMgc3RhcnRlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1DVlNESVInPjxnbG9zc3Rlcm0+Q1ZTRElSPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgdW5kZXIgdGhlCi0gICAgICAgICAgICAgICAgICAgIENWUyBzeXN0ZW0gYXJlIHN0b3JlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICA8L2dsb3NzZGl2PgotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItYmItZ2xvc3NhcnktZCc+PHRpdGxlPkQ8L3RpdGxlPgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItREVGQVVMVF9QUkVGRVJFTkNFJz48Z2xvc3N0ZXJtPkRFRkFVTFRfUFJFRkVSRU5DRTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB3ZWFrIGJpYXMgZm9yIHJlY2lwZSBzZWxlY3Rpb24gcHJpb3JpdHkuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2Ugb2YgdGhpcyBpcyB2YXJpYWJsZSBpcyB0byBzZXQKLSAgICAgICAgICAgICAgICAgICAgaXQgdG8gIi0xIiB3aXRoaW4gYSByZWNpcGUgZm9yIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBhCi0gICAgICAgICAgICAgICAgICAgIHBpZWNlIG9mIHNvZnR3YXJlLgotICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgdmFyaWFibGUgaW4gdGhpcyB3YXkgY2F1c2VzIHRoZSBzdGFibGUgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHRvIGJ1aWxkIGJ5IGRlZmF1bHQgaW4gdGhlIGFic2VuY2Ugb2YKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QUkVGRVJSRURfVkVSU0lPTic+UFJFRkVSUkVEX1ZFUlNJT048L2xpbms+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCB0byBidWlsZCB0aGUgZGV2ZWxvcG1lbnQgdmVyc2lvbi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBiaWFzIHByb3ZpZGVkIGJ5IDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBpcyB3ZWFrIGFuZCBpcyBvdmVycmlkZGVuIGJ5Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItYmItQkJGSUxFX1BSSU9SSVRZJz5CQkZJTEVfUFJJT1JJVFk8L2xpbms+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGhhdCB2YXJpYWJsZSBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0d28gbGF5ZXJzCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcmVjaXBlLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLURFUEVORFMnPjxnbG9zc3Rlcm0+REVQRU5EUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBMaXN0cyBhIHJlY2lwZSdzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICAgICAgICAgIChpLmUuIG90aGVyIHJlY2lwZSBmaWxlcykuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoaXMgc2ltcGxlIGV4YW1wbGUgZm9yIHR3byByZWNpcGVzIG5hbWVkICJhIiBhbmQKLSAgICAgICAgICAgICAgICAgICAgImIiIHRoYXQgcHJvZHVjZSBzaW1pbGFybHkgbmFtZWQgcGFja2FnZXMuCi0gICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFwcGVhcnMgaW4gdGhlICJhIiByZWNpcGU6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgREVQRU5EUyA9ICJiIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIEhlcmUsIHRoZSBkZXBlbmRlbmN5IGlzIHN1Y2ggdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IHRhc2sgZm9yIHJlY2lwZSAiYSIKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB0YXNrIG9mIHJlY2lwZSAiYiIuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgYW55dGhpbmcgdGhhdCByZWNpcGUgImIiIHB1dHMgaW50byBzeXNyb290Ci0gICAgICAgICAgICAgICAgICAgIGlzIGF2YWlsYWJsZSB3aGVuIHJlY2lwZSAiYSIgaXMgY29uZmlndXJpbmcgaXRzZWxmLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVudGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItREVTQ1JJUFRJT04nPjxnbG9zc3Rlcm0+REVTQ1JJUFRJT048L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQSBsb25nIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLURMX0RJUic+PGdsb3NzdGVybT5ETF9ESVI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8KLSAgICAgICAgICAgICAgICAgICAgc3RvcmUgZG93bmxvYWRzLgotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gZ2V0cyBmaWxlcwotICAgICAgICAgICAgICAgICAgICBzdWl0YWJsZSBmb3IgbWlycm9yaW5nIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBHaXQKLSAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLgotICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0YXJiYWxscyBvZiBHaXQgcmVwb3NpdG9yaWVzLCB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLQotICAgICAgICA8L2dsb3NzZW50cnk+Ci0gICAgPC9nbG9zc2Rpdj4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LWUnPjx0aXRsZT5FPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUVYQ0xVREVfRlJPTV9XT1JMRCc+PGdsb3NzdGVybT5FWENMVURFX0ZST01fV09STEQ8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0cyBCaXRCYWtlIHRvIGV4Y2x1ZGUgYSByZWNpcGUgZnJvbSB3b3JsZCBidWlsZHMgKGkuZS4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2Ugd29ybGQ8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgIER1cmluZyB3b3JsZCBidWlsZHMsIEJpdEJha2UgbG9jYXRlcywgcGFyc2VzIGFuZCBidWlsZHMgYWxsCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgZm91bmQgaW4gZXZlcnkgbGF5ZXIgZXhwb3NlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRvIGV4Y2x1ZGUgYSByZWNpcGUgZnJvbSBhIHdvcmxkIGJ1aWxkIHVzaW5nIHRoaXMgdmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgIHNldCB0aGUgdmFyaWFibGUgdG8gIjEiIGluIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgYWRkZWQgdG8gPGZpbGVuYW1lPkVYQ0xVREVfRlJPTV9XT1JMRDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIG1heSBzdGlsbCBiZSBidWlsdCBkdXJpbmcgYSB3b3JsZCBidWlsZCBpbiBvcmRlciB0byBzYXRpc2Z5Ci0gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzLgotICAgICAgICAgICAgICAgICAgICBBZGRpbmcgYSByZWNpcGUgdG8gPGZpbGVuYW1lPkVYQ0xVREVfRlJPTV9XT1JMRDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIG9ubHkgZW5zdXJlcyB0aGF0IHRoZSByZWNpcGUgaXMgbm90IGV4cGxpY2l0bHkgYWRkZWQKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGxpc3Qgb2YgYnVpbGQgdGFyZ2V0cyBpbiBhIHdvcmxkIGJ1aWxkLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgIDwvZ2xvc3NkaXY+Ci0KLSAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1iYi1nbG9zc2FyeS1mJz48dGl0bGU+RjwvdGl0bGU+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1GQUtFUk9PVCc+PGdsb3NzdGVybT5GQUtFUk9PVDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIGNvbW1hbmQgdG8gdXNlIHdoZW4gcnVubmluZyBhIHNoZWxsIHNjcmlwdAotICAgICAgICAgICAgICAgICAgICAgaW4gYSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RkFLRVJPT1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBvYnNvbGV0ZQotICAgICAgICAgICAgICAgICAgICAgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBvdGhlcgotICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZBS0VST09UKjwvZmlsZW5hbWU+IHZhcmlhYmxlcy4KLSAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGVzZSBlbnRyaWVzIGluIHRoZSBnbG9zc2FyeSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1GQUtFUk9PVEJBU0VFTlYnPjxnbG9zc3Rlcm0+RkFLRVJPT1RCQVNFRU5WPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICBMaXN0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gZXhlY3V0aW5nCi0gICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBkZWZpbmVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRkFLRVJPT1RDTUQnPjxmaWxlbmFtZT5GQUtFUk9PVENNRDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgdGhhdCBzdGFydHMgdGhlIGJpdGJha2Utd29ya2VyIHByb2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1GQUtFUk9PVENNRCc+PGdsb3NzdGVybT5GQUtFUk9PVENNRDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIGNvbW1hbmQgdGhhdCBzdGFydHMgdGhlIGJpdGJha2Utd29ya2VyCi0gICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGluIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1GQUtFUk9PVERJUlMnPjxnbG9zc3Rlcm0+RkFLRVJPT1RESVJTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICBMaXN0cyBkaXJlY3RvcmllcyB0byBjcmVhdGUgYmVmb3JlIHJ1bm5pbmcgYSB0YXNrIGluCi0gICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItRkFLRVJPT1RFTlYnPjxnbG9zc3Rlcm0+RkFLRVJPT1RFTlY8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBydW5uaW5nIGEgdGFzawotICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgotICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZAotICAgICAgICAgICAgICAgICAgICAgdGhlIGZha2Vyb290IGVudmlyb25tZW50LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRkFLRVJPT1RCQVNFRU5WJz48ZmlsZW5hbWU+RkFLRVJPT1RCQVNFRU5WPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1GQUtFUk9PVE5PRU5WJz48Z2xvc3N0ZXJtPkZBS0VST09UTk9FTlY8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBydW5uaW5nIGEgdGFzawotICAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgotICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZAotICAgICAgICAgICAgICAgICAgICAgdGhlIGZha2Vyb290IGVudmlyb25tZW50LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRkFLRVJPT1RFTlYnPjxmaWxlbmFtZT5GQUtFUk9PVEVOVjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItRkVUQ0hDTUQnPjxnbG9zc3Rlcm0+RkVUQ0hDTUQ8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgY29tbWFuZCB0aGUgQml0QmFrZSBmZXRjaGVyIG1vZHVsZQotICAgICAgICAgICAgICAgICAgICBleGVjdXRlcyB3aGVuIHJ1bm5pbmcgZmV0Y2ggb3BlcmF0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gdXNlIGFuIG92ZXJyaWRlIHN1ZmZpeCB3aGVuIHlvdSB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIChlLmcuIDxmaWxlbmFtZT5GRVRDSENNRF9naXQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+RkVUQ0hDTURfc3ZuPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUZJTEUnPjxnbG9zc3Rlcm0+RklMRTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBQb2ludHMgYXQgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXRzIHRoaXMgdmFyaWFibGUgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgdG8gaWRlbnRpZnkgdGhlIGZpbGUgYmVpbmcgcGFyc2VkLgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGFsc28gc2V0cyB0aGlzIHZhcmlhYmxlIHdoZW4gYSByZWNpcGUgaXMgYmVpbmcKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgdG8gaWRlbnRpZnkgdGhlIHJlY2lwZSBmaWxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUZJTEVTUEFUSCc+PGdsb3NzdGVybT5GSUxFU1BBVEg8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIHNlYXJjaGluZyBmb3IKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgIFRoZSAibG9jYWwiIGZldGNoZXIgbW9kdWxlIHVzZXMgdGhlc2UgZGlyZWN0b3JpZXMgd2hlbgotICAgICAgICAgICAgICAgICAgICBoYW5kbGluZyA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMuCi0gICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBiZWhhdmVzIGxpa2UgYSBzaGVsbCA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGFyZSBzZWFyY2hlZCBsZWZ0LXRvLXJpZ2h0IGluIG9yZGVyLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgIDwvZ2xvc3NkaXY+Ci0KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LWcnPjx0aXRsZT5HPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUdJVERJUic+PGdsb3NzdGVybT5HSVRESVI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeQotICAgICAgICAgICAgICAgICAgICBpcyBzdG9yZWQgd2hlbiBpdCBpcyBjbG9uZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgPC9nbG9zc2Rpdj4KLQotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItYmItZ2xvc3NhcnktaCc+PHRpdGxlPkg8L3RpdGxlPgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItSEdESVInPjxnbG9zc3Rlcm0+SEdESVI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIE1lcmN1cmlhbAotICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1IT01FUEFHRSc+PGdsb3NzdGVybT5IT01FUEFHRTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPldlYnNpdGUgd2hlcmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcyBidWlsZGluZwotICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZm91bmQuPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgPC9nbG9zc2Rpdj4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LWknPjx0aXRsZT5JPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUlOSEVSSVQnPjxnbG9zc3Rlcm0+SU5IRVJJVDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIG5hbWVkIGNsYXNzIG9yIGNsYXNzZXMgdG8gYmUgaW5oZXJpdGVkIGdsb2JhbGx5LgotICAgICAgICAgICAgICAgICAgICBBbm9ueW1vdXMgZnVuY3Rpb25zIGluIHRoZSBjbGFzcyBvciBjbGFzc2VzCi0gICAgICAgICAgICAgICAgICAgIGFyZSBub3QgZXhlY3V0ZWQgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICBiYXNlIGNvbmZpZ3VyYXRpb24gYW5kIGluIGVhY2ggaW5kaXZpZHVhbCByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlnbm9yZXMgY2hhbmdlcyB0bwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IGluIGluZGl2aWR1YWwgcmVjaXBlcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiwgc2VlCi0gICAgICAgICAgICAgICAgICAgIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0iaW5oZXJpdC1jb25maWd1cmF0aW9uLWRpcmVjdGl2ZSI+PGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiBDb25maWd1cmF0aW9uIERpcmVjdGl2ZTwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgPC9nbG9zc2Rpdj4KLQotPCEtLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWonPjx0aXRsZT5KPC90aXRsZT4KLSAgICA8L2dsb3NzZGl2PgotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktayc+PHRpdGxlPks8L3RpdGxlPgotICAgIDwvZ2xvc3NkaXY+Ci0tLT4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LWwnPjx0aXRsZT5MPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUxBWUVSREVQRU5EUyc+PGdsb3NzdGVybT5MQVlFUkRFUEVORFM8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT5MaXN0cyB0aGUgbGF5ZXJzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB1cG9uIHdoaWNoIHRoaXMgcmVjaXBlIGRlcGVuZHMuCi0gICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBhIHNwZWNpZmljIGxheWVyIHZlcnNpb24gZm9yIGEgZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGF5ZXIgbmFtZSB3aXRoIGEgY29sb24sIChlLmcuICJhbm90aGVybGF5ZXI6MyIKLSAgICAgICAgICAgICAgICAgICAgdG8gYmUgY29tcGFyZWQgYWdhaW5zdAotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItTEFZRVJWRVJTSU9OJz48ZmlsZW5hbWU+TEFZRVJWRVJTSU9OPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPl9hbm90aGVybGF5ZXI8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UpLgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHByb2R1Y2VzIGFuIGVycm9yIGlmIGFueSBkZXBlbmRlbmN5IGlzIG1pc3Npbmcgb3IKLSAgICAgICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gbnVtYmVycyBkbyBub3QgbWF0Y2ggZXhhY3RseSAoaWYgc3BlY2lmaWVkKS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gdXNlIHRoZSBzcGVjaWZpYyBsYXllciBuYW1lIGFzIGEgc3VmZml4Ci0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSB2YXJpYWJsZSAoZS5nLiA8ZmlsZW5hbWU+TEFZRVJERVBFTkRTX215bGF5ZXI8L2ZpbGVuYW1lPikuPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItTEFZRVJESVInPjxnbG9zc3Rlcm0+TEFZRVJESVI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHVzZWQgaW5zaWRlIHRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgb2YgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBhbmQgcmVmZXJlbmNlcyBhcmUgZXhwYW5kZWQgaW1tZWRpYXRlbHkgd2hlbiBwYXJzaW5nIG9mIHRoZSBmaWxlIGNvbXBsZXRlcy48L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1MQVlFUkRJUl9SRSc+PGdsb3NzdGVybT5MQVlFUkRJUl9SRTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdXNlZCBpbnNpZGUgdGhlIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBmaWxlLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLAotICAgICAgICAgICAgICAgICAgICBlc2NhcGVkIGZvciB1c2UgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24KLSAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1CQkZJTEVfUEFUVEVSTic+PGZpbGVuYW1lPkJCRklMRV9QQVRURVJOPC9maWxlbmFtZT48L2xpbms+KS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgb2YgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBhbmQgcmVmZXJlbmNlcyBhcmUgZXhwYW5kZWQgaW1tZWRpYXRlbHkgd2hlbiBwYXJzaW5nIG9mIHRoZSBmaWxlIGNvbXBsZXRlcy48L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1MQVlFUlZFUlNJT04nPjxnbG9zc3Rlcm0+TEFZRVJWRVJTSU9OPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+T3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgd2l0aGluCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1MQVlFUkRFUEVORFMnPjxmaWxlbmFtZT5MQVlFUkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgZm9yIGFub3RoZXIgbGF5ZXIgaW4gb3JkZXIgdG8gZGVwZW5kIG9uIGEgc3BlY2lmaWMgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbGF5ZXIuPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoaXMgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHVzZSB0aGUgc3BlY2lmaWMgbGF5ZXIgbmFtZSBhcyBhIHN1ZmZpeAotICAgICAgICAgICAgICAgICAgICB0byB0aGUgdmFyaWFibGUgKGUuZy4gPGZpbGVuYW1lPkxBWUVSREVQRU5EU19teWxheWVyPC9maWxlbmFtZT4pLjwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLUxJQ0VOU0UnPjxnbG9zc3Rlcm0+TElDRU5TRTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgPC9nbG9zc2Rpdj4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LW0nPjx0aXRsZT5NPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLU1JUlJPUlMnPjxnbG9zc3Rlcm0+TUlSUk9SUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIEJpdEJha2UgZ2V0cyBzb3VyY2UgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgYnVpbGQgc3lzdGVtIHNlYXJjaGVzIGZvciBzb3VyY2UgY29kZSwgaXQgZmlyc3QKLSAgICAgICAgICAgICAgICAgICAgdHJpZXMgdGhlIGxvY2FsIGRvd25sb2FkIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgSWYgdGhhdCBsb2NhdGlvbiBmYWlscywgdGhlIGJ1aWxkIHN5c3RlbSB0cmllcyBsb2NhdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSBzb3VyY2UsIGFuZCB0aGVuIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPiBpbiB0aGF0IG9yZGVyLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLU1VTFRJX1BST1ZJREVSX1dISVRFTElTVCc+PGdsb3NzdGVybT5NVUxUSV9QUk9WSURFUl9XSElURUxJU1Q8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHlvdSB0byBzdXBwcmVzcyBCaXRCYWtlIHdhcm5pbmdzIGNhdXNlZCB3aGVuCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHR3byBzZXBhcmF0ZSByZWNpcGVzIHRoYXQgcHJvdmlkZSB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugbm9ybWFsbHkgaXNzdWVzIGEgd2FybmluZyB3aGVuIGJ1aWxkaW5nIHR3bwotICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgcmVjaXBlcyB3aGVyZSBlYWNoIHByb3ZpZGVzIHRoZSBzYW1lIG91dHB1dC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBzY2VuYXJpbyBpcyB1c3VhbGx5IHNvbWV0aGluZyB0aGUgdXNlciBkb2VzIG5vdAotICAgICAgICAgICAgICAgICAgICB3YW50LgotICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBjYXNlcyBkbyBleGlzdCB3aGVyZSBpdCBtYWtlcyBzZW5zZSwgcGFydGljdWxhcmx5Ci0gICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+dmlydHVhbC8qPC9maWxlbmFtZT4gbmFtZXNwYWNlLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIHN1cHByZXNzIEJpdEJha2UncyB3YXJuaW5ncy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSB2YXJpYWJsZSwgbGlzdCBwcm92aWRlciBuYW1lcyAoZS5nLgotICAgICAgICAgICAgICAgICAgICByZWNpcGUgbmFtZXMsIDxmaWxlbmFtZT52aXJ0dWFsL2tlcm5lbDwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgIDwvZ2xvc3NkaXY+Ci0KLTwhLS0KLSAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1uJz48dGl0bGU+TjwvdGl0bGU+Ci0gICAgPC9nbG9zc2Rpdj4KLS0tPgotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItYmItZ2xvc3Nhcnktbyc+PHRpdGxlPk88L3RpdGxlPgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPk9WRVJSSURFUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IHRvIGNvbnRyb2wKLSAgICAgICAgICAgICAgICAgICAgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZSBwYXJzZXMKLSAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgc2ltcGxlIGV4YW1wbGUgdGhhdCB1c2VzIGFuIG92ZXJyaWRlcwotICAgICAgICAgICAgICAgICAgICBsaXN0IGJhc2VkIG9uIG1hY2hpbmUgYXJjaGl0ZWN0dXJlczoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBPVkVSUklERVMgPSAiYXJtOng4NjptaXBzOnBvd2VycGMiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IGluIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZGl0aW9uYWwtc3ludGF4LW92ZXJyaWRlcyc+Q29uZGl0aW9uYWwgU3ludGF4IChPdmVycmlkZXMpPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0gICAgPC9nbG9zc2Rpdj4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LXAnPjx0aXRsZT5QPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVA0RElSJz48Z2xvc3N0ZXJtPlA0RElSPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggYSBsb2NhbCBjb3B5IG9mIGEgUGVyZm9yY2UgZGVwb3QKLSAgICAgICAgICAgICAgICAgICAgaXMgc3RvcmVkIHdoZW4gaXQgaXMgZmV0Y2hlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1QQUNLQUdFUyc+PGdsb3NzdGVybT5QQUNLQUdFUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBsaXN0IG9mIHBhY2thZ2VzIHRoZSByZWNpcGUgY3JlYXRlcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1QQUNLQUdFU19EWU5BTUlDJz48Z2xvc3N0ZXJtPlBBQ0tBR0VTX0RZTkFNSUM8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICAgICAgICAgIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWN0dWFsbHkgc2F0aXNmeSB0aGUgZGVwZW5kZW5jaWVzLCBpdCBvbmx5IHN0YXRlcyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIGJlIHNhdGlzZmllZC4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgaGFyZCwgcnVudGltZSBkZXBlbmRlbmN5Ci0gICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItYmItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKLSAgICAgICAgICAgICAgICAgICAgb2YgYW5vdGhlciBwYWNrYWdlIGlzIHNhdGlzZmllZCBkdXJpbmcgdGhlIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGJ1dCBhIHBhY2thZ2Ugd2l0aCB0aGUgbW9kdWxlIG5hbWUgaXMgbmV2ZXIgYWN0dWFsbHkKLSAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQsIHRoZW4gdGhlIG90aGVyIHBhY2thZ2Ugd2lsbCBiZSBicm9rZW4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItUEUnPjxnbG9zc3Rlcm0+UEU8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIG9mIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgdW5zZXQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUKLSAgICAgICAgICAgICAgICAgICAgd2F5LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVBFUlNJU1RFTlRfRElSJz48Z2xvc3N0ZXJtPlBFUlNJU1RFTlRfRElSPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBkYXRhIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGJ1aWxkcy4KLSAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIGRhdGEgc3RvcmVkIGlzIHRoZSBkYXRhIHRoYXQgdXNlcwotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlJ3MgcGVyc2lzdGVudCBkYXRhIEFQSSBhbmQgdGhlIGRhdGEgdXNlZCBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgUFIgU2VydmVyIGFuZCBQUiBTZXJ2aWNlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVBGJz48Z2xvc3N0ZXJtPlBGPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uCi0gICAgICAgICAgICAgICAgICAgIG51bWJlcnMgKGkuZS4gPGZpbGVuYW1lPmVnbGliYy0yLjEzLXIyMCtzdm5yMTU1MDgvPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLTQuMi1yMS88L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItUE4nPjxnbG9zc3Rlcm0+UE48L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT5UaGUgcmVjaXBlIG5hbWUuPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItUFInPjxnbG9zc3Rlcm0+UFI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT5UaGUgcmV2aXNpb24gb2YgdGhlIHJlY2lwZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItUFJFRkVSUkVEX1BST1ZJREVSJz48Z2xvc3N0ZXJtPlBSRUZFUlJFRF9QUk9WSURFUjwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZSB3aGVuCi0gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSB0aGUgc2FtZSBpdGVtLgotICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyBzdWZmaXggdGhlIHZhcmlhYmxlIHdpdGggdGhlIG5hbWUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGl0ZW0sIGFuZCB5b3Ugc2hvdWxkIHNldCBpdCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB0byB3aGljaCB5b3Ugd2FudCB0byBnaXZlIHByZWNlZGVuY2UuCi0gICAgICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXM6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKLSAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA9ICJ4c2VydmVyLXhmODYiCi0gICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItUFJFRkVSUkVEX1BST1ZJREVSUyc+PGdsb3NzdGVybT5QUkVGRVJSRURfUFJPVklERVJTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlIGZvcgotICAgICAgICAgICAgICAgICAgICBjYXNlcyB3aGVyZSBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgaXRlbS4KLSAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGx5LAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSUzwvZmlsZW5hbWU+IGlzIGlkZW50aWNhbCB0bwotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUFJFRkVSUkVEX1BST1ZJREVSJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+LgotICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUlM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBsZXRzIHlvdSBkZWZpbmUgcHJlZmVyZW5jZXMgZm9yIG11bHRpcGxlCi0gICAgICAgICAgICAgICAgICAgIHNpdHVhdGlvbnMgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFBSRUZFUlJFRF9QUk9WSURFUlMgPSAieHh4Onl5eSBhYWE6YmJiIC4uLiIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBUaGlzIGZvcm0gaXMgYSBjb252ZW5pZW50IHJlcGxhY2VtZW50IGZvciB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFBSRUZFUlJFRF9QUk9WSURFUl94eHggPSAieXl5IgotICAgICBQUkVGRVJSRURfUFJPVklERVJfYWFhID0gImJiYiIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVBSRUZFUlJFRF9WRVJTSU9OJz48Z2xvc3N0ZXJtPlBSRUZFUlJFRF9WRVJTSU9OPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiByZWNpcGVzIGF2YWlsYWJsZSwgdGhpcwotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4KLSAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gc2VsZWN0LCBhbmQgeW91IHNob3VsZCBzZXQKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nbHkgZm9yIHByZWNlZGVuY2UuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJFRkVSUkVEX1ZFUlNJT048L2ZpbGVuYW1lPiB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyBsaW1pdGVkIHdpbGRjYXJkIHVzZSB0aHJvdWdoIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPiU8L2ZpbGVuYW1lPiIgY2hhcmFjdGVyLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY2hhcmFjdGVyIHRvIG1hdGNoIGFueSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlIHVzZWZ1bCB3aGVuIHNwZWNpZnlpbmcgdmVyc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIGxvbmcgcmV2aXNpb24gbnVtYmVycyB0aGF0IHBvdGVudGlhbGx5IGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIyLjcuMyIKLSAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiNC4xMiUiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPkltcG9ydGFudDwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgdXNlIG9mIHRoZSAiPGZpbGVuYW1lPiU8L2ZpbGVuYW1lPiIgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBpcyBsaW1pdGVkIGluIHRoYXQgaXQgb25seSB3b3JrcyBhdCB0aGUgZW5kIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCB1c2UgdGhlIHdpbGRjYXJkIGNoYXJhY3RlciBpbiBhbnkgb3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIG9mIHRoZSBzdHJpbmcuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1QUkVNSVJST1JTJz48Z2xvc3N0ZXJtPlBSRU1JUlJPUlM8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCBCaXRCYWtlIGdldHMgc291cmNlIGNvZGUuCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCi0gICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlIHVwc3RyZWFtCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgYWRkIGEgc3BlY2lmaWMgc2VydmVyIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGF0dGVtcHQgYmVmb3JlIGFueSBvdGhlcnMgYnkgYWRkaW5nCi0gICAgICAgICAgICAgICAgICAgIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8geW91ciBjb25maWd1cmF0aW9uOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFBSRU1JUlJPUlNfcHJlcGVuZCA9ICJcCi0gICAgIGdpdDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgIGZ0cDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCi0gICAgIGh0dHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAotICAgICBodHRwczovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBUaGVzZSBjaGFuZ2VzIGNhdXNlIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW50ZXJjZXB0Ci0gICAgICAgICAgICAgICAgICAgIEdpdCwgRlRQLCBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvCi0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IHNvdXJjZXMgbWlycm9yLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMgdG8gcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgdG8gbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1QUk9WSURFUyc+PGdsb3NzdGVybT5QUk9WSURFUzwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgYWxpYXNlcyBieSB3aGljaCBhIHBhcnRpY3VsYXIgcmVjaXBlIGNhbiBiZQotICAgICAgICAgICAgICAgICAgICBrbm93bi4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYSByZWNpcGUncyBvd24KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1QTic+UE48L2xpbms+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgaXMgaW1wbGljaXRseSBhbHJlYWR5IGluIGl0cyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBsaXN0LgotICAgICAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSB1c2VzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LCB0aGUKLSAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBhbGlhc2VzIGFyZSBzeW5vbnltcyBmb3IgdGhlIHJlY2lwZSBhbmQgY2FuCi0gICAgICAgICAgICAgICAgICAgIGJlIHVzZWZ1bCBzYXRpc2Z5aW5nIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzIGR1cmluZwotICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItYmItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCBmcm9tIGEgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgIGZpbGUgPGZpbGVuYW1lPmxpYmF2XzAuOC4xMS5iYjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFBST1ZJREVTICs9ICJsaWJwb3N0cHJvYyIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gc3RhdGVtZW50IHJlc3VsdHMgaW4KLSAgICAgICAgICAgICAgICAgICAgdGhlICJsaWJhdiIgcmVjaXBlIGFsc28gYmVpbmcga25vd24gYXMgImxpYnBvc3Rwcm9jIi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIHJlY2lwZXMgdW5kZXIgYWx0ZXJuYXRlIG5hbWVzLAotICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbWVjaGFuaXNtIGlzIGFsc28gdXNlZAotICAgICAgICAgICAgICAgICAgICB0byBpbXBsZW1lbnQgdmlydHVhbCB0YXJnZXRzLgotICAgICAgICAgICAgICAgICAgICBBIHZpcnR1YWwgdGFyZ2V0IGlzIGEgbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHNvbWUKLSAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IChlLmcuIGEgTGludXgga2VybmVsKS4KLSAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyB0aGF0IHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gcXVlc3Rpb24gbGlzdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbCB0YXJnZXQgaW4gPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgdGhhdCBkZXBlbmQgb24gdGhlIGZ1bmN0aW9uYWxpdHkgaW4gcXVlc3Rpb24gY2FuCi0gICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIHZpcnR1YWwgdGFyZ2V0IGluCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB0byBsZWF2ZSB0aGUgY2hvaWNlIG9mIHByb3ZpZGVyIG9wZW4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIENvbnZlbnRpb25hbGx5LCB2aXJ0dWFsIHRhcmdldHMgaGF2ZSBuYW1lcyBvbiB0aGUgZm9ybQotICAgICAgICAgICAgICAgICAgICAidmlydHVhbC9mdW5jdGlvbiIgKGUuZy4gInZpcnR1YWwva2VybmVsIikuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBzbGFzaCBpcyBzaW1wbHkgcGFydCBvZiB0aGUgbmFtZSBhbmQgaGFzIG5vCi0gICAgICAgICAgICAgICAgICAgIHN5bnRhY3RpY2FsIHNpZ25pZmljYW5jZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1QUlNFUlZfSE9TVCc+PGdsb3NzdGVybT5QUlNFUlZfSE9TVDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgbmV0d29yayBiYXNlZAotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0aGUgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKLSAgICAgICAgICAgICAgICAgICAgc2V0OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUgdmFyaWFibGUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseQotICAgICAgICAgICAgICAgICAgICBzdGFydCBhIGxvY2FsIFBSIHNlcnZpY2UuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IDxmaWxlbmFtZT5QUlNFUlZfSE9TVDwvZmlsZW5hbWU+IHRvIG90aGVyCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlcyB0byB1c2UgYSByZW1vdGUgUFIgc2VydmljZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1QVic+PGdsb3NzdGVybT5QVjwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgIDwvZ2xvc3NkaXY+Ci0KLTwhLS0KLSAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1xJz48dGl0bGU+UTwvdGl0bGU+Ci0gICAgPC9nbG9zc2Rpdj4KLS0tPgotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItYmItZ2xvc3Nhcnktcic+PHRpdGxlPlI8L3RpdGxlPgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItUkRFUEVORFMnPjxnbG9zc3Rlcm0+UkRFUEVORFM8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBidWlsdCBwYWNrYWdlIHRvIHJ1bgotICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCi0gICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgY2Fubm90IGJlIGZvdW5kIGR1cmluZyB0aGUgYnVpbGQsCi0gICAgICAgICAgICAgICAgICAgIHlvdSB3aWxsIGdldCBhIGJ1aWxkIGVycm9yLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcHBsaWVzCi0gICAgICAgICAgICAgICAgICAgIHRvIHBhY2thZ2VzIGJlaW5nIGJ1aWx0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB3aXRoIGFuIGF0dGFjaGVkIHBhY2thZ2UgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBSREVQRU5EU18ke1BOfS1kZXYgKz0gInBlcmwiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBkZXZlbG9wbWVudCBwYWNrYWdlIGRlcGVuZHMgb24KLSAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KLSAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgbmFtZSBhcyBwYXJ0IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIHZlcnNpb25lZCBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCi0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBSREVQRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgID0KLSAgICAgJmx0OwotICAgICAmZ3Q7Ci0gICAgICZsdDs9Ci0gICAgICZndDs9Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIGRlcGVuZGVuY3kgb24gdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgUkRFUEVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZC10aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItUkVQT0RJUic+PGdsb3NzdGVybT5SRVBPRElSPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggYSBsb2NhbCBjb3B5IG9mIGEKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdvb2dsZS1yZXBvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIHN0b3JlZAotICAgICAgICAgICAgICAgICAgICB3aGVuIGl0IGlzIHN5bmNlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1SUFJPVklERVMnPjxnbG9zc3Rlcm0+UlBST1ZJREVTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLgotICAgICAgICAgICAgICAgICAgICBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAgICAgICAgICAgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgIChhcyBzcGVjaWZpZWQgYnkKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICBBcyB3aXRoIGFsbCBwYWNrYWdlLWNvbnRyb2xsaW5nIHZhcmlhYmxlcywgeW91IG11c3QgYWx3YXlzCi0gICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2YXJpYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlLgotICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFJQUk9WSURFU18ke1BOfSA9ICJ3aWRnZXQtYWJpLTIiCi0gICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVJSRUNPTU1FTkRTJz48Z2xvc3N0ZXJtPlJSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGlzIGxpc3Qgb2YKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGJ1aWxkLCBidXQgbmVlZHMgdGhlbSBmb3IKLSAgICAgICAgICAgICAgICAgICAgdGhlIGV4dGVuZGVkIHVzYWJpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSBydW50aW1lIGRlcGVuZGVuY2llcyBmb3IgcGFja2FnZXMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgc3BlY2lmeWluZyB2ZXJzaW9uZWQgcmVjb21tZW5kcy4KLSAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgotICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFJSRUNPTU1FTkRTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4gKDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4pIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+b3BlcmF0b3I8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5IHRoZQotICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgPQotICAgICAmbHQ7Ci0gICAgICZndDsKLSAgICAgJmx0Oz0KLSAgICAgJmd0Oz0KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgcmVjb21tZW5kIG9uIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgMS4yIG9yIGdyZWF0ZXIgb2YgdGhlIHBhY2thZ2UgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFJSRUNPTU1FTkRTXyR7UE59ID0gImZvbyAoPj0gMS4yKSIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgIDwvZ2xvc3NkaXY+Ci0KLSAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1iYi1nbG9zc2FyeS1zJz48dGl0bGU+UzwvdGl0bGU+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1TRUNUSU9OJz48Z2xvc3N0ZXJtPlNFQ1RJT048L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT5UaGUgc2VjdGlvbiBpbiB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQuPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItU1JDX1VSSSc+PGdsb3NzdGVybT5TUkNfVVJJPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0ZWxscyBCaXRCYWtlIHdoaWNoIGJpdHMKLSAgICAgICAgICAgICAgICAgICAgdG8gcHVsbCBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBuZWVkcyB0bwotICAgICAgICAgICAgICAgICAgICBmZXRjaCBhIHNpbmdsZSB0YXJiYWxsIGZyb20gdGhlIEludGVybmV0LCB0aGUgcmVjaXBlIG9yCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlIHVzZXMgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5IHRoYXQgc3BlY2lmaWVzIHRoYXQgdGFyYmFsbC4KLSAgICAgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgbmVlZHMgdG8KLSAgICAgICAgICAgICAgICAgICAgZmV0Y2ggYSB0YXJiYWxsIGFuZCBpbmNsdWRlIGEgY3VzdG9tIGZpbGUsIHRoZSByZWNpcGUgb3IKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUgbmVlZHMgYW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICB0aGF0IHNwZWNpZmllcyBhbGwgdGhvc2Ugc291cmNlcy48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBsaXN0IGV4cGxhaW5zIHRoZSBhdmFpbGFibGUgVVJJIHByb3RvY29sczoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZXRjaGVzIGZpbGVzLCB3aGljaCBhcmUgdXN1YWxseSBmaWxlcyBzaGlwcGVkIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ienI6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXphYXIgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbSBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm9zYzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBPU0MgKE9wZW5TVVNFIEJ1aWxkIHNlcnZpY2UpIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJlcG86Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSByZXBvIChHaXQpIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJbnRlcm5ldCB1c2luZyBIVFRQLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aHR0cHM6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIEludGVybmV0IHVzaW5nIEhUVFBTLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZnRwOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBJbnRlcm5ldCB1c2luZyBGVFAuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5jdnM6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBDVlMgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aGc6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBNZXJjdXJpYWwgKDxmaWxlbmFtZT5oZzwvZmlsZW5hbWU+KSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wNDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFBlcmZvcmNlICg8ZmlsZW5hbWU+cDQ8L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3NoOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2VjdXJlIHNoZWxsLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3ZuOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgU3VidmVyc2lvbiAoPGZpbGVuYW1lPnN2bjwvZmlsZW5hbWU+KSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgb3B0aW9ucyB3b3J0aCBtZW50aW9uaW5nOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IENvbnRyb2xzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdG8gdW5wYWNrIHRoZSBmaWxlIGlmIGl0IGlzIGFuIGFyY2hpdmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHVucGFjayB0aGUgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN1YmRpcjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBQbGFjZXMgdGhlIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZXh0cmFjdHMgaXRzIGNvbnRlbnRzKSBpbnRvIHRoZSBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciB1bnVzdWFsIHRhcmJhbGxzIG9yIG90aGVyIGFyY2hpdmVzIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgaGF2ZSB0aGVpciBmaWxlcyBhbHJlYWR5IGluIGEgc3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgYXJjaGl2ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHRvIGJlIHVzZWQgZm9yIGFzc29jaWF0aW9uIHdpdGggPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBjaGVja3N1bXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgZmlsZSBzcGVjaWZpZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvd25sb2FkZmlsZW5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVuYW1lIHVzZWQgd2hlbiBzdG9yaW5nIHRoZSBkb3dubG9hZGVkIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVNSQ0RBVEUnPjxnbG9zc3Rlcm0+U1JDREFURTwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1TUkNSRVYnPjxnbG9zc3Rlcm0+U1JDUkVWPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQgQmF6YWFyLgotICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBidWlsZCBhIGZpeGVkIHJldmlzaW9uIGFuZCB5b3Ugd2FudAotICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBwZXJmb3JtaW5nIGEgcXVlcnkgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5IGV2ZXJ5IHRpbWUKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgeW91ciByZWNpcGUsIHlvdSBzaG91bGQgc3BlY2lmeSBhIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiB0aGF0IGlzIGEKLSAgICAgICAgICAgICAgICAgICAgZnVsbCByZXZpc2lvbiBpZGVudGlmaWVyIGFuZCBub3QganVzdCBhIHRhZy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1iYi1TUkNSRVZfRk9STUFUJz48Z2xvc3N0ZXJtPlNSQ1JFVl9GT1JNQVQ8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSGVscHMgY29uc3RydWN0IHZhbGlkCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1iYi1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHdoZW4gbXVsdGlwbGUgc291cmNlIGNvbnRyb2xsZWQgVVJMcyBhcmUgdXNlZCBpbgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItYmItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBzeXN0ZW0gbmVlZHMgaGVscCBjb25zdHJ1Y3RpbmcgdGhlc2UgdmFsdWVzIHVuZGVyIHRoZXNlCi0gICAgICAgICAgICAgICAgICAgIGNpcmN1bXN0YW5jZXMuCi0gICAgICAgICAgICAgICAgICAgIEVhY2ggY29tcG9uZW50IGluIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGlzIGFzc2lnbmVkIGEgbmFtZSBhbmQgdGhlc2UgYXJlIHJlZmVyZW5jZWQKLSAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5TUkNSRVZfRk9STUFUPC9maWxlbmFtZT4gdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIGFuIGV4YW1wbGUgd2l0aCBVUkxzIG5hbWVkICJtYWNoaW5lIiBhbmQgIm1ldGEiLgotICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIDxmaWxlbmFtZT5TUkNSRVZfRk9STUFUPC9maWxlbmFtZT4gY291bGQgbG9vawotICAgICAgICAgICAgICAgICAgICBsaWtlICJtYWNoaW5lX21ldGEiIGFuZCB0aG9zZSBuYW1lcyB3b3VsZCBoYXZlIHRoZSBTQ00KLSAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgc3Vic3RpdHV0ZWQgaW50byBlYWNoIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgICAgICBPbmx5IG9uZSA8ZmlsZW5hbWU+QVVUT0lOQzwvZmlsZW5hbWU+IHBsYWNlaG9sZGVyIGlzIGFkZGVkCi0gICAgICAgICAgICAgICAgICAgIGFuZCBpZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAgICAgIEFuZCwgdGhpcyBwbGFjZWhvbGRlciBpcyBwbGFjZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBzdHJpbmcuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItU1RBTVAnPjxnbG9zc3Rlcm0+U1RBTVA8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byBhbiBhY3R1YWwgc3RhbXAgZmlsZSBpcyBjb25zdHJ1Y3RlZCBieSBldmFsdWF0aW5nIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGFuZCB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVNUQU1QQ0xFQU4nPjxnbG9zc3Rlcm0+U1RBTVBDTEVBTjwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgIFVubGlrZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWJiLVNUQU1QJz48ZmlsZW5hbWU+U1RBTVA8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIDxmaWxlbmFtZT5TVEFNUENMRUFOPC9maWxlbmFtZT4gY2FuIGNvbnRhaW4KLSAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRzIHRvIG1hdGNoIHRoZSByYW5nZSBvZiBmaWxlcyBhIGNsZWFuIG9wZXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBzaG91bGQgcmVtb3ZlLgotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgYSBjbGVhbiBvcGVyYXRpb24gdG8gcmVtb3ZlIGFueSBvdGhlciBzdGFtcHMKLSAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHJlbW92aW5nIHdoZW4gY3JlYXRpbmcgYSBuZXcgc3RhbXAuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItU1VNTUFSWSc+PGdsb3NzdGVybT5TVU1NQVJZPC9nbG9zc3Rlcm0+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEEgc2hvcnQgc3VtbWFyeSBmb3IgdGhlIHJlY2lwZSwgd2hpY2ggaXMgNzIgY2hhcmFjdGVycyBvciBsZXNzLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVNWTkRJUic+PGdsb3NzdGVybT5TVk5ESVI8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxnbG9zc2RlZj4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIFN1YnZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgPC9nbG9zc2Rpdj4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWJiLWdsb3NzYXJ5LXQnPjx0aXRsZT5UPC90aXRsZT4KLQotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLWJiLVQnPjxnbG9zc3Rlcm0+VDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPlBvaW50cyB0byBhIGRpcmVjdG9yeSB3ZXJlIEJpdEJha2UgcGxhY2VzCi0gICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggY29uc2lzdCBtb3N0bHkgb2YgdGFzayBsb2dzIGFuZAotICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLCB3aGVuIGJ1aWxkaW5nIGEgcGFydGljdWxhciByZWNpcGUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItYmItVE9QRElSJz48Z2xvc3N0ZXJtPlRPUERJUjwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcyB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICA8L2dsb3NzZGl2PgotCi08IS0tCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktdSc+PHRpdGxlPlU8L3RpdGxlPgotICAgIDwvZ2xvc3NkaXY+Ci0KLSAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS12Jz48dGl0bGU+VjwvdGl0bGU+Ci0gICA8L2dsb3NzZGl2PgotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktdyc+PHRpdGxlPlc8L3RpdGxlPgotICAgIDwvZ2xvc3NkaXY+Ci0KLSAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS14Jz48dGl0bGU+WDwvdGl0bGU+Ci0gICAgPC9nbG9zc2Rpdj4KLQotICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXknPjx0aXRsZT5ZPC90aXRsZT4KLSAgICA8L2dsb3NzZGl2PgotCi0gICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnkteic+PHRpdGxlPlo8L3RpdGxlPgotICAgIDwvZ2xvc3NkaXY+Ci0tLT4KLQotCi08L2dsb3NzYXJ5PgotPC9jaGFwdGVyPgotPCEtLQotdmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAotLS0+CmRpZmYgLS1naXQgYS9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MgYi9wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZGEyYTQuLjAwMDAwMDAKLS0tIGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOTg0ICswLDAgQEAKLS8qCi0gICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KLQotICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQotICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCi0KLSAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKLSAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQotCi0gICBUaGFua3MgdG86Ci0gICAgIExpYW0gUi4gRS4gUXVpbgotICAgICBXaWxsaWFtIFNrYWdncwotICAgICBKYWt1YiBTdGVpbmVyCi0KLSAgIFN0cnVjdHVyZQotICAgLS0tLS0tLS0tCi0KLSAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgotCi0gICAgICAgUG9zaXRpb25pbmcKLSAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCi0gICAgICAgRGVjb3JhdGlvbnMKLSAgICAgICAgICBCb3JkZXJzLCBzdHlsZQotICAgICAgIENvbG9ycwotICAgICAgICAgIENvbG9ycwotICAgICAgIEdyYXBoaWNzCi0gICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCi0gICAgICAgTmFzdHkgSUUgdHdlYWtzCi0gICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKLSAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAotICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KLSAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKLSAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgotCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCi0KLSovCi0KLQotICAvKioqKioqKioqKioqKioqIC8KLSAvICBQb3NpdGlvbmluZyAgIC8KLS8gKioqKioqKioqKioqKioqLwotCi1ib2R5IHsKLSAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7Ci0KLSAgbWluLXdpZHRoOiA2NDBweDsKLSAgd2lkdGg6IDgwJTsKLSAgbWFyZ2luOiAgMGVtIGF1dG87Ci0gIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKLSAgY29sb3I6ICMzMzM7Ci19Ci0KLWgxLGgyLGgzLGg0LGg1LGg2LGg3IHsKLSAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOwotICBjb2xvcjogIzAwNTU3RDsKLSAgY2xlYXI6IGJvdGg7Ci19Ci0KLWgxIHsKLSAgZm9udC1zaXplOiAyZW07Ci0gIHRleHQtYWxpZ246IGxlZnQ7Ci0gIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKLSAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Ci19Ci0KLWgyLnN1YnRpdGxlIHsKLSAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKLSAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOwotICBmb250LXNpemU6IDEuOGVtOwotICBwYWRkaW5nLWxlZnQ6IDIwJTsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgZm9udC1zdHlsZTogaXRhbGljOwotfQotCi1oMiB7Ci0gIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOwotICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKLSAgZm9udC1zaXplOiAxLjVlbTsKLSAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLWgzLnN1YnRpdGxlIHsKLSAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07Ci0gIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKLSAgZm9udC1zaXplOiAxNDIuMTQlOwotICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotaDMgewotICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOwotICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07Ci0gIGZvbnQtc2l6ZTogMTQwJTsKLSAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLWg0IHsKLSAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKLSAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOwotICBmb250LXNpemU6IDEyMCU7Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1oNSB7Ci0gIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07Ci0gIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKLSAgZm9udC1zaXplOiAxMTAlOwotICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotaDYgewotICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKLSAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOwotICBmb250LXNpemU6IDExMCU7Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0uYXV0aG9yZ3JvdXAgewotICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLSAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgcGFkZGluZy10b3A6IDI1NnB4OwotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmciKTsKLSAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7Ci0gIG1hcmdpbi10b3A6IC0yNTZweDsKLSAgcGFkZGluZy1yaWdodDogNTBweDsKLSAgbWFyZ2luLWxlZnQ6IDBweDsKLSAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gIHdpZHRoOiA3NDBweDsKLX0KLQotaDMuYXV0aG9yIHsKLSAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07Ci0gIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgZm9udC1zaXplOiAxMDAlOwotICBjb2xvcjogIzMzMzsKLSAgY2xlYXI6IGJvdGg7Ci19Ci0KLS5hdXRob3IgdHQuZW1haWwgewotICBmb250LXNpemU6IDY2JTsKLX0KLQotLnRpdGxlcGFnZSBociB7Ci0gIHdpZHRoOiAwZW07Ci0gIGNsZWFyOiBib3RoOwotfQotCi0ucmV2aGlzdG9yeSB7Ci0gIHBhZGRpbmctdG9wOiAyZW07Ci0gIGNsZWFyOiBib3RoOwotfQotCi0udG9jLAotLmxpc3Qtb2YtdGFibGVzLAotLmxpc3Qtb2YtZXhhbXBsZXMsCi0ubGlzdC1vZi1maWd1cmVzIHsKLSAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07Ci0gIGNvbG9yOiAjMDA1NTdEOwotfQotCi0udG9jIHAsCi0ubGlzdC1vZi10YWJsZXMgcCwKLS5saXN0LW9mLWZpZ3VyZXMgcCwKLS5saXN0LW9mLWV4YW1wbGVzIHAgewotICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Ci0gIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07Ci0gIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Ci19Ci0KLS50b2MgcCBiLAotLmxpc3Qtb2YtdGFibGVzIHAgYiwKLS5saXN0LW9mLWZpZ3VyZXMgcCBiLAotLmxpc3Qtb2YtZXhhbXBsZXMgcCBiewotICBmb250LXNpemU6IDEwMC4wJTsKLSAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLS50b2MgZGwsCi0ubGlzdC1vZi10YWJsZXMgZGwsCi0ubGlzdC1vZi1maWd1cmVzIGRsLAotLmxpc3Qtb2YtZXhhbXBsZXMgZGwgewotICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOwotICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Ci19Ci0KLS50b2MgZHQgewotICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKLSAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOwotfQotCi0udG9jIGRkIHsKLSAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKLSAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOwotfQotCi1kaXYuZ2xvc3NhcnkgZGwsCi1kaXYudmFyaWFibGVsaXN0IGRsIHsKLX0KLQotLmdsb3NzYXJ5IGRsIGR0LAotLnZhcmlhYmxlbGlzdCBkbCBkdCwKLS52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgd2lkdGg6IDIwZW07Ci0gIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0udmFyaWFibGVsaXN0IGRsIGR0IHsKLSAgbWFyZ2luLXRvcDogMC41ZW07Ci19Ci0KLS5nbG9zc2FyeSBkbCBkZCwKLS52YXJpYWJsZWxpc3QgZGwgZGQgewotICBtYXJnaW4tdG9wOiAtMWVtOwotICBtYXJnaW4tbGVmdDogMjUuNWVtOwotfQotCi0uZ2xvc3NhcnkgZGQgcCwKLS52YXJpYWJsZWxpc3QgZGQgcCB7Ci0gIG1hcmdpbi10b3A6IDBlbTsKLSAgbWFyZ2luLWJvdHRvbTogMWVtOwotfQotCi0KLWRpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7Ci0gIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKLSAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Ci19Ci0KLWRpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKLSAgbWFyZ2luLXRvcDogMGVtOwotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLWRpdiBwLmNvcHlyaWdodCB7Ci0gIHRleHQtYWxpZ246IGxlZnQ7Ci19Ci0KLWRpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKLSAgbWFyZ2luLWJvdHRvbTogMGVtOwotfQotCi1wIHsKLSAgbGluZS1oZWlnaHQ6IDEuNWVtOwotICBtYXJnaW4tdG9wOiAwZW07Ci0KLX0KLQotZGwgewotICBwYWRkaW5nLXRvcDogMGVtOwotfQotCi1ociB7Ci0gIGJvcmRlcjogc29saWQgMXB4OwotfQotCi0KLS5tZWRpYW9iamVjdCwKLS5tZWRpYW9iamVjdGNvIHsKLSAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi1pbWcgewotICBib3JkZXI6IG5vbmU7Ci19Ci0KLXVsIHsKLSAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Ci19Ci0KLXVsIGxpIHsKLSAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOwotfQotCi11bCBsaSBwIHsKLSAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotdGFibGUgewotICB3aWR0aCA6MTAwJTsKLX0KLQotdGggewotICBwYWRkaW5nOiAwLjI1ZW07Ci0gIHRleHQtYWxpZ246IGxlZnQ7Ci0gIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLXRkIHsKLSAgcGFkZGluZzogMC4yNWVtOwotICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotCi1wIGFbaWRdIHsKLSAgbWFyZ2luOiAwcHg7Ci0gIHBhZGRpbmc6IDBweDsKLSAgZGlzcGxheTogaW5saW5lOwotICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwotfQotCi1hIHsKLSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0gIGNvbG9yOiAjNDQ0OwotfQotCi1wcmUgewotICAgIG92ZXJmbG93OiBhdXRvOwotfQotCi1hOmhvdmVyIHsKLSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0gIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KLX0KLQotLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgotICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKLSAgIHRoZSBtb3VzZS4gKi8KLQotW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQotW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KLQotCi1kaXYuaW5mb3JtYWxmaWd1cmUsCi1kaXYuaW5mb3JtYWxleGFtcGxlLAotZGl2LmluZm9ybWFsdGFibGUsCi1kaXYuZmlndXJlLAotZGl2LnRhYmxlLAotZGl2LmV4YW1wbGUgewotICBtYXJnaW46IDFlbSAwZW07Ci0gIHBhZGRpbmc6IDFlbTsKLSAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOwotfQotCi0KLWRpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCi1kaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKLWRpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKLWRpdi5maWd1cmUgcC50aXRsZSBiLAotZGl2LmV4YW1wbGUgcC50aXRsZSBiLAotZGl2LnRhYmxlIHAudGl0bGUgYnsKLSAgICBwYWRkaW5nLXRvcDogMGVtOwotICAgIG1hcmdpbi10b3A6IDBlbTsKLSAgICBmb250LXNpemU6IDEwMCU7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAotLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKLSAgdGV4dC1hbGlnbjogY2VudGVyOwotICBmb250LXNpemU6IDgwJTsKLSAgcGFkZGluZy10b3A6IDAuNWVtOwotICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Ci19Ci0KLS5lcGlncmFwaCB7Ci0gIHBhZGRpbmctbGVmdDogNTUlOwotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLS5lcGlncmFwaCBwIHsKLSAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotLmVwaWdyYXBoIC5xdW90ZSB7Ci0gIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLS5lcGlncmFwaCAuYXR0cmlidXRpb24gewotICBmb250LXN0eWxlOiBub3JtYWw7Ci0gIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi1zcGFuLmFwcGxpY2F0aW9uIHsKLSAgZm9udC1zdHlsZTogaXRhbGljOwotfQotCi0ucHJvZ3JhbWxpc3RpbmcgewotICBmb250LWZhbWlseTogbW9ub3NwYWNlOwotICBmb250LXNpemU6IDgwJTsKLSAgd2hpdGUtc3BhY2U6IHByZTsKLSAgbWFyZ2luOiAxLjMzZW0gMGVtOwotICBwYWRkaW5nOiAxLjMzZW07Ci19Ci0KLS50aXAsCi0ud2FybmluZywKLS5jYXV0aW9uLAotLm5vdGUgewotICBtYXJnaW4tdG9wOiAxZW07Ci0gIG1hcmdpbi1ib3R0b206IDFlbTsKLQotfQotCi0vKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KLS50aXAgdGFibGUsCi0ud2FybmluZyB0YWJsZSwKLS5jYXV0aW9uIHRhYmxlLAotLm5vdGUgdGFibGUgewotICBib3JkZXI6IG5vbmU7Ci0gIHdpZHRoOiAxMDAlOwotfQotCi0KLS50aXAgdGFibGUgdGgsCi0ud2FybmluZyB0YWJsZSB0aCwKLS5jYXV0aW9uIHRhYmxlIHRoLAotLm5vdGUgdGFibGUgdGggewotICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKLSAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOwotfQotCi0udGlwIHAsCi0ud2FybmluZyBwLAotLmNhdXRpb24gcCwKLS5ub3RlIHAgewotICBtYXJnaW4tdG9wOiAwLjVlbTsKLSAgbWFyZ2luLWJvdHRvbTogMC41ZW07Ci0gIHBhZGRpbmctcmlnaHQ6IDFlbTsKLSAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotLmFjcm9ueW0gewotICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwotfQotCi1iLmtleWNhcCwKLS5rZXljYXAgewotICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07Ci0gIG1hcmdpbjogMGVtOwotfQotCi0uaXRlbWl6ZWRsaXN0IGxpIHsKLSAgY2xlYXI6IG5vbmU7Ci19Ci0KLS5maWxlbmFtZSB7Ci0gIGZvbnQtc2l6ZTogbWVkaXVtOwotICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOwotfQotCi0KLWRpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5newotICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gIGxlZnQ6IDBlbTsKLSAgdG9wOiAwZW07Ci0gIHdpZHRoOiAxMDAlOwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOwotICB3aWR0aDogMTAwJTsKLX0KLQotZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7Ci0gIHBvc2l0aW9uOiBmaXhlZDsKLSAgbGVmdDogMGVtOwotICBib3R0b206IDBlbTsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAgd2lkdGg6IDEwMCU7Ci19Ci0KLQotZGl2Lm5hdmhlYWRlciB0ZCwKLWRpdi5uYXZmb290ZXIgdGQgewotICBmb250LXNpemU6IDY2JTsKLX0KLQotZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7Ci0gIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLwotICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLwotICBmb250LXNpemU6IDgwJTsKLX0KLQotZGl2Lm5hdmhlYWRlciB0YWJsZSB7Ci0gIGJvcmRlci1sZWZ0OiAwZW07Ci0gIGJvcmRlci1yaWdodDogMGVtOwotICBib3JkZXItdG9wOiAwZW07Ci0gIHdpZHRoOiAxMDAlOwotfQotCi1kaXYubmF2Zm9vdGVyIHRhYmxlIHsKLSAgYm9yZGVyLWxlZnQ6IDBlbTsKLSAgYm9yZGVyLXJpZ2h0OiAwZW07Ci0gIGJvcmRlci1ib3R0b206IDBlbTsKLSAgd2lkdGg6IDEwMCU7Ci19Ci0KLWRpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKLWRpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7Ci0gIGNvbG9yOiAjNzc3OwotICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci19Ci0KLS8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KLWRpdi5uYXZmb290ZXIgdGFibGUgdGQgewotICBjb2xvcjogYmxhY2s7Ci19Ci0KLWRpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAotZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgewotICBjb2xvcjogIzQ0NDsKLX0KLQotCi0vKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLwotZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAotZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKLSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwotICBjb2xvcjogIzMzYTsKLX0KLQotZGl2Lm5hdmhlYWRlciBociwKLWRpdi5uYXZmb290ZXIgaHIgewotICBkaXNwbGF5OiBub25lOwotfQotCi0KLS5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKLSAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07Ci0gIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKLX0KLQotLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKLSAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07Ci0gIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKLX0KLS5hbnN3ZXIgdGQgewotICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Ci19Ci0KLS5lbXBoYXNpcyB7Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0KLSAgLyoqKioqKioqKioqKiogLwotIC8gZGVjb3JhdGlvbnMgIC8KLS8gKioqKioqKioqKioqKi8KLQotLnRpdGxlcGFnZSB7Ci19Ci0KLS5wYXJ0IC50aXRsZSB7Ci19Ci0KLS5zdWJ0aXRsZSB7Ci0gICAgYm9yZGVyOiBub25lOwotfQotCi0vKgotaDEgewotICBib3JkZXI6IG5vbmU7Ci19Ci0KLWgyIHsKLSAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07Ci0gIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKLX0KLQotaDMgewotICBib3JkZXItdG9wOiAwZW07Ci0gIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKLX0KLQotaDQgewotICBib3JkZXI6IDBlbTsKLSAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOwotfQotCi1oNSB7Ci0gIGJvcmRlcjogMGVtOwotfQotKi8KLQotLnByb2dyYW1saXN0aW5nIHsKLSAgYm9yZGVyOiBzb2xpZCAxcHg7Ci19Ci0KLWRpdi5maWd1cmUsCi1kaXYudGFibGUsCi1kaXYuaW5mb3JtYWxmaWd1cmUsCi1kaXYuaW5mb3JtYWx0YWJsZSwKLWRpdi5pbmZvcm1hbGV4YW1wbGUsCi1kaXYuZXhhbXBsZSB7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotfQotCi0KLQotLnRpcCwKLS53YXJuaW5nLAotLmNhdXRpb24sCi0ubm90ZSB7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotfQotCi0udGlwIHRhYmxlIHRoLAotLndhcm5pbmcgdGFibGUgdGgsCi0uY2F1dGlvbiB0YWJsZSB0aCwKLS5ub3RlIHRhYmxlIHRoIHsKLSAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOwotfQotCi0ucXVlc3Rpb24gdGQgewotICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Ci19Ci0KLS5hbnN3ZXIgewotfQotCi0KLWIua2V5Y2FwLAotLmtleWNhcCB7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotfQotCi0KLWRpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5newotICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Ci19Ci0KLQotZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7Ci0gIGJvcmRlci10b3A6IDFweCBzb2xpZDsKLX0KLQotICAvKioqKioqKioqIC8KLSAvICBjb2xvcnMgIC8KLS8gKioqKioqKioqLwotCi1ib2R5IHsKLSAgY29sb3I6ICMzMzM7Ci0gIGJhY2tncm91bmQ6IHdoaXRlOwotfQotCi1hIHsKLSAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ci19Ci0KLWE6aG92ZXIgewotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOwotfQotCi0KLWgxLAotaDIsCi1oMywKLWg0LAotaDUsCi1oNiwKLWg3LAotaDggewotICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLX0KLQotaHIgewotICBib3JkZXItY29sb3I6ICNhYWE7Ci19Ci0KLQotLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7Ci0gIGJvcmRlci1jb2xvcjogI2ZmZjsKLX0KLQotCi0udGlwIHRhYmxlIHRoLAotLndhcm5pbmcgdGFibGUgdGgsCi0uY2F1dGlvbiB0YWJsZSB0aCwKLS5ub3RlIHRhYmxlIHRoIHsKLSAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKLX0KLQotCi0ud2FybmluZyB7Ci0gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Ci19Ci0KLS5jYXV0aW9uIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKLX0KLQotLnRpcCB7Ci0gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Ci19Ci0KLS5ub3RlIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKLX0KLQotLmdsb3NzYXJ5IGRsIGR0LAotLnZhcmlhYmxlbGlzdCBkbCBkdCwKLS52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKLSAgY29sb3I6ICMwNDQ7Ci19Ci0KLWRpdi5maWd1cmUsCi1kaXYudGFibGUsCi1kaXYuZXhhbXBsZSwKLWRpdi5pbmZvcm1hbGZpZ3VyZSwKLWRpdi5pbmZvcm1hbHRhYmxlLAotZGl2LmluZm9ybWFsZXhhbXBsZSB7Ci0gIGJvcmRlci1jb2xvcjogI2FhYTsKLX0KLQotcHJlLnByb2dyYW1saXN0aW5nIHsKLSAgY29sb3I6IGJsYWNrOwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwotICBib3JkZXItY29sb3I6ICNhYWE7Ci0gIGJvcmRlci13aWR0aDogMnB4OwotfQotCi0uZ3VpbWVudSwKLS5ndWlsYWJlbCwKLS5ndWltZW51aXRlbSB7Ci0gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Ci19Ci0KLQotYi5rZXljYXAsCi0ua2V5Y2FwIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAgYm9yZGVyLWNvbG9yOiAjOTk5OwotfQotCi0KLWRpdi5uYXZoZWFkZXIgewotICBib3JkZXItY29sb3I6IGJsYWNrOwotfQotCi0KLWRpdi5uYXZmb290ZXIgewotICBib3JkZXItY29sb3I6IGJsYWNrOwotfQotCi0KLSAgLyoqKioqKioqKioqIC8KLSAvICBncmFwaGljcyAgLwotLyAqKioqKioqKioqKi8KLQotLyoKLWJvZHkgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOwotICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOwotfQotCi0ubmF2aGVhZGVyLAotLm5vdGUsCi0udGlwIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKLSAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKLX0KLQotLndhcm5pbmcsCi0uY2F1dGlvbiB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7Ci0gIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Ci19Ci0KLS5maWd1cmUsCi0uaW5mb3JtYWxmaWd1cmUsCi0uZXhhbXBsZSwKLS5pbmZvcm1hbGV4YW1wbGUsCi0udGFibGUsCi0uaW5mb3JtYWx0YWJsZSB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKLSAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKLX0KLQotKi8KLWgxLAotaDIsCi1oMywKLWg0LAotaDUsCi1oNiwKLWg3ewotfQotCi0vKgotRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCi0KLWRpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCi17Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKLSAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwotICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Ci19Ci0qLwotCi1kaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKLWRpdi5jb2xvcGhvbiAudGl0bGUsCi1kaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKLWRpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCi17Ci19Ci0KLWRpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAotZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKLSAgICBiYWNrZ3JvdW5kOiBub25lOwotfQotCi0KLWgxLnRpdGxlIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0gIGhlaWdodDogMjU2cHg7Ci0gIHRleHQtaW5kZW50OiAtOTAwMHB4OwotICBvdmVyZmxvdzpoaWRkZW47Ci19Ci0KLWgyLnN1YnRpdGxlIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gIHRleHQtaW5kZW50OiAtOTAwMHB4OwotICBvdmVyZmxvdzpoaWRkZW47Ci0gIHdpZHRoOiAwcHg7Ci0gIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCi0gLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCi0vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLWRpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKLSAgY29sb3I6ICM3Nzc7Ci0gIGZvbnQtc2l6ZTogODAlOwotICBwYWRkaW5nOiAwOwotICBtYXJnaW46IDA7Ci0gIHRleHQtYWxpZ246IGxlZnQ7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgdG9wOiAwcHg7Ci0gIGxlZnQ6IDBweDsKLSAgd2lkdGg6IDEwMCU7Ci0gIGhlaWdodDogNTBweDsKLSAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKLSAgYm9yZGVyOiBub25lOwotfQotCi1kaXYuaGVhZGluZyBhIHsKLSAgY29sb3I6ICM0NDQ7Ci19Ci0KLWRpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKLSAgYm9yZGVyOiBub25lOwotICBjb2xvcjogI2RkZDsKLSAgZm9udC1zaXplOiA4MCU7Ci0gIHRleHQtYWxpZ246cmlnaHQ7Ci0KLSAgd2lkdGg6IDEwMCU7Ci0gIHBhZGRpbmctdG9wOiAxMHB4OwotICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gIGJvdHRvbTogMHB4OwotICBsZWZ0OiAwcHg7Ci0KLSAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Ci19Ci0qLwotCi0KLQotICAvKioqKioqKioqKioqKioqKioqIC8KLSAvICBuYXN0eSBpZSB0d2Vha3MgIC8KLS8gKioqKioqKioqKioqKioqKioqLwotCi0vKgotZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgewotICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKLX0KLQotZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgewotICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKLSAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOwotfQotYm9keSB7Ci0gIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Ci19Ci0qLwotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KLSAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCi0vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7Ci0gIC1tb3otb3BhY2l0eTogMC44ZW07Ci19Ci0KLWRpdi5maWd1cmUsCi1kaXYudGFibGUsCi1kaXYuaW5mb3JtYWxmaWd1cmUsCi1kaXYuaW5mb3JtYWx0YWJsZSwKLWRpdi5pbmZvcm1hbGV4YW1wbGUsCi1kaXYuZXhhbXBsZSwKLS50aXAsCi0ud2FybmluZywKLS5jYXV0aW9uLAotLm5vdGUgewotICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOwotfQotCi1iLmtleWNhcCwKLS5rZXljYXAgewotICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOwotfQotKi8KLQotdGFibGUgdHIgdGQgdGFibGUgdHIgdGQgewotICBkaXNwbGF5OiBub25lOwotfQotCi0KLWhyIHsKLSAgZGlzcGxheTogbm9uZTsKLX0KLQotdGFibGUgewotICBib3JkZXI6IDBlbTsKLX0KLQotIC5waG90byB7Ci0gIGZsb2F0OiByaWdodDsKLSAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07Ci0gIG1hcmdpbi1ib3R0b206IDEuNWVtOwotICBtYXJnaW4tdG9wOiAwZW07Ci0gIG1heC13aWR0aDogICAgICAxN2VtOwotICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKLSAgcGFkZGluZzogICAgM3B4OwotICBiYWNrZ3JvdW5kOiB3aGl0ZTsKLX0KLSAuc2VwZXJhdG9yIHsKLSAgIHBhZGRpbmctdG9wOiAyZW07Ci0gICBjbGVhcjogYm90aDsKLSAgfQotCi0gICN2YWxpZGF0b3JzIHsKLSAgICAgIG1hcmdpbi10b3A6IDVlbTsKLSAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgICAgY29sb3I6ICM3Nzc7Ci0gIH0KLSAgQG1lZGlhIHByaW50IHsKLSAgICAgIGJvZHkgewotICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OwotICAgICAgfQotICAgICAgLm5vcHJpbnQgewotICAgICAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgICB9Ci0gIH0KLQotCi0udGlwLAotLm5vdGUgewotICAgYmFja2dyb3VuZDogI2YwZjBmMjsKLSAgIGNvbG9yOiAjMzMzOwotICAgcGFkZGluZzogMjBweDsKLSAgIG1hcmdpbjogMjBweDsKLX0KLQotLnRpcCBoMywKLS5ub3RlIGgzIHsKLSAgIHBhZGRpbmc6IDBlbTsKLSAgIG1hcmdpbjogMGVtOwotICAgZm9udC1zaXplOiAyZW07Ci0gICBmb250LXdlaWdodDogYm9sZDsKLSAgIGNvbG9yOiAjMzMzOwotfQotCi0udGlwIGEsCi0ubm90ZSBhIHsKLSAgIGNvbG9yOiAjMzMzOwotICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci19Ci0KLS5mb290bm90ZSB7Ci0gICBmb250LXNpemU6IHNtYWxsOwotICAgY29sb3I6ICMzMzM7Ci19Ci0KLS8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCi0udGlwIGgzLAotLndhcm5pbmcgaDMsCi0uY2F1dGlvbiBoMywKLS5ub3RlIGgzIHsKLSAgIGZvbnQtc2l6ZTpsYXJnZTsKLSAgIGNvbG9yOiAjMDA1NTdEOwotfQpkaWZmIC0tZ2l0IGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sIGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzkzMjY1Li4wMDAwMDAwCi0tLSBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKLSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgotCi08Ym9vayBpZD0nYml0YmFrZS11c2VyLW1hbnVhbCcgbGFuZz0nZW4nCi0gICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgotICAgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCi0gICAgICAgID4KLSAgICA8Ym9va2luZm8+Ci0KLSAgICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZycKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCi0gICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KLSAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0KLSAgICAgICAgPHRpdGxlPgotICAgICAgICAgICAgQml0QmFrZSBVc2VyIE1hbnVhbAotICAgICAgICA8L3RpdGxlPgotCi0gICAgICAgIDxhdXRob3Jncm91cD4KLSAgICAgICAgICAgIDxhdXRob3I+Ci0gICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5SaWNoYXJkIFB1cmRpZSwgQ2hyaXMgTGFyc29uLCBhbmQgPC9maXJzdG5hbWU+IDxzdXJuYW1lPlBoaWwgQmx1bmRlbGw8L3N1cm5hbWU+Ci0gICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5CaXRCYWtlIENvbW11bml0eTwvb3JnbmFtZT4KLSAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgIDxlbWFpbD5iaXRiYWtlLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmc8L2VtYWlsPgotICAgICAgICAgICAgPC9hdXRob3I+Ci0gICAgICAgIDwvYXV0aG9yZ3JvdXA+Ci0KLTwhLS0KLSMgQWRkIGluIHNvbWUgcmV2aXNpb24gaGlzdG9yeSBpZiB3ZSB3YW50IGl0IGhlcmUuCi0gICAgICAgIDxyZXZoaXN0b3J5PgotICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgotICAgICAgICAgICAgPC9yZXZpc2lvbj4KLSAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPngueDwvcmV2bnVtYmVyPgotICAgICAgICAgICAgICAgIDxkYXRlPmRkIG1vbnRoIHllYXI8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5Tb21lIHJlbGV2ZW50IGNvbW1lbnQ8L3JldnJlbWFyaz4KLSAgICAgICAgICAgIDwvcmV2aXNpb24+Ci0gICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+Ci0gICAgICAgICAgICA8L3JldmlzaW9uPgotICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgotICAgICAgICAgICAgPC9yZXZpc2lvbj4KLSAgICAgICA8L3Jldmhpc3Rvcnk+Ci0tLT4KLQotICAgICAgICA8Y29weXJpZ2h0PgotICAgICAgICAgICAgPHllYXI+MjAwNC0yMDE4PC95ZWFyPgotICAgICAgICAgICAgPGhvbGRlcj5SaWNoYXJkIFB1cmRpZTwvaG9sZGVyPgotICAgICAgICAgICAgPGhvbGRlcj5DaHJpcyBMYXJzb248L2hvbGRlcj4KLSAgICAgICAgICAgIDxob2xkZXI+YW5kIFBoaWwgQmx1bmRlbGw8L2hvbGRlcj4KLSAgICAgICAgPC9jb3B5cmlnaHQ+Ci0KLSAgICAgICAgPGxlZ2Fsbm90aWNlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIExpY2Vuc2UuCi0gICAgICAgICAgICAgICAgVG8gdmlldyBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlLCB2aXNpdAotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuNS8iPmh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuNS88L3VsaW5rPgotICAgICAgICAgICAgICAgIG9yIHNlbmQgYSBsZXR0ZXIgdG8gQ3JlYXRpdmUgQ29tbW9ucywgNDQ0IENhc3RybyBTdHJlZXQsCi0gICAgICAgICAgICAgICAgU3VpdGUgOTAwLCBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhIDk0MDQxLCBVU0EuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGVnYWxub3RpY2U+Ci0gICAgPC9ib29raW5mbz4KLQotICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sIi8+Ci0KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwiLz4KLQotICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sIi8+Ci0KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbCIvPgotCi0gICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbCIvPgotCi0gICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwiLz4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2h0bWwuY3NzIGIvcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2h0bWwuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWVkZmQzLi4wMDAwMDAwCi0tLSBhL3Bva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9odG1sLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKiBGZXVpbGxlIGRlIHN0eWxlIERvY0Jvb2sgZHUgcHJvamV0IFRyYWR1Yy5vcmcgICAgICAgICAgICAgICAgKi8KLS8qIERvY0Jvb2sgQ1NTIHN0eWxlc2hlZXQgb2YgdGhlIFRyYWR1Yy5vcmcgcHJvamVjdCAgICAgICAgICAgICAqLwotCi0vKiAoYykgSmVhbi1QaGlsaXBwZSBHdelyYXJkIC0gMTQgYW/7dCAyMDA0ICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIChjKSBKZWFuLVBoaWxpcHBlIEd16XJhcmQgLSAxNCBBdWd1c3QgMjAwNCAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBDZXR0ZSBmZXVpbGxlIGRlIHN0eWxlIGVzdCBsaWJyZSwgdm91cyBwb3V2ZXogbGEgICAgICAgICAgICAgKi8KLS8qIHJlZGlzdHJpYnVlciBldCBsYSBtb2RpZmllciBzZWxvbiBsZXMgdGVybWVzIGRlIGxhIExpY2VuY2UgICAqLwotLyogQXJ0IExpYnJlLiBWb3VzIHRyb3V2ZXJleiB1biBleGVtcGxhaXJlIGRlIGNldHRlIExpY2VuY2Ugc3VyICovCi0vKiBodHRwOi8vdGlncmVyYXllLm9yZy9QZXRpdC1ndWlkZS1kdS10cmFkdWN0ZXVyLmh0bWwjbGljZW5jZS1hcnQtbGlicmUgKi8KLQotLyogVGhpcyB3b3JrIG9mIGFydCBpcyBmcmVlLCB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgICovCi0vKiBtb2RpZnkgaXQgYWNjb3JkaW5nIHRvIHRlcm1zIG9mIHRoZSBGcmVlIEFydCBsaWNlbnNlLiBZb3UgICAgKi8KLS8qIHdpbGwgZmluZCBhIHNwZWNpbWVuIG9mIHRoaXMgbGljZW5zZSBvbiB0aGUgQ29weWxlZnQgICAgICAgICAqLwotLyogQXR0aXR1ZGUgd2ViIHNpdGU6IGh0dHA6Ly9hcnRsaWJyZS5vcmcgYXMgd2VsbCBhcyBvbiBvdGhlciAgICovCi0vKiBzaXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFBsZWFzZSBub3RlIHRoYXQgdGhlIEZyZW5jaCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5jZSBhcyBzaG93biAqLwotLyogb24gaHR0cDovL3RpZ3JlcmF5ZS5vcmcvUGV0aXQtZ3VpZGUtZHUtdHJhZHVjdGV1ci5odG1sI2xpY2VuY2UtYXJ0LWxpYnJlICovCi0vKiBpcyBvbmx5IG9mZmljaWFsIGxpY2VuY2Ugb2YgdGhpcyBkb2N1bWVudC4gVGhlIEVuZ2xpc2ggICAgICAgKi8KLS8qIGlzIG9ubHkgcHJvdmlkZWQgdG8gaGVscCB5b3UgdW5kZXJzdGFuZCB0aGlzIGxpY2VuY2UuICAgICAgICAqLwotCi0vKiBMYSBkZXJuaehyZSB2ZXJzaW9uIGRlIGNldHRlIGZldWlsbGUgZGUgc3R5bGUgZXN0IHRvdWpvdXJzICAgKi8KLS8qIGRpc3BvbmlibGUgc3VyoDogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvc3R5bGUuY3NzICAgICAgICAgICAgICAqLwotLyogRWxsZSBlc3Qg6WdhbGVtZW50IGRpc3BvbmlibGUgc3VyoDogICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBodHRwOi8vd3d3LnRyYWR1Yy5vcmcvZG9jcy9IT1dUTy9sZWN0dXJlL3N0eWxlLmNzcyAgICAgICAgICAgKi8KLQotLyogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc3R5bGVzaGVldCBpcyBhdmFpbGFibGUgZnJvbTogICAgICovCi0vKiBodHRwOi8vdGlncmVyYXllLm9yZy9zdHlsZS5jc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEl0IGlzIGFsc28gYXZhaWxhYmxlIG9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogaHR0cDovL3d3dy50cmFkdWMub3JnL2RvY3MvSE9XVE8vbGVjdHVyZS9zdHlsZS5jc3MgICAgICAgICAgICovCi0KLS8qIE4naOlzaXRleiBwYXMg4CBlbnZveWVyIHZvcyBjb21tZW50YWlyZXMgZXQgY29ycmVjdGlvbnMg4CAgICAqLwotLyogSmVhbi1QaGlsaXBwZSBHdelyYXJkIDxqZWFuLXBoaWxpcHBlLmd1ZXJhcmRAdGlncmVyYXllLm9yZz4gICovCi0KLS8qIFBsZWFzZSBzZW5kIGZlZWRiYWNrIGFuZCBidWcgcmVwb3J0cyB0byAgICAgICAgICAgICAgICAgICAgICAqLwotLyogSmVhbi1QaGlsaXBwZSBHdelyYXJkIDxqZWFuLXBoaWxpcHBlLmd1ZXJhcmRAdGlncmVyYXllLm9yZz4gICovCi0KLS8qICRJZDogc3R5bGUuY3NzLHYgMS4xNCAyMDA0LzA5LzEwIDIwOjEyOjA5IGZldnJpZXIgRXhwIGZldnJpZXIgJCAqLwotCi0vKiBQculzZW50YXRpb24gZ+lu6XJhbGUgZHUgZG9jdW1lbnQgKi8KLS8qIE92ZXJhbGwgZG9jdW1lbnQgcHJlc2VudGF0aW9uICovCi0KLWJvZHkgewotICAgIC8qCi0gICAgZm9udC1mYW1pbHk6IEFwb2xsaW5lLCAiVVJXIFBhbGxhZGlvIEwiLCBHYXJhbW9uZCwgakdhcmFtb25kLAotICAgICAgICAgICAgICAgICAiQml0c3RyZWFtIEN5YmVyYml0IiwgIlBhbGF0aW5vIExpbm90eXBlIiwgc2VyaWY7Ci0gICAgICovCi0gICAgbWFyZ2luOiA3JTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLX0KLQotLyogVGFpbGxlIGR1IHRleHRlICovCi0vKiBUZXh0IHNpemUgKi8KLQotKiB7IGZvbnQtc2l6ZTogMTAwJTsgfQotCi0vKiBHZXN0aW9uIGRlcyB0ZXh0ZXMgbWlzIGVuIHJlbGllZiBpbWJyaXF16XMgKi8KLS8qIEVtYmVkZGVkIGVtcGhhc2lzICovCi0KLWVtIHsgZm9udC1zdHlsZTogaXRhbGljOyB9Ci1lbSBlbSB7IGZvbnQtc3R5bGU6IG5vcm1hbDsgfQotZW0gZW0gZW0geyBmb250LXN0eWxlOiBpdGFsaWM7IH0KLQotLyogVGl0cmVzICovCi0vKiBUaXRsZXMgKi8KLQotaDEgeyBmb250LXNpemU6IDIwMCU7IGZvbnQtd2VpZ2h0OiA5MDA7IH0KLWgyIHsgZm9udC1zaXplOiAxNjAlOyBmb250LXdlaWdodDogOTAwOyB9Ci1oMyB7IGZvbnQtc2l6ZTogMTMwJTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLWg0IHsgZm9udC1zaXplOiAxMTUlOyBmb250LXdlaWdodDogYm9sZDsgfQotaDUgeyBmb250LXNpemU6IDEwOCU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci1oNiB7ICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLQotLyogTm9tIGRlIGZhbWlsbGUgZW4gcGV0aXRlcyBtYWp1c2N1bGVzICh1bmlxdWVtZW50IGVuIGZyYW7nYWlzKSAqLwotLyogTGFzdCBuYW1lcyBpbiBzbWFsbCBjYXBzIChmb3IgRnJlbmNoIG9ubHkpICovCi0KLSpbY2xhc3N+PSJzdXJuYW1lIl06bGFuZyhmcikgeyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7IH0KLQotLyogQmxvY3MgZGUgY2l0YXRpb24gKi8KLS8qIFF1b3RhdGlvbiBibG9jcyAqLwotCi1kaXZbY2xhc3N+PSJibG9ja3F1b3RlIl0gewotICBib3JkZXI6IHNvbGlkIDJweCAjQUFBOwotICBwYWRkaW5nOiA1cHg7Ci0gIG1hcmdpbjogNXB4OwotfQotCi1kaXZbY2xhc3N+PSJibG9ja3F1b3RlIl0gPiB0YWJsZSB7Ci0gIGJvcmRlcjogbm9uZTsKLX0KLQotLyogQmxvY3MgbGl06XJhdXigOiBmb25kIGdyaXMgY2xhaXIgKi8KLS8qIExpdGVyYWwgYmxvY3M6IGxpZ2h0IGdyYXkgYmFja2dyb3VuZCAqLwotCi0qW2NsYXNzfj0ibGl0ZXJhbGxheW91dCJdIHsKLSAgYmFja2dyb3VuZDogI2YwZjBmMDsKLSAgcGFkZGluZzogNXB4OwotICBtYXJnaW46IDVweDsKLX0KLQotLyogUHJvZ3JhbW1lcyBldCBjYXB0dXJlcyB0ZXh0ZaA6IGZvbmQgYmxldSBjbGFpciAqLwotLyogTGlzdGluZyBhbmQgdGV4dCBzY3JlZW4gc25hcHNob3RzOiBsaWdodCBibHVlIGJhY2tncm91bmQgKi8KLQotKltjbGFzc349InByb2dyYW1saXN0aW5nIl0sICpbY2xhc3N+PSJzY3JlZW4iXSB7Ci0gIGJhY2tncm91bmQ6ICNmMGYwZmY7Ci0gIHBhZGRpbmc6IDVweDsKLSAgbWFyZ2luOiA1cHg7Ci19Ci0KLS8qIExlcyB0ZXh0ZXMg4CByZW1wbGFjZXIgc29udCBzdXJsaWdu6XMgZW4gdmVydCBw4mxlICovCi0vKiBSZXBsYWNlYWJsZSB0ZXh0IGluIGhpZ2hsaWdodGVkIGluIHBhbGUgZ3JlZW4gKi8KLQotKltjbGFzc349InJlcGxhY2VhYmxlIl0geyAKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOThmYjk4OwotICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsgfQotCi0vKiBUYWJsZXOgOiBmb25kcyBncmlzIGNsYWlyICYgYm9yZHMgc2ltcGxlcyAqLwotLyogVGFibGVzOiBsaWdodCBncmF5IGJhY2tncm91bmQgYW5kIHNvbGlkIGJvcmRlcnMgKi8KLQotKltjbGFzc349InRhYmxlIl0gKltjbGFzc349InRpdGxlIl0geyB3aWR0aDoxMDAlOyBib3JkZXI6IDBweDsgfQotCi10YWJsZSB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIHBhZGRpbmc6IDJweDsKLSAgICBtYXJnaW46IDVweDsKLX0KLQotLyogTGlzdGVzIHNpbXBsZXMgZW4gc3R5bGUgdGFibGUgKi8KLS8qIFNpbXBsZXMgbGlzdHMgaW4gdGFibGUgcHJlc2VudGF0aW9uICovCi0KLXRhYmxlW2NsYXNzfj0ic2ltcGxlbGlzdCJdIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOwotICAgIG1hcmdpbjogNXB4OwotICAgIGJvcmRlcjogc29saWQgMXB4ICNBQUE7Ci19Ci0KLXRhYmxlW2NsYXNzfj0ic2ltcGxlbGlzdCJdIHRkIHsKLSAgICBib3JkZXI6IHNvbGlkIDFweCAjQUFBOwotfQotCi0vKiBMZXMgdGFibGVzICovCi0vKiBUYWJsZXMgKi8KLQotKltjbGFzc349InRhYmxlIl0gdGFibGUgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggI0FBQTsKLX0KLSpbY2xhc3N+PSJpbmZvcm1hbHRhYmxlIl0gdGFibGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOyB9Ci0KLXRoLHRkIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLSAgICBwYWRkaW5nOiAwLjFlbSAwLjNlbTsKLSAgICBlbXB0eS1jZWxsczogc2hvdzsgCi19Ci0KLS8qIEFsaWduZW1lbnQgZGVzIGNvbG9ubmVzICovCi0vKiBDb2x1bm1zIGFsaWdubWVudCAqLwotCi10ZFthbGlnbj1jZW50ZXJdICwgIHRoW2FsaWduPWNlbnRlcl0gIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9Ci10ZFthbGlnbj1yaWdodF0gLCAgIHRoW2FsaWduPXJpZ2h0XSAgIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0KLXRkW2FsaWduPWxlZnRdICwgICAgdGhbYWxpZ249bGVmdF0gICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9Ci10ZFthbGlnbj1qdXN0aWZ5XSAsIHRoW2FsaWduPWp1c3RpZnldIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQotCi0vKiBQYXMgZGUgbWFyZ2UgYXV0b3VyIGRlcyBpbWFnZXMgKi8KLS8qIE5vIGluc2lkZSBtYXJnaW5zIGZvciBpbWFnZXMgKi8KLQotaW1nIHsgYm9yZGVyOiAwOyB9Ci0KLS8qIExlcyBsaWVucyBuZSBzb250IHBhcyBzb3VsaWdu6XMgKi8KLS8qIE5vIHVuZGVybGluZXMgZm9yIGxpbmtzICovCi0KLTpsaW5rICwgOnZpc2l0ZWQgLCA6YWN0aXZlIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ci0KLS8qIFBydWRlbmNloDogY2FkcmUgamF1bmUgZXQgZm9uZCBqYXVuZSBjbGFpciAqLwotLyogQ2F1dGlvbjogeWVsbG93IGJvcmRlciBhbmQgbGlnaHQgeWVsbG93IGJhY2tncm91bmQgKi8KLQotKltjbGFzc349ImNhdXRpb24iXSB7Ci0gICAgYm9yZGVyOiBzb2xpZCAycHggeWVsbG93OwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7Ci0gICAgcGFkZGluZzogMWVtIDZweCAxZW0gOwotICAgIG1hcmdpbjogNXB4OwotfQotCi0qW2NsYXNzfj0iY2F1dGlvbiJdIHRoIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlCi19Ci0KLSpbY2xhc3N+PSJjYXV0aW9uIl0gdGFibGUgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7Ci0gICAgYm9yZGVyOiBub25lOwotfQotCi0vKiBOb3RlIGltcG9ydGFudGWgOiBjYWRyZSBqYXVuZSBldCBmb25kIGphdW5lIGNsYWlyICovCi0vKiBJbXBvcnRhbnQ6IHllbGxvdyBib3JkZXIgYW5kIGxpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICovCi0KLSpbY2xhc3N+PSJpbXBvcnRhbnQiXSB7Ci0gICAgYm9yZGVyOiBzb2xpZCAycHggeWVsbG93OwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7Ci0gICAgcGFkZGluZzogMWVtIDZweCAxZW07Ci0gICAgbWFyZ2luOiA1cHg7Ci19Ci0KLSpbY2xhc3N+PSJpbXBvcnRhbnQiXSB0aCB7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQotfQotCi0qW2NsYXNzfj0iaW1wb3J0YW50Il0gdGFibGUgIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOwotICAgIGJvcmRlcjogbm9uZTsKLX0KLQotLyogTWlzZSBlbiDpdmlkZW5jZaA6IHRleHRlIGzpZ+hyZW1lbnQgcGx1cyBncmFuZCAqLwotLyogSGlnaGxpZ2h0czogc2xpZ2h0bHkgbGFyZ2VyIHRleHRzICovCi0KLSpbY2xhc3N+PSJoaWdobGlnaHRzIl0gewotICAgIGZvbnQtc2l6ZTogIDExMCU7Ci19Ci0KLS8qIE5vdGWgOiBjYWRyZSBibGV1IGV0IGZvbmQgYmxldSBjbGFpciAqLwotLyogTm90ZXM6IGJsdWUgYm9yZGVyIGFuZCBsaWdodCBibHVlIGJhY2tncm91bmQgKi8KLQotKltjbGFzc349Im5vdGUiXSAgIHsKLSAgICBib3JkZXI6IHNvbGlkIDJweCAjNzA5OUM1OwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZmY7Ci0gICAgcGFkZGluZzogMWVtIDZweCAxZW0gOwotICAgIG1hcmdpbjogNXB4OwotfQotCi0qW2NsYXNzfj0ibm90ZSJdIHRoIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlCi19Ci0KLSpbY2xhc3N+PSJub3RlIl0gdGFibGUgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZmY7Ci0gICAgYm9yZGVyOiBub25lOwotfQotCi0vKiBBc3R1Y2WgOiBjYWRyZSB2ZXJ0IGV0IGZvbmQgdmVydCBjbGFpciAqLwotLyogVGlwOiBncmVlbiBib3JkZXIgYW5kIGxpZ2h0IGdyZWVuIGJhY2tncm91bmQgKi8KLQotKltjbGFzc349InRpcCJdIHsKLSAgICBib3JkZXI6IHNvbGlkIDJweCAjMDBmZjAwOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGZmZmY7Ci0gICAgcGFkZGluZzogMWVtIDZweCAxZW0gOwotICAgIG1hcmdpbjogNXB4OwotfQotCi0qW2NsYXNzfj0idGlwIl0gdGggewotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLSpbY2xhc3N+PSJ0aXAiXSB0YWJsZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZmZmZjsKLSAgICBib3JkZXI6IG5vbmU7Ci19Ci0KLS8qIEF2ZXJ0aXNzZW1lbnSgOiBjYWRyZSByb3VnZSBldCBmb25kIHJvdWdlIGNsYWlyICovCi0vKiBXYXJuaW5nOiByZWQgYm9yZGVyIGFuZCBsaWdodCByZWQgYmFja2dyb3VuZCAqLwotCi0qW2NsYXNzfj0id2FybmluZyJdIHsKLSAgICBib3JkZXI6IHNvbGlkIDJweCAjZmYwMDAwOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYwZjA7IAotICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKLSAgICBtYXJnaW46IDVweDsKLX0KLQotKltjbGFzc349Indhcm5pbmciXSB0aCB7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLSAgICAgICAgICAgICAgICAgICAgCi0KLSpbY2xhc3N+PSJ3YXJuaW5nIl0gdGFibGUgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYwZjA7Ci0gICAgYm9yZGVyOiBub25lOwotfQotCi0vKiBGaW4gKi8KLS8qIFRoZSBFbmQgKi8KLQo=