ZGlmZiAtLWdpdCBhLy5pZGVhL2RhdGFTb3VyY2VzLmxvY2FsLnhtbCBiLy5pZGVhL2RhdGFTb3VyY2VzLmxvY2FsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkZjU3MC4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy5sb2NhbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgdmVyc2lvbj0iNCI+Ci0gIDxjb21wb25lbnQgbmFtZT0iZGF0YVNvdXJjZVN0b3JhZ2VMb2NhbCIgY3JlYXRlZC1pbj0iSVUtMjQzLjIxNTY1LjE5MyI+Ci0gICAgPGRhdGEtc291cmNlIG5hbWU9InB0UHJvamVjdEBsb2NhbGhvc3QiIHV1aWQ9IjY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMiI+Ci0gICAgICA8ZGF0YWJhc2UtaW5mbyBwcm9kdWN0PSJNeVNRTCIgdmVyc2lvbj0iOC4wLjQwIiBqZGJjLXZlcnNpb249IjQuMiIgZHJpdmVyLW5hbWU9Ik15U1FMIENvbm5lY3Rvci9KIiBkcml2ZXItdmVyc2lvbj0ibXlzcWwtY29ubmVjdG9yLWotOC4yLjAgKFJldmlzaW9uOiAwNmExZjcyNDQ5N2ZkODFjNmE2NTkxMzFmZGE4MjJjOWU1MDg1YjZjKSIgZGJtcz0iTVlTUUwiIGV4YWN0LXZlcnNpb249IjguMC40MCIgZXhhY3QtZHJpdmVyLXZlcnNpb249IjguMiI+Ci0gICAgICAgIDxleHRyYS1uYW1lLWNoYXJhY3RlcnM+I0A8L2V4dHJhLW5hbWUtY2hhcmFjdGVycz4KLSAgICAgICAgPGlkZW50aWZpZXItcXVvdGUtc3RyaW5nPmA8L2lkZW50aWZpZXItcXVvdGUtc3RyaW5nPgotICAgICAgPC9kYXRhYmFzZS1pbmZvPgotICAgICAgPGNhc2Utc2Vuc2l0aXZpdHkgcGxhaW4taWRlbnRpZmllcnM9Imxvd2VyIiBxdW90ZWQtaWRlbnRpZmllcnM9Imxvd2VyIiAvPgotICAgICAgPHVzZXItbmFtZT5yb290PC91c2VyLW5hbWU+Ci0gICAgICA8c2NoZW1hLW1hcHBpbmc+Ci0gICAgICAgIDxpbnRyb3NwZWN0aW9uLXNjb3BlPgotICAgICAgICAgIDxub2RlIGtpbmQ9InNjaGVtYSIgcW5hbWU9IkAiIC8+Ci0gICAgICAgIDwvaW50cm9zcGVjdGlvbi1zY29wZT4KLSAgICAgIDwvc2NoZW1hLW1hcHBpbmc+Ci0gICAgPC9kYXRhLXNvdXJjZT4KLSAgPC9jb21wb25lbnQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMueG1sIGIvLmlkZWEvZGF0YVNvdXJjZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTA0MWU0Li4wMDAwMDAwCi0tLSBhLy5pZGVhL2RhdGFTb3VyY2VzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB2ZXJzaW9uPSI0Ij4KLSAgPGNvbXBvbmVudCBuYW1lPSJEYXRhU291cmNlTWFuYWdlckltcGwiIGZvcm1hdD0ieG1sIiBtdWx0aWZpbGUtbW9kZWw9InRydWUiPgotICAgIDxkYXRhLXNvdXJjZSBzb3VyY2U9IkxPQ0FMIiBuYW1lPSJwdFByb2plY3RAbG9jYWxob3N0IiB1dWlkPSI2Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIiPgotICAgICAgPGRyaXZlci1yZWY+bXlzcWwuODwvZHJpdmVyLXJlZj4KLSAgICAgIDxzeW5jaHJvbml6ZT50cnVlPC9zeW5jaHJvbml6ZT4KLSAgICAgIDxpbXBvcnRlZD50cnVlPC9pbXBvcnRlZD4KLSAgICAgIDxqZGJjLWRyaXZlcj5jb20ubXlzcWwuY2ouamRiYy5Ecml2ZXI8L2pkYmMtZHJpdmVyPgotICAgICAgPGpkYmMtdXJsPmpkYmM6bXlzcWw6Ly9sb2NhbGhvc3Q6MzMwNi9wdFByb2plY3Q8L2pkYmMtdXJsPgotICAgICAgPGpkYmMtYWRkaXRpb25hbC1wcm9wZXJ0aWVzPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29tLmludGVsbGlqLmNsb3Vkcy5rdWJlcm5ldGVzLmRiLmhvc3QucG9ydCIgLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbS5pbnRlbGxpai5jbG91ZHMua3ViZXJuZXRlcy5kYi5lbmFibGVkIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb20uaW50ZWxsaWouY2xvdWRzLmt1YmVybmV0ZXMuZGIucmVzb3VyY2UudHlwZSIgdmFsdWU9IkRlcGxveW1lbnQiIC8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb20uaW50ZWxsaWouY2xvdWRzLmt1YmVybmV0ZXMuZGIuY29udGFpbmVyLnBvcnQiIC8+Ci0gICAgICA8L2pkYmMtYWRkaXRpb25hbC1wcm9wZXJ0aWVzPgotICAgICAgPHdvcmtpbmctZGlyPiRQcm9qZWN0RmlsZURpciQ8L3dvcmtpbmctZGlyPgotICAgIDwvZGF0YS1zb3VyY2U+Ci0gIDwvY29tcG9uZW50PgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi54bWwgYi8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGQ2MDY4Li4wMDAwMDAwCi0tLSBhLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzA4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZGF0YVNvdXJjZSBuYW1lPSJwdFByb2plY3RAbG9jYWxob3N0Ij4KLSAgPGRhdGFiYXNlLW1vZGVsIHNlcmlhbGl6ZXI9ImRibSIgZGJtcz0iTVlTUUwiIGZhbWlseS1pZD0iTVlTUUwiIGZvcm1hdC12ZXJzaW9uPSI0LjUzIj4KLSAgICA8cm9vdCBpZD0iMSI+Ci0gICAgICA8RGVmYXVsdENhc2luZz5sb3dlci9sb3dlcjwvRGVmYXVsdENhc2luZz4KLSAgICAgIDxEZWZhdWx0RW5naW5lPklubm9EQjwvRGVmYXVsdEVuZ2luZT4KLSAgICAgIDxEZWZhdWx0VG1wRW5naW5lPklubm9EQjwvRGVmYXVsdFRtcEVuZ2luZT4KLSAgICAgIDxHcmFudHM+fHJvb3R8fHJvb3R8bG9jYWxob3N0fEFMVEVSfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxBTFRFUiBST1VUSU5FfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxBUFBMSUNBVElPTl9QQVNTV09SRF9BRE1JTnxHCi18cm9vdHx8bXlzcWwuaW5mb3NjaGVtYXxsb2NhbGhvc3R8QVVESVRfQUJPUlRfRVhFTVBUfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxBVURJVF9BQk9SVF9FWEVNUFR8RwotfHJvb3R8fG15c3FsLnN5c3xsb2NhbGhvc3R8QVVESVRfQUJPUlRfRVhFTVBUfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxBVURJVF9BQk9SVF9FWEVNUFR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEFVRElUX0FETUlOfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxBVVRIRU5USUNBVElPTl9QT0xJQ1lfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEFVVEhFTlRJQ0FUSU9OX1BPTElDWV9BRE1JTnxHCi18cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8QkFDS1VQX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxCQUNLVVBfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEJJTkxPR19BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8QklOTE9HX0VOQ1JZUFRJT05fQURNSU58RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fENMT05FX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxDTE9ORV9BRE1JTnxHCi18cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8Q09OTkVDVElPTl9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q09OTkVDVElPTl9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxDUkVBVEUgUk9MRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFIFJPVVRJTkV8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fENSRUFURSBUQUJMRVNQQUNFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxDUkVBVEUgVEVNUE9SQVJZIFRBQkxFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFIFVTRVJ8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fENSRUFURSBWSUVXfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxERUxFVEV8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fERST1B8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fERST1AgUk9MRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8RU5DUllQVElPTl9LRVlfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEVWRU5UfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxFWEVDVVRFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxGSUxFfEcKLXxyb290fHxteXNxbC5pbmZvc2NoZW1hfGxvY2FsaG9zdHxGSVJFV0FMTF9FWEVNUFR8RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fEZJUkVXQUxMX0VYRU1QVHxHCi18cm9vdHx8bXlzcWwuc3lzfGxvY2FsaG9zdHxGSVJFV0FMTF9FWEVNUFR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEZJUkVXQUxMX0VYRU1QVHxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8RkxVU0hfT1BUSU1JWkVSX0NPU1RTfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxGTFVTSF9TVEFUVVN8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEZMVVNIX1RBQkxFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8RkxVU0hfVVNFUl9SRVNPVVJDRVN8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEdST1VQX1JFUExJQ0FUSU9OX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxHUk9VUF9SRVBMSUNBVElPTl9TVFJFQU18RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fElOREVYfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxJTk5PREJfUkVET19MT0dfQVJDSElWRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8SU5OT0RCX1JFRE9fTE9HX0VOQUJMRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8SU5TRVJUfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxMT0NLIFRBQkxFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UEFTU1dPUkRMRVNTX1VTRVJfQURNSU58RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFBFUlNJU1RfUk9fVkFSSUFCTEVTX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxQRVJTSVNUX1JPX1ZBUklBQkxFU19BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UFJPQ0VTU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVGRVJFTkNFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVMT0FEfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTiBDTElFTlR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJFUExJQ0FUSU9OIFNMQVZFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTl9BUFBMSUVSfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTl9TTEFWRV9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVTT1VSQ0VfR1JPVVBfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJFU09VUkNFX0dST1VQX1VTRVJ8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJPTEVfQURNSU58RwotfHJvb3R8fG15c3FsLmluZm9zY2hlbWF8bG9jYWxob3N0fFNFTEVDVHxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U0VMRUNUfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTRU5TSVRJVkVfVkFSSUFCTEVTX09CU0VSVkVSfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTRVJWSUNFX0NPTk5FQ1RJT05fQURNSU58RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNFU1NJT05fVkFSSUFCTEVTX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTRVNTSU9OX1ZBUklBQkxFU19BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U0VUX1VTRVJfSUR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIT1cgREFUQUJBU0VTfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTSE9XIFZJRVd8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIT1dfUk9VVElORXxHCi18cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8U0hVVERPV058RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIVVRET1dOfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxTVVBFUnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U1VQRVJ8RwotfHJvb3R8fG15c3FsLmluZm9zY2hlbWF8bG9jYWxob3N0fFNZU1RFTV9VU0VSfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxTWVNURU1fVVNFUnxHCi18cm9vdHx8bXlzcWwuc3lzfGxvY2FsaG9zdHxTWVNURU1fVVNFUnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U1lTVEVNX1VTRVJ8RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNZU1RFTV9WQVJJQUJMRVNfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNZU1RFTV9WQVJJQUJMRVNfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRBQkxFX0VOQ1JZUFRJT05fQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRFTEVNRVRSWV9MT0dfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRSSUdHRVJ8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFVQREFURXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8WEFfUkVDT1ZFUl9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Z3JhbnQgb3B0aW9ufEcKLXBlcmZvcm1hbmNlX3NjaGVtYXxzY2hlbWF8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNFTEVDVHxHCi1zeXN8c2NoZW1hfHxteXNxbC5zeXN8bG9jYWxob3N0fFRSSUdHRVJ8RzwvR3JhbnRzPgotICAgICAgPFNlcnZlclZlcnNpb24+OC4wLjQwPC9TZXJ2ZXJWZXJzaW9uPgotICAgIDwvcm9vdD4KLSAgICA8Y29sbGF0aW9uIGlkPSIyIiBwYXJlbnQ9IjEiIG5hbWU9ImFybXNjaWk4X2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+YXJtc2NpaTg8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMyIgcGFyZW50PSIxIiBuYW1lPSJhcm1zY2lpOF9iaW4iPgotICAgICAgPENoYXJzZXQ+YXJtc2NpaTg8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNCIgcGFyZW50PSIxIiBuYW1lPSJhc2NpaV9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmFzY2lpPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjUiIHBhcmVudD0iMSIgbmFtZT0iYXNjaWlfYmluIj4KLSAgICAgIDxDaGFyc2V0PmFzY2lpPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjYiIHBhcmVudD0iMSIgbmFtZT0iYmlnNV9jaGluZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PmJpZzU8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNyIgcGFyZW50PSIxIiBuYW1lPSJiaWc1X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5iaWc1PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjgiIHBhcmVudD0iMSIgbmFtZT0iYmluYXJ5Ij4KLSAgICAgIDxDaGFyc2V0PmJpbmFyeTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5IiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MF9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwMTI1MDwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMCIgcGFyZW50PSIxIiBuYW1lPSJjcDEyNTBfY3plY2hfY3MiPgotICAgICAgPENoYXJzZXQ+Y3AxMjUwPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjExIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MF9jcm9hdGlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTIiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUwX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTMiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUwX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTQiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2J1bGdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTUiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX3VrcmFpbmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTYiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTciIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+Y3AxMjUxPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE4IiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MV9nZW5lcmFsX2NzIj4KLSAgICAgIDxDaGFyc2V0PmNwMTI1MTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOSIgcGFyZW50PSIxIiBuYW1lPSJjcDEyNTZfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTY8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjAiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjU2X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjEiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjU3X2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+Y3AxMjU3PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1N19iaW4iPgotICAgICAgPENoYXJzZXQ+Y3AxMjU3PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1N19nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwMTI1NzwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNCIgcGFyZW50PSIxIiBuYW1lPSJjcDg1MF9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwODUwPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODUwX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDg1MDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNiIgcGFyZW50PSIxIiBuYW1lPSJjcDg1Ml9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwODUyPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI3IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODUyX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDg1MjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyOCIgcGFyZW50PSIxIiBuYW1lPSJjcDg2Nl9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwODY2PC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI5IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODY2X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDg2NjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzMCIgcGFyZW50PSIxIiBuYW1lPSJjcDkzMl9qYXBhbmVzZV9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDkzMjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzMSIgcGFyZW50PSIxIiBuYW1lPSJjcDkzMl9iaW4iPgotICAgICAgPENoYXJzZXQ+Y3A5MzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzIiIHBhcmVudD0iMSIgbmFtZT0iZGVjOF9zd2VkaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PmRlYzg8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzMiIHBhcmVudD0iMSIgbmFtZT0iZGVjOF9iaW4iPgotICAgICAgPENoYXJzZXQ+ZGVjODwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzNCIgcGFyZW50PSIxIiBuYW1lPSJldWNqcG1zX2phcGFuZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PmV1Y2pwbXM8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzUiIHBhcmVudD0iMSIgbmFtZT0iZXVjanBtc19iaW4iPgotICAgICAgPENoYXJzZXQ+ZXVjanBtczwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzNiIgcGFyZW50PSIxIiBuYW1lPSJldWNrcl9rb3JlYW5fY2kiPgotICAgICAgPENoYXJzZXQ+ZXVja3I8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzciIHBhcmVudD0iMSIgbmFtZT0iZXVja3JfYmluIj4KLSAgICAgIDxDaGFyc2V0PmV1Y2tyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjM4IiBwYXJlbnQ9IjEiIG5hbWU9ImdiMTgwMzBfY2hpbmVzZV9jaSI+Ci0gICAgICA8Q2hhcnNldD5nYjE4MDMwPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjM5IiBwYXJlbnQ9IjEiIG5hbWU9ImdiMTgwMzBfYmluIj4KLSAgICAgIDxDaGFyc2V0PmdiMTgwMzA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDAiIHBhcmVudD0iMSIgbmFtZT0iZ2IxODAzMF91bmljb2RlXzUyMF9jaSI+Ci0gICAgICA8Q2hhcnNldD5nYjE4MDMwPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjQxIiBwYXJlbnQ9IjEiIG5hbWU9ImdiMjMxMl9jaGluZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PmdiMjMxMjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0MiIgcGFyZW50PSIxIiBuYW1lPSJnYjIzMTJfYmluIj4KLSAgICAgIDxDaGFyc2V0PmdiMjMxMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0MyIgcGFyZW50PSIxIiBuYW1lPSJnYmtfY2hpbmVzZV9jaSI+Ci0gICAgICA8Q2hhcnNldD5nYms8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDQiIHBhcmVudD0iMSIgbmFtZT0iZ2JrX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5nYms8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDUiIHBhcmVudD0iMSIgbmFtZT0iZ2Vvc3RkOF9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0Pmdlb3N0ZDg8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDYiIHBhcmVudD0iMSIgbmFtZT0iZ2Vvc3RkOF9iaW4iPgotICAgICAgPENoYXJzZXQ+Z2Vvc3RkODwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0NyIgcGFyZW50PSIxIiBuYW1lPSJncmVla19nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmdyZWVrPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjQ4IiBwYXJlbnQ9IjEiIG5hbWU9ImdyZWVrX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5ncmVlazwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0OSIgcGFyZW50PSIxIiBuYW1lPSJoZWJyZXdfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5oZWJyZXc8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTAiIHBhcmVudD0iMSIgbmFtZT0iaGVicmV3X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5oZWJyZXc8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTEiIHBhcmVudD0iMSIgbmFtZT0iaHA4X2VuZ2xpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+aHA4PC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjUyIiBwYXJlbnQ9IjEiIG5hbWU9ImhwOF9iaW4iPgotICAgICAgPENoYXJzZXQ+aHA4PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjUzIiBwYXJlbnQ9IjEiIG5hbWU9ImtleWJjczJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5rZXliY3MyPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjU0IiBwYXJlbnQ9IjEiIG5hbWU9ImtleWJjczJfYmluIj4KLSAgICAgIDxDaGFyc2V0PmtleWJjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTUiIHBhcmVudD0iMSIgbmFtZT0ia29pOHJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5rb2k4cjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI1NiIgcGFyZW50PSIxIiBuYW1lPSJrb2k4cl9iaW4iPgotICAgICAgPENoYXJzZXQ+a29pOHI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTciIHBhcmVudD0iMSIgbmFtZT0ia29pOHVfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5rb2k4dTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI1OCIgcGFyZW50PSIxIiBuYW1lPSJrb2k4dV9iaW4iPgotICAgICAgPENoYXJzZXQ+a29pOHU8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTkiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2dlcm1hbjFfY2kiPgotICAgICAgPENoYXJzZXQ+bGF0aW4xPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjYwIiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluMV9zd2VkaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2MSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfZGFuaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2MiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjMiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjQiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+bGF0aW4xPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjY1IiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluMV9nZW5lcmFsX2NzIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2NiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfc3BhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjciIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2N6ZWNoX2NzIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2OCIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjI8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjkiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzAiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2Nyb2F0aWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI3MSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjJfYmluIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI3MiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjVfdHVya2lzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjU8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzMiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW41X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjU8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzQiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW43X2VzdG9uaWFuX2NzIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluNzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI3NSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjdfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjc8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzYiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW43X2dlbmVyYWxfY3MiPgotICAgICAgPENoYXJzZXQ+bGF0aW43PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijc3IiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluN19iaW4iPgotICAgICAgPENoYXJzZXQ+bGF0aW43PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijc4IiBwYXJlbnQ9IjEiIG5hbWU9Im1hY2NlX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+bWFjY2U8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzkiIHBhcmVudD0iMSIgbmFtZT0ibWFjY2VfYmluIj4KLSAgICAgIDxDaGFyc2V0Pm1hY2NlPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjgwIiBwYXJlbnQ9IjEiIG5hbWU9Im1hY3JvbWFuX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+bWFjcm9tYW48L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iODEiIHBhcmVudD0iMSIgbmFtZT0ibWFjcm9tYW5fYmluIj4KLSAgICAgIDxDaGFyc2V0Pm1hY3JvbWFuPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjgyIiBwYXJlbnQ9IjEiIG5hbWU9InNqaXNfamFwYW5lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+c2ppczwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI4MyIgcGFyZW50PSIxIiBuYW1lPSJzamlzX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5zamlzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg0IiBwYXJlbnQ9IjEiIG5hbWU9InN3ZTdfc3dlZGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5zd2U3PC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg1IiBwYXJlbnQ9IjEiIG5hbWU9InN3ZTdfYmluIj4KLSAgICAgIDxDaGFyc2V0PnN3ZTc8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iODYiIHBhcmVudD0iMSIgbmFtZT0idGlzNjIwX3RoYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dGlzNjIwPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg3IiBwYXJlbnQ9IjEiIG5hbWU9InRpczYyMF9iaW4iPgotICAgICAgPENoYXJzZXQ+dGlzNjIwPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg4IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg5IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfYmluIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iOTAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iOTEiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9pY2VsYW5kaWNfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5MiIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5MyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iOTQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zbG92ZW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5NSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijk2IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5NyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3NwYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5OCIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5OSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMDAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9jemVjaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwMSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2RhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwMiIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMDMiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zbG92YWtfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMDQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zcGFuaXNoMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwNSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTA2IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfcGVyc2lhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwNyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2VzcGVyYW50b19jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwOCIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwOSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3NpbmhhbGFfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9nZXJtYW4yX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTExIiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTIiIHBhcmVudD0iMSIgbmFtZT0idWNzMl91bmljb2RlXzUyMF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjExMyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3ZpZXRuYW1lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9nZW5lcmFsX215c3FsNTAwX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTE1IiBwYXJlbnQ9IjEiIG5hbWU9InVqaXNfamFwYW5lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+dWppczwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTYiIHBhcmVudD0iMSIgbmFtZT0idWppc19iaW4iPgotICAgICAgPENoYXJzZXQ+dWppczwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTciIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTgiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfYmluIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjExOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEyMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9pY2VsYW5kaWNfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTIxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTIyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEyMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9zbG92ZW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMjUiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3NwYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2N6ZWNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEzMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9kYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTMxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTMyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3Nsb3Zha19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMzMiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfc3BhbmlzaDJfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTM0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEzNSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9wZXJzaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEzNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9lc3BlcmFudG9fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTM3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMzgiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfc2luaGFsYV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMzkiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDAiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTQxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3VuaWNvZGVfNTIwX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl92aWV0bmFtZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNmxlX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTZsZTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDQiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZsZV9iaW4iPgotICAgICAgPENoYXJzZXQ+dXRmMTZsZTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDUiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDYiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfYmluIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0NyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9pY2VsYW5kaWNfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTQ5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTUwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE1MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9zbG92ZW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTUyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNTMiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3NwYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2N6ZWNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE1OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9kYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTYwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3Nsb3Zha19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjEiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfc3BhbmlzaDJfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTYyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE2MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9wZXJzaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE2NCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9lc3BlcmFudG9fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTY1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjYiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfc2luaGFsYV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjciIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjgiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTY5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3VuaWNvZGVfNTIwX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl92aWV0bmFtZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNzIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM190b2xvd2VyX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTczIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfYmluIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTc0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfdW5pY29kZV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2ljZWxhbmRpY19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19yb21hbmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3Nsb3Zlbmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE4MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2VzdG9uaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTgxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc3BhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE4MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM190dXJraXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTg0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfY3plY2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19kYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19saXRodWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTg3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc2xvdmFrX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTg4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc3BhbmlzaDJfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19yb21hbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE5MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3BlcnNpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19lc3BlcmFudG9fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19odW5nYXJpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19zaW5oYWxhX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTk0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE5NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2Nyb2F0aWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTk2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfdW5pY29kZV81MjBfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM192aWV0bmFtZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTk4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfZ2VuZXJhbF9teXNxbDUwMF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE5OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMDAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9iaW4iPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMDEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjAyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaWNlbGFuZGljX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjAzIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbGF0dmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIwNCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2xvdmVuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcG9saXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMDgiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zcGFuaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3dlZGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMTEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9jemVjaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxMiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2RhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMTQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zbG92YWtfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMTUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zcGFuaXNoMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjE3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcGVyc2lhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxOCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzcGVyYW50b19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NpbmhhbGFfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9nZXJtYW4yX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjIyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF91bmljb2RlXzUyMF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyNCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3ZpZXRuYW1lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjI2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZGVfcGJfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyNyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2lzXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjgiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sdl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjI5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcm9fMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NsXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMzEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9wbF8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjMyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXRfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMzQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zdl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjM1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfdHJfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2NzXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9kYV8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjM4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbHRfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NrXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9lc190cmFkXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sYV8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjQyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZW9fMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI0MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2h1XzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ocl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjQ1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfdmlfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI0NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9kZV9wYl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjQ4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaXNfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI0OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2x2XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9yb18wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjUxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2xfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3BsXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ldF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjU0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXNfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3N2XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF90cl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjU3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfY3NfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2RhXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sdF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjYwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2tfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzX3RyYWRfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2xhXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNjMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9lb18wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjY0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaHVfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2hyXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNjYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF92aV8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjY3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfamFfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2phXzA5MDBfYXNfY3Nfa3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNjkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF8wOTAwX2FzX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjcwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcnVfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI3MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3J1XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNzIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF96aF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjczIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfMDkwMF9iaW4iPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNzQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9uYl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjc1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbmJfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI3NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X25uXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ubl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjc4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3JfbGF0bl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjc5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3JfbGF0bl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjgwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfYnNfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI4MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2JzXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyODIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9iZ18wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjgzIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfYmdfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI4NCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2dsXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyODUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9nbF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjg2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbW5fY3lybF8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjg3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbW5fY3lybF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPHNjaGVtYSBpZD0iMjg4IiBwYXJlbnQ9IjEiIG5hbWU9Im15c3FsIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyODkiIHBhcmVudD0iMSIgbmFtZT0iaW5mb3JtYXRpb25fc2NoZW1hIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjNfZ2VuZXJhbF9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTAiIHBhcmVudD0iMSIgbmFtZT0icGVyZm9ybWFuY2Vfc2NoZW1hIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTEiIHBhcmVudD0iMSIgbmFtZT0ic3lzIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTIiIHBhcmVudD0iMSIgbmFtZT0iemhpaHVpIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTMiIHBhcmVudD0iMSIgbmFtZT0ic2NwIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTQiIHBhcmVudD0iMSIgbmFtZT0ic3AiPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF8wOTAwX2FpX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvc2NoZW1hPgotICAgIDxzY2hlbWEgaWQ9IjI5NSIgcGFyZW50PSIxIiBuYW1lPSJlbmdsaXNoX2FwcCI+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0XzA5MDBfYWlfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC9zY2hlbWE+Ci0gICAgPHNjaGVtYSBpZD0iMjk2IiBwYXJlbnQ9IjEiIG5hbWU9InB0cHJvamVjdCI+Ci0gICAgICA8Q3VycmVudD4xPC9DdXJyZW50PgotICAgICAgPExhc3RJbnRyb3NwZWN0aW9uTG9jYWxUaW1lc3RhbXA+MjAyNS0wNS0yNi4wNDoxMTo0NjwvTGFzdEludHJvc3BlY3Rpb25Mb2NhbFRpbWVzdGFtcD4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8dXNlciBpZD0iMjk3IiBwYXJlbnQ9IjEiIG5hbWU9Im15c3FsLmluZm9zY2hlbWEiPgotICAgICAgPENhbkxvZ2luPjA8L0NhbkxvZ2luPgotICAgICAgPEhvc3Q+bG9jYWxob3N0PC9Ib3N0PgotICAgICAgPFBsdWdpbj5jYWNoaW5nX3NoYTJfcGFzc3dvcmQ8L1BsdWdpbj4KLSAgICA8L3VzZXI+Ci0gICAgPHVzZXIgaWQ9IjI5OCIgcGFyZW50PSIxIiBuYW1lPSJteXNxbC5zZXNzaW9uIj4KLSAgICAgIDxDYW5Mb2dpbj4wPC9DYW5Mb2dpbj4KLSAgICAgIDxIb3N0PmxvY2FsaG9zdDwvSG9zdD4KLSAgICAgIDxQbHVnaW4+Y2FjaGluZ19zaGEyX3Bhc3N3b3JkPC9QbHVnaW4+Ci0gICAgPC91c2VyPgotICAgIDx1c2VyIGlkPSIyOTkiIHBhcmVudD0iMSIgbmFtZT0ibXlzcWwuc3lzIj4KLSAgICAgIDxDYW5Mb2dpbj4wPC9DYW5Mb2dpbj4KLSAgICAgIDxIb3N0PmxvY2FsaG9zdDwvSG9zdD4KLSAgICAgIDxQbHVnaW4+Y2FjaGluZ19zaGEyX3Bhc3N3b3JkPC9QbHVnaW4+Ci0gICAgPC91c2VyPgotICAgIDx1c2VyIGlkPSIzMDAiIHBhcmVudD0iMSIgbmFtZT0icm9vdCI+Ci0gICAgICA8SG9zdD5sb2NhbGhvc3Q8L0hvc3Q+Ci0gICAgICA8UGx1Z2luPmNhY2hpbmdfc2hhMl9wYXNzd29yZDwvUGx1Z2luPgotICAgIDwvdXNlcj4KLSAgICA8dGFibGUgaWQ9IjMwMSIgcGFyZW50PSIyOTYiIG5hbWU9ImNvbGxlY3Rpb25zIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMwMiIgcGFyZW50PSIyOTYiIG5hbWU9ImNvbW1lbnRfbGlrZXMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzAzIiBwYXJlbnQ9IjI5NiIgbmFtZT0iY29tbWVudHMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzA0IiBwYXJlbnQ9IjI5NiIgbmFtZT0iZG93bmxvYWRzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMwNSIgcGFyZW50PSIyOTYiIG5hbWU9ImR5bmFtaWNfY29tbWVudCI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMDYiIHBhcmVudD0iMjk2IiBuYW1lPSJkeW5hbWljX2xpa2VzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMwNyIgcGFyZW50PSIyOTYiIG5hbWU9ImV4cGVyaWVuY2VfaGlzdG9yeSI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMDgiIHBhcmVudD0iMjk2IiBuYW1lPSJmb2xsb3ciPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzA5IiBwYXJlbnQ9IjI5NiIgbmFtZT0iZnJpZW5kX3JlbGF0aW9uIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxMCIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX2NvbW1lbnRzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxMSIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX2ludGVyZXN0cyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMTIiIHBhcmVudD0iMjk2IiBuYW1lPSJncm91cF9tZW1iZXJzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxMyIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX3Bvc3QiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzE0IiBwYXJlbnQ9IjI5NiIgbmFtZT0ibGV2ZWwiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzE1IiBwYXJlbnQ9IjI5NiIgbmFtZT0ibGlrZXMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzE2IiBwYXJlbnQ9IjI5NiIgbmFtZT0icG9zdCI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMTciIHBhcmVudD0iMjk2IiBuYW1lPSJwcm9tb3Rpb25zIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxOCIgcGFyZW50PSIyOTYiIG5hbWU9InNlZWRfY29tbWVudF9saWtlcyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMTkiIHBhcmVudD0iMjk2IiBuYW1lPSJzZWVkX2NvbW1lbnRzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMyMCIgcGFyZW50PSIyOTYiIG5hbWU9InNlZWRjb21tZW50bGlrZSI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjEiIHBhcmVudD0iMjk2IiBuYW1lPSJzZWVkcyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjIiIHBhcmVudD0iMjk2IiBuYW1lPSJ0YXNrcyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjMiIHBhcmVudD0iMjk2IiBuYW1lPSJ0b3JyZW50cyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjQiIHBhcmVudD0iMjk2IiBuYW1lPSJ1c2VyIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMyNSIgcGFyZW50PSIyOTYiIG5hbWU9InVzZXJfZHluYW1pYyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjYiIHBhcmVudD0iMjk2IiBuYW1lPSJ1c2VyX2ludml0ZV9jb2RlIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMyNyIgcGFyZW50PSIyOTYiIG5hbWU9InVzZXJfbWVzc2FnZXMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzI4IiBwYXJlbnQ9IjI5NiIgbmFtZT0idXNlcl90YXNrX3N0YXR1cyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPGNvbHVtbiBpZD0iMzI5IiBwYXJlbnQ9IjMwMSIgbmFtZT0iY29sbGVjdGlvbklkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjE8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjMzMCIgcGFyZW50PSIzMDEiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzMzEiIHBhcmVudD0iMzAxIiBuYW1lPSJwb3N0Tm8iPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjMzMiIgcGFyZW50PSIzMDEiIG5hbWU9ImNvbGxlY3Rpb25zX2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzMzIiBwYXJlbnQ9IjMwMSIgbmFtZT0iY29sbGVjdGlvbnNfaWJma18yIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPE9uVXBkYXRlPmNhc2NhZGU8L09uVXBkYXRlPgotICAgICAgPFJlZkNvbE5hbWVzPnBvc3RObzwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnBvc3Q8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iMzM0IiBwYXJlbnQ9IjMwMSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Y29sbGVjdGlvbklkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjMzNSIgcGFyZW50PSIzMDEiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjMzNiIgcGFyZW50PSIzMDEiIG5hbWU9InBvc3RObyI+Ci0gICAgICA8Q29sTmFtZXM+cG9zdE5vPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iMzM3IiBwYXJlbnQ9IjMwMSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iMzM4IiBwYXJlbnQ9IjMwMiIgbmFtZT0iY29tbWVudF9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjMzOSIgcGFyZW50PSIzMDIiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNDAiIHBhcmVudD0iMzAyIiBuYW1lPSJpc19saWtlZCI+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzQxIiBwYXJlbnQ9IjMwMiIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzEwIj4KLSAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz5jb21tZW50X2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+Y29tbWVudHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzQyIiBwYXJlbnQ9IjMwMiIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzExIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSIzNDMiIHBhcmVudD0iMzAyIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkCi11c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM0NCIgcGFyZW50PSIzMDIiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8xMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjM0NSIgcGFyZW50PSIzMDIiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM0NiIgcGFyZW50PSIzMDMiIG5hbWU9ImNvbW1lbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MTU8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM0NyIgcGFyZW50PSIzMDMiIG5hbWU9InBvc3RfaWQiPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM0OCIgcGFyZW50PSIzMDMiIG5hbWU9ImNvbV9jb21tZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNDkiIHBhcmVudD0iMzAzIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNTAiIHBhcmVudD0iMzAzIiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzUxIiBwYXJlbnQ9IjMwMyIgbmFtZT0iaXNfYW5vbnltb3VzIj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnRpbnlpbnQoMSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzUyIiBwYXJlbnQ9IjMwMyIgbmFtZT0ibGlrZXNfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM1MyIgcGFyZW50PSIzMDMiIG5hbWU9InJlcGx5X2NvdW50Ij4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNTQiIHBhcmVudD0iMzAzIiBuYW1lPSJjb21tZW50X3RpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj45PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzU1IiBwYXJlbnQ9IjMwMyIgbmFtZT0iZmtfcG9zdF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+cG9zdF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+cG9zdE5vPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+cG9zdDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSIzNTYiIHBhcmVudD0iMzAzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfNiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iMzU3IiBwYXJlbnQ9IjMwMyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzNTgiIHBhcmVudD0iMzAzIiBuYW1lPSJma19wb3N0X2lkIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzNTkiIHBhcmVudD0iMzAzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfOSI+Ci0gICAgICA8Q29sTmFtZXM+Y29tX2NvbW1lbnRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM2MCIgcGFyZW50PSIzMDMiIG5hbWU9ImZrX3VzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSIzNjEiIHBhcmVudD0iMzAzIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSIzNjIiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF9pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4zPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjMiIHBhcmVudD0iMzA0IiBuYW1lPSJ0b3JyZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjQiIHBhcmVudD0iMzA0IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjUiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjYiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF9zaXplIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjM2NyIgcGFyZW50PSIzMDQiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF81Ij4KLSAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz50b3JyZW50X2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dG9ycmVudHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzY4IiBwYXJlbnQ9IjMwNCIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjM2OSIgcGFyZW50PSIzMDQiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmRvd25sb2FkX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM3MCIgcGFyZW50PSIzMDQiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF81Ij4KLSAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzNzEiIHBhcmVudD0iMzA0IiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfNCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjM3MiIgcGFyZW50PSIzMDQiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM3MyIgcGFyZW50PSIzMDUiIG5hbWU9ImNvbW1lbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzc0IiBwYXJlbnQ9IjMwNSIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM3NSIgcGFyZW50PSIzMDUiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNzYiIHBhcmVudD0iMzA1IiBuYW1lPSJjb21tZW50X2NvbnRlbnQiPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM3NyIgcGFyZW50PSIzMDUiIG5hbWU9ImNvbW1lbnRfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzc4IiBwYXJlbnQ9IjMwNSIgbmFtZT0iaXNfYW5vbnltb3VzIj4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnRpbnlpbnQoMSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzc5IiBwYXJlbnQ9IjMwNSIgbmFtZT0icGFyZW50X2NvbW1lbnRfaWQiPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzgwIiBwYXJlbnQ9IjMwNSIgbmFtZT0iZHluYW1pY19jb21tZW50X2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+ZHluYW1pY19pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+ZHluYW1pY19pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXJfZHluYW1pYzwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSIzODEiIHBhcmVudD0iMzA1IiBuYW1lPSJkeW5hbWljX2NvbW1lbnRfaWJma18yIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSIzODIiIHBhcmVudD0iMzA1IiBuYW1lPSJkeW5hbWljX2NvbW1lbnRfaWJma18zIj4KLSAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPmR5bmFtaWNfY29tbWVudDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSIzODMiIHBhcmVudD0iMzA1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM4NCIgcGFyZW50PSIzMDUiIG5hbWU9ImR5bmFtaWNfaWQiPgotICAgICAgPENvbE5hbWVzPmR5bmFtaWNfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM4NSIgcGFyZW50PSIzMDUiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM4NiIgcGFyZW50PSIzMDUiIG5hbWU9InBhcmVudF9jb21tZW50X2lkIj4KLSAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjM4NyIgcGFyZW50PSIzMDUiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM4OCIgcGFyZW50PSIzMDYiIG5hbWU9Imxpa2VfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzg5IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM5MCIgcGFyZW50PSIzMDYiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzOTEiIHBhcmVudD0iMzA2IiBuYW1lPSJsaWtlX3RpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzkyIiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19saWtlc19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPmR5bmFtaWNfaWQ8L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPFJlZkNvbE5hbWVzPmR5bmFtaWNfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyX2R5bmFtaWM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzkzIiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19saWtlc19pYmZrXzIiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjM5NCIgcGFyZW50PSIzMDYiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmxpa2VfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iMzk1IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8Q29sTmFtZXM+ZHluYW1pY19pZAotdXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzOTYiIHBhcmVudD0iMzA2IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iMzk3IiBwYXJlbnQ9IjMwNiIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGtleSBpZD0iMzk4IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5keW5hbWljX2lkPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM5OSIgcGFyZW50PSIzMDciIG5hbWU9Imhpc3RvcnlfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MTwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDAwIiBwYXJlbnQ9IjMwNyIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQwMSIgcGFyZW50PSIzMDciIG5hbWU9ImV4cGVyaWVuY2VfY2hhbmdlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDAyIiBwYXJlbnQ9IjMwNyIgbmFtZT0ic291cmNlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDAzIiBwYXJlbnQ9IjMwNyIgbmFtZT0idXBkYXRlX3RpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDA0IiBwYXJlbnQ9IjMwNyIgbmFtZT0iZXhwZXJpZW5jZV9oaXN0b3J5X2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNDA1IiBwYXJlbnQ9IjMwNyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+aGlzdG9yeV9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI0MDYiIHBhcmVudD0iMzA3IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDA3IiBwYXJlbnQ9IjMwNyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDA4IiBwYXJlbnQ9IjMwOCIgbmFtZT0icmVjb3JkX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjU8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQwOSIgcGFyZW50PSIzMDgiIG5hbWU9ImZvbGxvd2VyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDEwIiBwYXJlbnQ9IjMwOCIgbmFtZT0iZm9sbG93ZWRfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MTEiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MTIiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz5mb2xsb3dlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNDEzIiBwYXJlbnQ9IjMwOCIgbmFtZT0iZm9sbG93X2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+Zm9sbG93ZWRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQxNCIgcGFyZW50PSIzMDgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnJlY29yZF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI0MTUiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+Zm9sbG93ZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQxNiIgcGFyZW50PSIzMDgiIG5hbWU9ImZvbGxvd2VkX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5mb2xsb3dlZF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjQxNyIgcGFyZW50PSIzMDgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjQxOCIgcGFyZW50PSIzMDkiIG5hbWU9InJlbGF0aW9uX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjI8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQxOSIgcGFyZW50PSIzMDkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MjAiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MjEiIHBhcmVudD0iMzA5IiBuYW1lPSJjcmVhdGVfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MjIiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfcmVsYXRpb25faWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MjMiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfcmVsYXRpb25faWJma18yIj4KLSAgICAgIDxDb2xOYW1lcz5mcmllbmRfaWQ8L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQyNCIgcGFyZW50PSIzMDkiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnJlbGF0aW9uX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQyNSIgcGFyZW50PSIzMDkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQyNiIgcGFyZW50PSIzMDkiIG5hbWU9ImZyaWVuZF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+ZnJpZW5kX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDI3IiBwYXJlbnQ9IjMwOSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDI4IiBwYXJlbnQ9IjMxMCIgbmFtZT0iY29tbWVudF9pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD41PC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MjkiIHBhcmVudD0iMzEwIiBuYW1lPSJncm91cF9wb3N0X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MzAiIHBhcmVudD0iMzEwIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MzEiIHBhcmVudD0iMzEwIiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MzIiIHBhcmVudD0iMzEwIiBuYW1lPSJwYXJlbnRfY29tbWVudF9pZCI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDMzIiBwYXJlbnQ9IjMxMCIgbmFtZT0idGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjY8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MzQiIHBhcmVudD0iMzEwIiBuYW1lPSJncm91cF9jb21tZW50c19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5ncm91cF9wb3N0PC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjQzNSIgcGFyZW50PSIzMTAiIG5hbWU9Imdyb3VwX2NvbW1lbnRzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNDM2IiBwYXJlbnQ9IjMxMCIgbmFtZT0iZ3JvdXBfY29tbWVudHNfaWJma18zIj4KLSAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPmdyb3VwX2NvbW1lbnRzPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQzNyIgcGFyZW50PSIzMTAiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmNvbW1lbnRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDM4IiBwYXJlbnQ9IjMxMCIgbmFtZT0iZ3JvdXBfcG9zdF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+Z3JvdXBfcG9zdF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDM5IiBwYXJlbnQ9IjMxMCIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDQwIiBwYXJlbnQ9IjMxMCIgbmFtZT0icGFyZW50X2NvbW1lbnRfaWQiPgotICAgICAgPENvbE5hbWVzPnBhcmVudF9jb21tZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDQxIiBwYXJlbnQ9IjMxMCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDQyIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+NDwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQzIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfbmFtZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ0NCIgcGFyZW50PSIzMTEiIG5hbWU9ImRlc2NyaXB0aW9uIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NDUiIHBhcmVudD0iMzExIiBuYW1lPSJjcmVhdGVfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQ2IiBwYXJlbnQ9IjMxMSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQ3IiBwYXJlbnQ9IjMxMSIgbmFtZT0ibWVtYmVyX2NvdW50Ij4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NDgiIHBhcmVudD0iMzExIiBuYW1lPSJjYXRlZ29yeSI+Ci0gICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQ5IiBwYXJlbnQ9IjMxMSIgbmFtZT0iY292ZXJfaW1hZ2UiPgotICAgICAgPFBvc2l0aW9uPjg8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDUwIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfaW50ZXJlc3RzX2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNDUxIiBwYXJlbnQ9IjMxMSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Z3JvdXBfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDUyIiBwYXJlbnQ9IjMxMSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjQ1MyIgcGFyZW50PSIzMTEiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjQ1NCIgcGFyZW50PSIzMTIiIG5hbWU9InJlbGF0aW9uX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjQ8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ1NSIgcGFyZW50PSIzMTIiIG5hbWU9Imdyb3VwX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDU2IiBwYXJlbnQ9IjMxMiIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDU3IiBwYXJlbnQ9IjMxMiIgbmFtZT0iZ3JvdXBfbWVtYmVyc19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz5ncm91cF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPmdyb3VwX2ludGVyZXN0czwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0NTgiIHBhcmVudD0iMzEyIiBuYW1lPSJncm91cF9tZW1iZXJzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNDU5IiBwYXJlbnQ9IjMxMiIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+cmVsYXRpb25faWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDYwIiBwYXJlbnQ9IjMxMiIgbmFtZT0idW5pcXVlX2dyb3VwX3VzZXIiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX2lkCi11c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQ2MSIgcGFyZW50PSIzMTIiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI0NjIiIHBhcmVudD0iMzEyIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8a2V5IGlkPSI0NjMiIHBhcmVudD0iMzEyIiBuYW1lPSJ1bmlxdWVfZ3JvdXBfdXNlciI+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT51bmlxdWVfZ3JvdXBfdXNlcjwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI0NjQiIHBhcmVudD0iMzEzIiBuYW1lPSJncm91cF9wb3N0X2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjU8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ2NSIgcGFyZW50PSIzMTMiIG5hbWU9Imdyb3VwX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NjYiIHBhcmVudD0iMzEzIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NjciIHBhcmVudD0iMzEzIiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NjgiIHBhcmVudD0iMzEzIiBuYW1lPSJ0aXRsZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ2OSIgcGFyZW50PSIzMTMiIG5hbWU9ImltYWdlIj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NzAiIHBhcmVudD0iMzEzIiBuYW1lPSJsaWtlX2NvdW50Ij4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NzEiIHBhcmVudD0iMzEzIiBuYW1lPSJjb21tZW50X2NvdW50Ij4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NzIiIHBhcmVudD0iMzEzIiBuYW1lPSJ0aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+OTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjQ3MyIgcGFyZW50PSIzMTMiIG5hbWU9Imdyb3VwX3Bvc3RfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz5ncm91cF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+Z3JvdXBfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5ncm91cF9pbnRlcmVzdHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNDc0IiBwYXJlbnQ9IjMxMyIgbmFtZT0iZ3JvdXBfcG9zdF9pYmZrXzIiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQ3NSIgcGFyZW50PSIzMTMiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDc2IiBwYXJlbnQ9IjMxMyIgbmFtZT0iZ3JvdXBfaWQiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI0NzciIHBhcmVudD0iMzEzIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDc4IiBwYXJlbnQ9IjMxMyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDc5IiBwYXJlbnQ9IjMxNCIgbmFtZT0ibGV2ZWxfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0ODAiIHBhcmVudD0iMzE0IiBuYW1lPSJsZXZlbF9uYW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDgxIiBwYXJlbnQ9IjMxNCIgbmFtZT0icmVxdWlyZWRfZXhwZXJpZW5jZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ4MiIgcGFyZW50PSIzMTQiIG5hbWU9InJlcXVpcmVkX3NoYXJlX3JhdGlvIj4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ4MyIgcGFyZW50PSIzMTQiIG5hbWU9InJlcXVpcmVkX3VwbG9hZF9nYiI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0ODQiIHBhcmVudD0iMzE0IiBuYW1lPSJyZXF1aXJlZF9zZWVkaW5nX2hvdXJzIj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ4NSIgcGFyZW50PSIzMTQiIG5hbWU9InBlcm1pc3Npb25zIj4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8aW5kZXggaWQ9IjQ4NiIgcGFyZW50PSIzMTQiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmxldmVsX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI0ODciIHBhcmVudD0iMzE0IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI0ODgiIHBhcmVudD0iMzE1IiBuYW1lPSJsaWtlSWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDg5IiBwYXJlbnQ9IjMxNSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ5MCIgcGFyZW50PSIzMTUiIG5hbWU9InBvc3RObyI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDkxIiBwYXJlbnQ9IjMxNSIgbmFtZT0ibGlrZXNfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxPblVwZGF0ZT5jYXNjYWRlPC9PblVwZGF0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0OTIiIHBhcmVudD0iMzE1IiBuYW1lPSJsaWtlc19pYmZrXzIiPgotICAgICAgPENvbE5hbWVzPnBvc3RObzwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+cG9zdE5vPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+cG9zdDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI0OTMiIHBhcmVudD0iMzE1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5saWtlSWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDk0IiBwYXJlbnQ9IjMxNSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDk1IiBwYXJlbnQ9IjMxNSIgbmFtZT0icG9zdE5vIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI0OTYiIHBhcmVudD0iMzE1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI0OTciIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0Tm8iPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+Mjc8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ5OCIgcGFyZW50PSIzMTYiIG5hbWU9InVzZXJJZCI+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDk5IiBwYXJlbnQ9IjMxNiIgbmFtZT0icG9zdENvbnRlbnQiPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUwMCIgcGFyZW50PSIzMTYiIG5hbWU9ImltYWdlVXJsIj4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MDEiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0VGltZSI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MDIiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0TGlrZU51bSI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTAzIiBwYXJlbnQ9IjMxNiIgbmFtZT0icG9zdENvbGxlY3ROdW0iPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUwNCIgcGFyZW50PSIzMTYiIG5hbWU9InRpdGxlIj4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MDUiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0VHlwZSI+Ci0gICAgICA8UG9zaXRpb24+OTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1MDYiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0X2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcklkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI1MDciIHBhcmVudD0iMzE2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNTA4IiBwYXJlbnQ9IjMxNiIgbmFtZT0idXNlcklkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VySWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI1MDkiIHBhcmVudD0iMzE2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI1MTAiIHBhcmVudD0iMzE3IiBuYW1lPSJwcm9tb19pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4zPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTEiIHBhcmVudD0iMzE3IiBuYW1lPSJuYW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTEyIiBwYXJlbnQ9IjMxNyIgbmFtZT0idXBsb2FkX2NvZWZmIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTMiIHBhcmVudD0iMzE3IiBuYW1lPSJkb3dubG9hZF9jb2VmZiI+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTQiIHBhcmVudD0iMzE3IiBuYW1lPSJ0aW1lX3JhbmdlIj4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTUiIHBhcmVudD0iMzE3IiBuYW1lPSJjcml0ZXJpYSI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTE2IiBwYXJlbnQ9IjMxNyIgbmFtZT0icF9zdGFydF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTciIHBhcmVudD0iMzE3IiBuYW1lPSJwX2VuZF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8aW5kZXggaWQ9IjUxOCIgcGFyZW50PSIzMTciIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnByb21vX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI1MTkiIHBhcmVudD0iMzE3IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI1MjAiIHBhcmVudD0iMzE4IiBuYW1lPSJpZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4xPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MjEiIHBhcmVudD0iMzE4IiBuYW1lPSJjb21tZW50X2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTIyIiBwYXJlbnQ9IjMxOCIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUyMyIgcGFyZW50PSIzMTgiIG5hbWU9ImlzX2xpa2VkIj4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4xPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNTI0IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfY29tbWVudCI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnNlZWRfY29tbWVudHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNTI1IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfdXNlciI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNTI2IiBwYXJlbnQ9IjMxOCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+aWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNTI3IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfY29tbWVudCI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNTI4IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfdXNlciI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjUyOSIgcGFyZW50PSIzMTgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjUzMCIgcGFyZW50PSIzMTkiIG5hbWU9ImNvbW1lbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MTwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTMxIiBwYXJlbnQ9IjMxOSIgbmFtZT0ic2VlZF9pZCI+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTMyIiBwYXJlbnQ9IjMxOSIgbmFtZT0iY29tX2NvbW1lbnRfaWQiPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzMyIgcGFyZW50PSIzMTkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzNCIgcGFyZW50PSIzMTkiIG5hbWU9ImNvbnRlbnQiPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzNSIgcGFyZW50PSIzMTkiIG5hbWU9ImlzX2Fub255bW91cyI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzNiIgcGFyZW50PSIzMTkiIG5hbWU9Imxpa2VzX2NvdW50Ij4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MzciIHBhcmVudD0iMzE5IiBuYW1lPSJyZXBseV9jb3VudCI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTM4IiBwYXJlbnQ9IjMxOSIgbmFtZT0iY29tbWVudF90aW1lIj4KLSAgICAgIDxQb3NpdGlvbj45PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNTM5IiBwYXJlbnQ9IjMxOSIgbmFtZT0ic2VlZF9jb21tZW50c19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPnNlZWRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnNlZWRfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5zZWVkczwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1NDAiIHBhcmVudD0iMzE5IiBuYW1lPSJzZWVkX2NvbW1lbnRzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNTQxIiBwYXJlbnQ9IjMxOSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1NDIiIHBhcmVudD0iMzE5IiBuYW1lPSJzZWVkX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5zZWVkX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1NDMiIHBhcmVudD0iMzE5IiBuYW1lPSJjb21fY29tbWVudF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+Y29tX2NvbW1lbnRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjU0NCIgcGFyZW50PSIzMTkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI1NDUiIHBhcmVudD0iMzE5IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI1NDYiIHBhcmVudD0iMzIwIiBuYW1lPSJpZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4xPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NDciIHBhcmVudD0iMzIwIiBuYW1lPSJjb21tZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NDgiIHBhcmVudD0iMzIwIiBuYW1lPSJpc19saWtlZCI+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaXQoMSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTQ5IiBwYXJlbnQ9IjMyMCIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGluZGV4IGlkPSI1NTAiIHBhcmVudD0iMzIwIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNTUxIiBwYXJlbnQ9IjMyMCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNTUyIiBwYXJlbnQ9IjMyMSIgbmFtZT0ic2VlZF9pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD40PC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTMiIHBhcmVudD0iMzIxIiBuYW1lPSJ0b3JyZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTQiIHBhcmVudD0iMzIxIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTUiIHBhcmVudD0iMzIxIiBuYW1lPSJzdGFydF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTYiIHBhcmVudD0iMzIxIiBuYW1lPSJlbmRfdGltZSI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTciIHBhcmVudD0iMzIxIiBuYW1lPSJkdXJhdGlvbiI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1NTgiIHBhcmVudD0iMzIxIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMyI+Ci0gICAgICA8Q29sTmFtZXM+dG9ycmVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dG9ycmVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnRvcnJlbnRzPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjU1OSIgcGFyZW50PSIzMjEiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8yIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI1NjAiIHBhcmVudD0iMzIxIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5zZWVkX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjU2MSIgcGFyZW50PSIzMjEiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8zIj4KLSAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1NjIiIHBhcmVudD0iMzIxIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjU2MyIgcGFyZW50PSIzMjEiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjU2NCIgcGFyZW50PSIzMjIiIG5hbWU9InRhc2tfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoNTApfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU2NSIgcGFyZW50PSIzMjIiIG5hbWU9InRpdGxlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTY2IiBwYXJlbnQ9IjMyMiIgbmFtZT0iZGVzY3JpcHRpb24iPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NjciIHBhcmVudD0iMzIyIiBuYW1lPSJyZXdhcmRfZXhwZXJpZW5jZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU2OCIgcGFyZW50PSIzMjIiIG5hbWU9InJld2FyZF9wb2ludHMiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8aW5kZXggaWQ9IjU2OSIgcGFyZW50PSIzMjIiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnRhc2tfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjU3MCIgcGFyZW50PSIzMjIiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjU3MSIgcGFyZW50PSIzMjMiIG5hbWU9InRvcnJlbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTcyIiBwYXJlbnQ9IjMyMyIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTczIiBwYXJlbnQ9IjMyMyIgbmFtZT0idGl0bGUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzQiIHBhcmVudD0iMzIzIiBuYW1lPSJkZXNjcmlwdGlvbiI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dGV4dHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzUiIHBhcmVudD0iMzIzIiBuYW1lPSJ0YWdzIj4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzYiIHBhcmVudD0iMzIzIiBuYW1lPSJjYXRlZ29yeSI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDUwKXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzciIHBhcmVudD0iMzIzIiBuYW1lPSJ1cGxvYWRfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1NzgiIHBhcmVudD0iMzIzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNTc5IiBwYXJlbnQ9IjMyMyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+dG9ycmVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1ODAiIHBhcmVudD0iMzIzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjU4MSIgcGFyZW50PSIzMjMiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjU4MiIgcGFyZW50PSIzMjQiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+NTwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTgzIiBwYXJlbnQ9IjMyNCIgbmFtZT0idXNlcm5hbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1ODQiIHBhcmVudD0iMzI0IiBuYW1lPSJhdmF0YXJfdXJsIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTg1IiBwYXJlbnQ9IjMyNCIgbmFtZT0iZW1haWwiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1ODYiIHBhcmVudD0iMzI0IiBuYW1lPSJwYXNzd29yZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU4NyIgcGFyZW50PSIzMjQiIG5hbWU9InJvbGUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1ODgiIHBhcmVudD0iMzI0IiBuYW1lPSJpbnZpdGVfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU4OSIgcGFyZW50PSIzMjQiIG5hbWU9ImxldmVsIj4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1OTAiIHBhcmVudD0iMzI0IiBuYW1lPSJ1cGxvYWRfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjk8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZmxvYXR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTkxIiBwYXJlbnQ9IjMyNCIgbmFtZT0iZG93bmxvYWRfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjEwPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5MiIgcGFyZW50PSIzMjQiIG5hbWU9InNoYXJlX3JhdGUiPgotICAgICAgPFBvc2l0aW9uPjExPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5MyIgcGFyZW50PSIzMjQiIG5hbWU9InJlZ2lzdHJhdGlvbl9kYXRlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTk0IiBwYXJlbnQ9IjMyNCIgbmFtZT0ibGFzdF9sb2dpbl90aW1lIj4KLSAgICAgIDxQb3NpdGlvbj4xMzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1OTUiIHBhcmVudD0iMzI0IiBuYW1lPSJ1c2VyX3BvaW50cyI+Ci0gICAgICA8UG9zaXRpb24+MTQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5NiIgcGFyZW50PSIzMjQiIG5hbWU9ImlzX3Byb21vIj4KLSAgICAgIDxQb3NpdGlvbj4xNTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5NyIgcGFyZW50PSIzMjQiIG5hbWU9ImN1cnJlbnRfZXhwZXJpZW5jZSI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE2PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1OTgiIHBhcmVudD0iMzI0IiBuYW1lPSJjdXJyZW50X3NlZWRpbmdfaG91cnMiPgotICAgICAgPERlZmF1bHRFeHByZXNzaW9uPjA8L0RlZmF1bHRFeHByZXNzaW9uPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xNzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjU5OSIgcGFyZW50PSIzMjQiIG5hbWU9ImZrX3VzZXJfbGV2ZWwiPgotICAgICAgPENvbE5hbWVzPmxldmVsPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5zZXQtbnVsbDwvT25EZWxldGU+Ci0gICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+bGV2ZWxfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5sZXZlbDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI2MDAiIHBhcmVudD0iMzI0IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYwMSIgcGFyZW50PSIzMjQiIG5hbWU9ImZrX3VzZXJfbGV2ZWwiPgotICAgICAgPENvbE5hbWVzPmxldmVsPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNjAyIiBwYXJlbnQ9IjMyNCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNjAzIiBwYXJlbnQ9IjMyNSIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD41PC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MDQiIHBhcmVudD0iMzI1IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjA1IiBwYXJlbnQ9IjMyNSIgbmFtZT0idGl0bGUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MDYiIHBhcmVudD0iMzI1IiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MDciIHBhcmVudD0iMzI1IiBuYW1lPSJpbWFnZV91cmwiPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYwOCIgcGFyZW50PSIzMjUiIG5hbWU9InRpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYwOSIgcGFyZW50PSIzMjUiIG5hbWU9Imxpa2VzX2NvdW50Ij4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MTAiIHBhcmVudD0iMzI1IiBuYW1lPSJjb21tZW50c19jb3VudCI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2MTEiIHBhcmVudD0iMzI1IiBuYW1lPSJ1c2VyX2R5bmFtaWNfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI2MTIiIHBhcmVudD0iMzI1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5keW5hbWljX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYxMyIgcGFyZW50PSIzMjUiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI2MTQiIHBhcmVudD0iMzI1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI2MTUiIHBhcmVudD0iMzI2IiBuYW1lPSJpbnZpdGVfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MjwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjE2IiBwYXJlbnQ9IjMyNiIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYxNyIgcGFyZW50PSIzMjYiIG5hbWU9Imludml0ZV9jb2RlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjE4IiBwYXJlbnQ9IjMyNiIgbmFtZT0iaXNfdXNlZCI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYxOSIgcGFyZW50PSIzMjYiIG5hbWU9ImNyZWF0ZWRfYXQiPgotICAgICAgPERlZmF1bHRFeHByZXNzaW9uPkNVUlJFTlRfVElNRVNUQU1QPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnRpbWVzdGFtcHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjYyMCIgcGFyZW50PSIzMjYiIG5hbWU9InVzZXJfaW52aXRlX2NvZGVfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI2MjEiIHBhcmVudD0iMzI2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5pbnZpdGVfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNjIyIiBwYXJlbnQ9IjMyNiIgbmFtZT0iaW52aXRlX2NvZGUiPgotICAgICAgPENvbE5hbWVzPmludml0ZV9jb2RlPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYyMyIgcGFyZW50PSIzMjYiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI2MjQiIHBhcmVudD0iMzI2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8a2V5IGlkPSI2MjUiIHBhcmVudD0iMzI2IiBuYW1lPSJpbnZpdGVfY29kZSI+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5pbnZpdGVfY29kZTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI2MjYiIHBhcmVudD0iMzI3IiBuYW1lPSJtZXNzYWdlX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjE8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYyNyIgcGFyZW50PSIzMjciIG5hbWU9InNlbmRlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYyOCIgcGFyZW50PSIzMjciIG5hbWU9InJlY2VpdmVyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjI5IiBwYXJlbnQ9IjMyNyIgbmFtZT0iY29udGVudCI+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjMwIiBwYXJlbnQ9IjMyNyIgbmFtZT0idGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2MzEiIHBhcmVudD0iMzI3IiBuYW1lPSJ1c2VyX21lc3NhZ2VzX2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+c2VuZGVyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2MzIiIHBhcmVudD0iMzI3IiBuYW1lPSJ1c2VyX21lc3NhZ2VzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+cmVjZWl2ZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjYzMyIgcGFyZW50PSIzMjciIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPm1lc3NhZ2VfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNjM0IiBwYXJlbnQ9IjMyNyIgbmFtZT0ic2VuZGVyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5zZW5kZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYzNSIgcGFyZW50PSIzMjciIG5hbWU9InJlY2VpdmVyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5yZWNlaXZlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjYzNiIgcGFyZW50PSIzMjciIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjYzNyIgcGFyZW50PSIzMjgiIG5hbWU9InN0YXR1c19pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4yPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MzgiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjM5IiBwYXJlbnQ9IjMyOCIgbmFtZT0idGFza19pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjY0MCIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfcHJvZ3Jlc3MiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjY0MSIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfZXhwZXJpZW5jZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjY0MiIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfcG9pbnRzIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjQzIiBwYXJlbnQ9IjMyOCIgbmFtZT0ic3RhdHVzIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjQ0IiBwYXJlbnQ9IjMyOCIgbmFtZT0iaXNfcmV3YXJkX2NsYWltZWQiPgotICAgICAgPERlZmF1bHRFeHByZXNzaW9uPjA8L0RlZmF1bHRFeHByZXNzaW9uPgotICAgICAgPFBvc2l0aW9uPjg8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dGlueWludCgxKXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjY0NSIgcGFyZW50PSIzMjgiIG5hbWU9InVzZXJfdGFza19zdGF0dXNfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2NDYiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX3Rhc2tfc3RhdHVzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dGFza19pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dGFza19pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnRhc2tzPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjY0NyIgcGFyZW50PSIzMjgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnN0YXR1c19pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI2NDgiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI2NDkiIHBhcmVudD0iMzI4IiBuYW1lPSJ0YXNrX2lkIj4KLSAgICAgIDxDb2xOYW1lcz50YXNrX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNjUwIiBwYXJlbnQ9IjMyOCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gIDwvZGF0YWJhc2UtbW9kZWw+Ci08L2RhdGFTb3VyY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL2luZm9ybWF0aW9uX3NjaGVtYS5GTlJ3TFEubWV0YSBiLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9pbmZvcm1hdGlvbl9zY2hlbWEuRk5Sd0xRLm1ldGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZjNkYjIuLjAwMDAwMDAKLS0tIGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL2luZm9ybWF0aW9uX3NjaGVtYS5GTlJ3TFEubWV0YQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI246aW5mb3JtYXRpb25fc2NoZW1hCi0hPG1kPiBbbnVsbCwgMCwgbnVsbCwgbnVsbCwgLTIxNDc0ODM2NDgsIC0yMTQ3NDgzNjQ4XQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL215c3FsLm9zQTRCZy5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL215c3FsLm9zQTRCZy5tZXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmE1M2YxLi4wMDAwMDAwCi0tLSBhLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9teXNxbC5vc0E0QmcubWV0YQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI246bXlzcWwKLSE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcGVyZm9ybWFuY2Vfc2NoZW1hLmtJdzBudy5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3BlcmZvcm1hbmNlX3NjaGVtYS5rSXcwbncubWV0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5NGRiMS4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcGVyZm9ybWFuY2Vfc2NoZW1hLmtJdzBudy5tZXRhCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jbjpwZXJmb3JtYW5jZV9zY2hlbWEKLSE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcHRwcm9qZWN0LmxUQ0ozUS5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3B0cHJvamVjdC5sVENKM1EubWV0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1YzNmZS4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcHRwcm9qZWN0LmxUQ0ozUS5tZXRhCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jbjpwdHByb2plY3QKLSE8bWQ+IFswLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvc3lzLnpiNEJBQS5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3N5cy56YjRCQUEubWV0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0NDcwYi4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvc3lzLnpiNEJBQS5tZXRhCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jbjpzeXMKLSE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9tb2R1bGVzLnhtbCBiLy5pZGVhL21vZHVsZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzIzYmY5Li4wMDAwMDAwCi0tLSBhLy5pZGVhL21vZHVsZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgdmVyc2lvbj0iNCI+Ci0gIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgotICAgIDxtb2R1bGVzPgotICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9lY2hvLWJhY2tlbmQuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9lY2hvLWJhY2tlbmQuaW1sIiAvPgotICAgIDwvbW9kdWxlcz4KLSAgPC9jb21wb25lbnQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvc3FsRGF0YVNvdXJjZXMueG1sIGIvLmlkZWEvc3FsRGF0YVNvdXJjZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTYxZmYwLi4wMDAwMDAwCi0tLSBhLy5pZGVhL3NxbERhdGFTb3VyY2VzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB2ZXJzaW9uPSI0Ij4KLSAgPGNvbXBvbmVudCBuYW1lPSJEZGxNYXBwaW5ncyI+Ci0gICAgPG1hcHBpbmcgdXVpZD0iNWVkNTE2M2YtZWRhOC00ZjhlLTgyODAtNjhlYTdjY2YxOTM3IiBuYW1lPSJwdFByb2plY3RAbG9jYWxob3N0IE1hcHBpbmciPgotICAgICAgPGRhdGEtc291cmNlcyBkYj0iNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyIiBkZGw9IjljMmY2MzRmLWRkYjAtNGRjYi1iY2VkLTI3MTUwNmM5ZTY0OSIgLz4KLSAgICAgIDxzY29wZT4KLSAgICAgICAgPG5vZGUga2luZD0iZGF0YWJhc2UiIHFuYW1lPSJAIiAvPgotICAgICAgPC9zY29wZT4KLSAgICA8L21hcHBpbmc+Ci0gIDwvY29tcG9uZW50PgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy5pZGVhL3dvcmtzcGFjZS54bWwgYi8uaWRlYS93b3Jrc3BhY2UueG1sCmluZGV4IDE3MDVhZDUuLmFlM2VmM2YgMTAwNjQ0Ci0tLSBhLy5pZGVhL3dvcmtzcGFjZS54bWwKKysrIGIvLmlkZWEvd29ya3NwYWNlLnhtbApAQCAtNCwyMjEgKzQsMzkgQEAKICAgICA8b3B0aW9uIG5hbWU9ImF1dG9SZWxvYWRUeXBlIiB2YWx1ZT0iU0VMRUNUSVZFIiAvPgogICA8L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJDaGFuZ2VMaXN0TWFuYWdlciI+Ci0gICAgPGxpc3QgZGVmYXVsdD0idHJ1ZSIgaWQ9ImYwMDhmZTMwLTA3MTEtNDJlMi1iYjMzLTE3ZGNmZGJhZDM4NyIgbmFtZT0iQ2hhbmdlcyIgY29tbWVudD0iTWVyZ2UgJnF1b3Q75re75Yqg5L6d6LWWJnF1b3Q7Ij4KLSAgICAgIDxjaGFuZ2VsaXN0X2RhdGEgbmFtZT0iMjIzMDExMjYiIGVtYWlsPSIyMjMwMTEyNkBnZXJyaXQubGlsaW5na3VuLmNvbSIgYXV0b21hdGljPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL2RhdGFTb3VyY2VzLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvbW9kdWxlcy54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL3NxbERhdGFTb3VyY2VzLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvZWNoby1iYWNrZW5kLmltbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXIuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXIuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db2xsZWN0aW9ucy5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNDb21tZW50LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwQ29tbWVudHMuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwTWVtYmVycy5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MZXZlbC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGlrZXMuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Bvc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1NlZWRDb21tZW50LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudExpa2VzLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9UYXNrLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJNZXNzYWdlcy5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJzLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29tbWVudFJlcG9zaXRvcnkuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cE1lbWJlcnNSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBQb3N0UmVwb3NpdG9yeS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUmVwb3NpdG9yeS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xldmVsUmVwb3NpdG9yeS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xpa2VzUmVwb3NpdG9yeS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvU2VlZENvbW1lbnRMaWtlc1JlcG9zaXRvcnkuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9TZWVkQ29tbWVudFJlcG9zaXRvcnkuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9UYXNrUmVwb3NpdG9yeS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJEeW5hbWljUmVwb3NpdG9yeS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlck1lc3NhZ2VzUmVwb3NpdG9yeS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9EeW5hbWljU2VydmljZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0dyb3VwU2VydmljZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0xldmVsU2VydmljZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1Bvc3RTZXJ2aWNlLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVGFza1NlcnZpY2UuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyRm9sbG93U2VydmljZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJNZXNzYWdlU2VydmljZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9SZXN1bHQuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlclRlc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Bvc3RDb250cm9sbGVyVGVzdC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1NlZWRDb21tZW50Q29udHJvbGxlclRlc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3VwbG9hZHMvcG9zdC/lvq7kv6Hlm77niYdfMjAyNTA0MDgxNTQwMDcuanBnIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgPGxpc3QgZGVmYXVsdD0idHJ1ZSIgaWQ9ImYwMDhmZTMwLTA3MTEtNDJlMi1iYjMzLTE3ZGNmZGJhZDM4NyIgbmFtZT0iQ2hhbmdlcyIgY29tbWVudD0iIj4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS9kYm5hdmlnYXRvci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS9kYm5hdmlnYXRvci54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS93b3Jrc3BhY2UueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvd29ya3NwYWNlLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkLy52c2NvZGUvbGF1bmNoLmpzb24iIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvLnZzY29kZS9zZXR0aW5ncy5qc29uIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL2RhdGEvdG9ycmVudHMvYTRjZDE2YjI2YTg5ZWM3ZTVkYzUzNDA0MGVkY2E5NDhmNzg5MThlYy50b3JyZW50IiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL2RhdGEvdG9ycmVudHMvZmlsZXMudG9ycmVudCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9kYXRhL3RvcnJlbnRzL3ZhbGlkLnRvcnJlbnQiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvbGlicy90dG9ycmVudC1iZW5jb2RpbmctMS4zLjAtU05BUFNIT1QuamFyIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL2xpYnMvdHRvcnJlbnQtY2xpLTEuMy4wLVNOQVBTSE9ULmphciIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9saWJzL3R0b3JyZW50LWNsaWVudC0xLjMuMC1TTkFQU0hPVC5qYXIiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvbGlicy90dG9ycmVudC1jb21tb24tMS4zLjAtU05BUFNIT1QuamFyIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL2xpYnMvdHRvcnJlbnQtbmV0d29yay0xLjAuamFyIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL2xpYnMvdHRvcnJlbnQtdGVzdC1hcGktMS4wLmphciIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9saWJzL3R0b3JyZW50LXRlc3RzLTEuMy4wLVNOQVBTSE9ULmphciIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9saWJzL3R0b3JyZW50LXRyYWNrZXItMS4zLjAtU05BUFNIT1QuamFyIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL2NyZWF0ZS5zcWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvcG9tLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3BvbS54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9Db21tb25SZXN1bHRTdGF0dXMuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL1Jlc3VsdFN0YXR1cy5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL0kxOG5NZXNzYWdlLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvT3JkZXJQYWdlUGFyYW0uamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlUGFyYW0uamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc1BhZ2UuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9TdGF0dXMuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vZXhjZXB0aW9uL1JvY2tldFBURXhjZXB0aW9uLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvVHJhY2tlckNvbmZpZy5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0ludml0ZUNvbnRyb2xsZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vUHJvbW90aW9uQ3JlYXRlRFRPLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1RvcnJlbnRVcGRhdGVEVE8uamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRVcGxvYWRQYXJhbS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by92by9Ub3JyZW50Vk8uamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRW50aXR5QmFzZS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GYXZvcml0ZUVudGl0eS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qcm9tb3Rpb24uamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVG9ycmVudEVudGl0eS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEZXRhaWxzLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1ZlcmlmaWNhdGlvblRva2VuLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Ub3JyZW50TWFwcGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0VtYWlsU2VydmljZS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUHJvbW90aW9uU2VydmljZS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVG9ycmVudFNlcnZpY2UuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJEZXRhaWxzU2VydmljZS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9TZWVkQ29tbWVudFNlcnZpY2UuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9JbnZpdGVQYXJhbS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50VXBsb2FkUGFyYW0uamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50VXBsb2FkUGFyYW0uamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FbnRpdHlCYXNlLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRW50aXR5QmFzZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0ludml0YXRpb25FbnRpdHkuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9JbnZpdGF0aW9uTWFwcGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0ludml0YXRpb25TZXJ2aWNlLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0ludml0YXRpb25TZXJ2aWNlLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL0VtYWlsU2VydmljZUltcGwuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1Byb21vdGlvblNlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1ZlcmlmeUNvZGUuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL0ludml0YXRpb25TZXJ2aWNlSW1wbC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVG9ycmVudFNlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1RvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9maWxlcy9maWxlcy50b3JyZW50IiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvRmF2b3JpdGVNYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvVXNlck1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9WZXJpZmljYXRpb25Ub2tlbk1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzL291dHB1dC92YWxpZC50b3JyZW50IiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9sb2dzL215YXBwLmxvZyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgogICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29tbW9uUmVzdWx0U3RhdHVzLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJEFubm91bmNlLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJEZpbmlzaFN0YXR1cy5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRPcmRlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRTb3VyY2UuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9Db25zdGFudHMuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9SZXN1bHRTdGF0dXMuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL0kxOG5NZXNzYWdlLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9PcmRlclBhZ2VQYXJhbS5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVBhcmFtLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzUGFnZS5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzdWx0LmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9TdGF0dXMuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9leGNlcHRpb24vUm9ja2V0UFRFeGNlcHRpb24uY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvVHJhY2tlckNvbmZpZy5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRWZXJpZmljYXRpb25SZXF1ZXN0LmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgogICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1Byb21vdGlvbkNyZWF0ZURUTy5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1RvcnJlbnRVcGRhdGVEVE8uY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50UGFyYW0uY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50VXBsb2FkUGFyYW0uY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by92by9Ub3JyZW50Vk8uY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FbnRpdHlCYXNlLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRmF2b3JpdGVFbnRpdHkuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qcm9tb3Rpb24uY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Ub3JyZW50RW50aXR5LmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEZXRhaWxzLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVmVyaWZpY2F0aW9uVG9rZW4uY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9GYXZvcml0ZU1hcHBlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRW1haWxTZXJ2aWNlLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1Byb21vdGlvblNlcnZpY2UuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVG9ycmVudFNlcnZpY2UuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckRldGFpbHNTZXJ2aWNlLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9FbWFpbFNlcnZpY2VJbXBsLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1Byb21vdGlvblNlcnZpY2VJbXBsLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1RvcnJlbnRTZXJ2aWNlSW1wbC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvVmVyaWZ5Q29kZS5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9maWxlcy9maWxlcy50b3JyZW50IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvZmlsZXMvZmlsZXMudG9ycmVudCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL21hcHBlci9GYXZvcml0ZU1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL291dHB1dC92YWxpZC50b3JyZW50IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvb3V0cHV0L3ZhbGlkLnRvcnJlbnQiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIub3JpZ2luYWwiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIub3JpZ2luYWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tYXJjaGl2ZXIvcG9tLnByb3BlcnRpZXMiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tYXJjaGl2ZXIvcG9tLnByb3BlcnRpZXMiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2lucHV0RmlsZXMubHN0IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9pbnB1dEZpbGVzLmxzdCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC90ZXN0LWNsYXNzZXMvY2xhc3NwYXRoLmluZGV4IiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0JDEuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9SZXN1bHQuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+CiAgICAgPC9saXN0PgogICAgIDxvcHRpb24gbmFtZT0iU0hPV19ESUFMT0ciIHZhbHVlPSJmYWxzZSIgLz4KICAgICA8b3B0aW9uIG5hbWU9IkhJR0hMSUdIVF9DT05GTElDVFMiIHZhbHVlPSJ0cnVlIiAvPgpAQCAtMjM4LDEzICs1NiwxNiBAQAogICA8Y29tcG9uZW50IG5hbWU9Ik1hcmtkb3duU2V0dGluZ3NNaWdyYXRpb24iPgogICAgIDxvcHRpb24gbmFtZT0ic3RhdGVWZXJzaW9uIiB2YWx1ZT0iMSIgLz4KICAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iTWF2ZW5JbXBvcnRQcmVmZXJlbmNlcyI+CisgICAgPG9wdGlvbiBuYW1lPSJpbXBvcnRpbmdTZXR0aW5ncyI+CisgICAgICA8TWF2ZW5JbXBvcnRpbmdTZXR0aW5ncz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJ3b3Jrc3BhY2VJbXBvcnRFbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgIDwvTWF2ZW5JbXBvcnRpbmdTZXR0aW5ncz4KKyAgICA8L29wdGlvbj4KKyAgPC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iUHJvYmxlbXNWaWV3U3RhdGUiPgogICAgIDxvcHRpb24gbmFtZT0ic2VsZWN0ZWRUYWJJZCIgdmFsdWU9IkN1cnJlbnRGaWxlIiAvPgogICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Q29sb3JJbmZvIj57Ci0gICZxdW90O2N1c3RvbUNvbG9yJnF1b3Q7OiAmcXVvdDsmcXVvdDssCi0gICZxdW90O2Fzc29jaWF0ZWRJbmRleCZxdW90OzogOAotfTwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RJZCIgaWQ9IjJ2Wk5mTlRFRnlIQXBkeG1IWjdZMHJsSmpLQiIgLz4KICAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TGV2ZWxWY3NNYW5hZ2VyIiBzZXR0aW5nc0VkaXRlZE1hbnVhbGx5PSJ0cnVlIiAvPgogICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RWaWV3U3RhdGUiPgpAQCAtMjUzLDMwICs3NCw5IEBACiAgIDwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IlByb3BlcnRpZXNDb21wb25lbnQiPnsKICAgJnF1b3Q7a2V5VG9TdHJpbmcmcXVvdDs6IHsKLSAgICAmcXVvdDtKVW5pdC5Qb3N0Q29udHJvbGxlclRlc3QudGVzdEdldEFsbENvbGxlY3Rpb25zLmV4ZWN1dG9yJnF1b3Q7OiAmcXVvdDtSdW4mcXVvdDssCi0gICAgJnF1b3Q7SlVuaXQuU2VlZENvbW1lbnRDb250cm9sbGVyVGVzdC5leGVjdXRvciZxdW90OzogJnF1b3Q7UnVuJnF1b3Q7LAotICAgICZxdW90O0pVbml0LlVzZXJDb250cm9sbGVyVGVzdC5leGVjdXRvciZxdW90OzogJnF1b3Q7UnVuJnF1b3Q7LAotICAgICZxdW90O0pVbml0LlVzZXJDb250cm9sbGVyVGVzdC50ZXN0Q2FsY3VsYXRlU2hhcmVSYXRlLmV4ZWN1dG9yJnF1b3Q7OiAmcXVvdDtSdW4mcXVvdDssCi0gICAgJnF1b3Q7SlVuaXQuVXNlckNvbnRyb2xsZXJUZXN0LnRlc3RMb2dpbi5leGVjdXRvciZxdW90OzogJnF1b3Q7UnVuJnF1b3Q7LAotICAgICZxdW90O0pVbml0LlVzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QuZXhlY3V0b3ImcXVvdDs6ICZxdW90O1J1biZxdW90OywKLSAgICAmcXVvdDtSZXF1ZXN0TWFwcGluZ3NQYW5lbE9yZGVyMCZxdW90OzogJnF1b3Q7MCZxdW90OywKLSAgICAmcXVvdDtSZXF1ZXN0TWFwcGluZ3NQYW5lbE9yZGVyMSZxdW90OzogJnF1b3Q7MSZxdW90OywKLSAgICAmcXVvdDtSZXF1ZXN0TWFwcGluZ3NQYW5lbFdpZHRoMCZxdW90OzogJnF1b3Q7NzUmcXVvdDssCi0gICAgJnF1b3Q7UmVxdWVzdE1hcHBpbmdzUGFuZWxXaWR0aDEmcXVvdDs6ICZxdW90Ozc1JnF1b3Q7LAogICAgICZxdW90O1J1bk9uY2VBY3Rpdml0eS5PcGVuUHJvamVjdFZpZXdPblN0YXJ0JnF1b3Q7OiAmcXVvdDt0cnVlJnF1b3Q7LAogICAgICZxdW90O1J1bk9uY2VBY3Rpdml0eS5TaG93UmVhZG1lT25TdGFydCZxdW90OzogJnF1b3Q7dHJ1ZSZxdW90OywKLSAgICAmcXVvdDtSdW5PbmNlQWN0aXZpdHkuZ2l0LnVuc2hhbGxvdyZxdW90OzogJnF1b3Q7dHJ1ZSZxdW90OywKLSAgICAmcXVvdDtTSEFSRV9QUk9KRUNUX0NPTkZJR1VSQVRJT05fRklMRVMmcXVvdDs6ICZxdW90O3RydWUmcXVvdDssCi0gICAgJnF1b3Q7U3ByaW5nIEJvb3QuTXlQcm9qZWN0QXBwbGljYXRpb24uZXhlY3V0b3ImcXVvdDs6ICZxdW90O1J1biZxdW90OywKLSAgICAmcXVvdDtnaXQtd2lkZ2V0LXBsYWNlaG9sZGVyJnF1b3Q7OiAmcXVvdDttYXN0ZXImcXVvdDssCi0gICAgJnF1b3Q7a290bGluLWxhbmd1YWdlLXZlcnNpb24tY29uZmlndXJlZCZxdW90OzogJnF1b3Q7dHJ1ZSZxdW90OywKLSAgICAmcXVvdDtsYXN0X29wZW5lZF9maWxlX3BhdGgmcXVvdDs6ICZxdW90O0Q6L3N0dWR5L+WtpuS5oOi1hOa6kC/lpKfkuInkuIsvenkxJnF1b3Q7LAotICAgICZxdW90O25vZGUuanMuZGV0ZWN0ZWQucGFja2FnZS5lc2xpbnQmcXVvdDs6ICZxdW90O3RydWUmcXVvdDssCi0gICAgJnF1b3Q7bm9kZS5qcy5zZWxlY3RlZC5wYWNrYWdlLmVzbGludCZxdW90OzogJnF1b3Q7KGF1dG9kZXRlY3QpJnF1b3Q7LAotICAgICZxdW90O25vZGUuanMuc2VsZWN0ZWQucGFja2FnZS50c2xpbnQmcXVvdDs6ICZxdW90OyhhdXRvZGV0ZWN0KSZxdW90OywKLSAgICAmcXVvdDtub2RlanNfcGFja2FnZV9tYW5hZ2VyX3BhdGgmcXVvdDs6ICZxdW90O25wbSZxdW90OywKLSAgICAmcXVvdDt2dWUucmVhcnJhbmdlci5zZXR0aW5ncy5taWdyYXRpb24mcXVvdDs6ICZxdW90O3RydWUmcXVvdDssCi0gICAgJnF1b3Q75bqU55So56iL5bqPLk15UHJvamVjdEFwcGxpY2F0aW9uLmV4ZWN1dG9yJnF1b3Q7OiAmcXVvdDtSdW4mcXVvdDsKKyAgICAmcXVvdDtsYXN0X29wZW5lZF9maWxlX3BhdGgmcXVvdDs6ICZxdW90O0Q6L3N0dWR5L+WtpuS5oOi1hOa6kC/lpKfkuInkuIsvenkxJnF1b3Q7CiAgIH0KIH08L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJSZWNlbnRzTWFuYWdlciI+CkBAIC0yODQsMjQgKzg0LDYwIEBACiAgICAgICA8cmVjZW50IG5hbWU9IkQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcc2Nob29sXGVjaG8tYmFja2VuZFxzcmNcbWFpblxyZXNvdXJjZXNcbWFwcGVyIiAvPgogICAgIDwva2V5PgogICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJSdW5NYW5hZ2VyIiBzZWxlY3RlZD0iU3ByaW5nIEJvb3QuTXlQcm9qZWN0QXBwbGljYXRpb24iPgotICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IlBvc3RDb250cm9sbGVyVGVzdC50ZXN0R2V0QWxsQ29sbGVjdGlvbnMiIHR5cGU9IkpVbml0IiBmYWN0b3J5TmFtZT0iSlVuaXQiIHRlbXBvcmFyeT0idHJ1ZSIgbmFtZUlzR2VuZXJhdGVkPSJ0cnVlIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJSdW5NYW5hZ2VyIiBzZWxlY3RlZD0i5bqU55So56iL5bqPLk15UHJvamVjdEFwcGxpY2F0aW9uIj4KKyAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJCdENsaWVudCIgdHlwZT0iQXBwbGljYXRpb24iIGZhY3RvcnlOYW1lPSJBcHBsaWNhdGlvbiIgdGVtcG9yYXJ5PSJ0cnVlIiBuYW1lSXNHZW5lcmF0ZWQ9InRydWUiPgorICAgICAgPG9wdGlvbiBuYW1lPSJNQUlOX0NMQVNTX05BTUUiIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY2xpZW50LkJ0Q2xpZW50IiAvPgogICAgICAgPG1vZHVsZSBuYW1lPSJlY2hvLWJhY2tlbmQiIC8+CiAgICAgICA8ZXh0ZW5zaW9uIG5hbWU9ImNvdmVyYWdlIj4KICAgICAgICAgPHBhdHRlcm4+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJQQVRURVJOIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuKiIgLz4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9IlBBVFRFUk4iIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY2xpZW50LioiIC8+CiAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJFTkFCTEVEIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlBBQ0tBR0VfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJNQUlOX0NMQVNTX05BTUUiIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci5Qb3N0Q29udHJvbGxlclRlc3QiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9Ik1FVEhPRF9OQU1FIiB2YWx1ZT0idGVzdEdldEFsbENvbGxlY3Rpb25zIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJURVNUX09CSkVDVCIgdmFsdWU9Im1ldGhvZCIgLz4KICAgICAgIDxtZXRob2Qgdj0iMiI+CiAgICAgICAgIDxvcHRpb24gbmFtZT0iTWFrZSIgZW5hYmxlZD0idHJ1ZSIgLz4KICAgICAgIDwvbWV0aG9kPgogICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJTZWVkQ29tbWVudENvbnRyb2xsZXJUZXN0IiB0eXBlPSJKVW5pdCIgZmFjdG9yeU5hbWU9IkpVbml0IiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+CisgICAgPGNvbmZpZ3VyYXRpb24gbmFtZT0iTXlQcm9qZWN0QXBwbGljYXRpb24iIHR5cGU9IkFwcGxpY2F0aW9uIiBmYWN0b3J5TmFtZT0iQXBwbGljYXRpb24iIHRlbXBvcmFyeT0idHJ1ZSI+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5NeVByb2plY3RBcHBsaWNhdGlvbiIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgorICAgICAgPGV4dGVuc2lvbiBuYW1lPSJjb3ZlcmFnZSI+CisgICAgICAgIDxwYXR0ZXJuPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iUEFUVEVSTiIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC4qIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDwvcGF0dGVybj4KKyAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPG1ldGhvZCB2PSIyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIG5hbWU9Ik15UHJvamVjdEFwcGxpY2F0aW9uIiB0eXBlPSJBcHBsaWNhdGlvbiIgZmFjdG9yeU5hbWU9IkFwcGxpY2F0aW9uIiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5NeVByb2plY3RBcHBsaWNhdGlvbiIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgorICAgICAgPGV4dGVuc2lvbiBuYW1lPSJjb3ZlcmFnZSI+CisgICAgICAgIDxwYXR0ZXJuPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iUEFUVEVSTiIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC4qIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDwvcGF0dGVybj4KKyAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPG1ldGhvZCB2PSIyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IlRyYWNrZXJTZXJ2ZXIiIHR5cGU9IkFwcGxpY2F0aW9uIiBmYWN0b3J5TmFtZT0iQXBwbGljYXRpb24iIHRlbXBvcmFyeT0idHJ1ZSIgbmFtZUlzR2VuZXJhdGVkPSJ0cnVlIj4KKyAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LnRyYWNrZXIuVHJhY2tlclNlcnZlciIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgorICAgICAgPGV4dGVuc2lvbiBuYW1lPSJjb3ZlcmFnZSI+CisgICAgICAgIDxwYXR0ZXJuPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iUEFUVEVSTiIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC50cmFja2VyLioiIC8+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJFTkFCTEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPC9wYXR0ZXJuPgorICAgICAgPC9leHRlbnNpb24+CisgICAgICA8bWV0aG9kIHY9IjIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+CisgICAgICA8L21ldGhvZD4KKyAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgPGNvbmZpZ3VyYXRpb24gbmFtZT0iVG9ycmVudENvbnRyb2xsZXJUZXN0IiB0eXBlPSJKVW5pdCIgZmFjdG9yeU5hbWU9IkpVbml0IiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+CiAgICAgICA8bW9kdWxlIG5hbWU9ImVjaG8tYmFja2VuZCIgLz4KICAgICAgIDxleHRlbnNpb24gbmFtZT0iY292ZXJhZ2UiPgogICAgICAgICA8cGF0dGVybj4KQEAgLTMxMCw4NCArMTQ2LDE5IEBACiAgICAgICAgIDwvcGF0dGVybj4KICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgPG9wdGlvbiBuYW1lPSJQQUNLQUdFX05BTUUiIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlciIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuU2VlZENvbW1lbnRDb250cm9sbGVyVGVzdCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuVG9ycmVudENvbnRyb2xsZXJUZXN0IiAvPgogICAgICAgPG9wdGlvbiBuYW1lPSJURVNUX09CSkVDVCIgdmFsdWU9ImNsYXNzIiAvPgogICAgICAgPG1ldGhvZCB2PSIyIj4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgogICAgICAgPC9tZXRob2Q+CiAgICAgPC9jb25maWd1cmF0aW9uPgotICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IlVzZXJDb250cm9sbGVyVGVzdCIgdHlwZT0iSlVuaXQiIGZhY3RvcnlOYW1lPSJKVW5pdCIgdGVtcG9yYXJ5PSJ0cnVlIiBuYW1lSXNHZW5lcmF0ZWQ9InRydWUiPgotICAgICAgPG1vZHVsZSBuYW1lPSJlY2hvLWJhY2tlbmQiIC8+Ci0gICAgICA8ZXh0ZW5zaW9uIG5hbWU9ImNvdmVyYWdlIj4KLSAgICAgICAgPHBhdHRlcm4+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJQQVRURVJOIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuKiIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRUQiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICA8L3BhdHRlcm4+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDxvcHRpb24gbmFtZT0iUEFDS0FHRV9OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLlVzZXJDb250cm9sbGVyVGVzdCIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iVEVTVF9PQkpFQ1QiIHZhbHVlPSJjbGFzcyIgLz4KLSAgICAgIDxtZXRob2Qgdj0iMiI+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iTWFrZSIgZW5hYmxlZD0idHJ1ZSIgLz4KLSAgICAgIDwvbWV0aG9kPgotICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJVc2VyQ29udHJvbGxlclRlc3QudGVzdENhbGN1bGF0ZVNoYXJlUmF0ZSIgdHlwZT0iSlVuaXQiIGZhY3RvcnlOYW1lPSJKVW5pdCIgdGVtcG9yYXJ5PSJ0cnVlIiBuYW1lSXNHZW5lcmF0ZWQ9InRydWUiPgotICAgICAgPG1vZHVsZSBuYW1lPSJlY2hvLWJhY2tlbmQiIC8+Ci0gICAgICA8ZXh0ZW5zaW9uIG5hbWU9ImNvdmVyYWdlIj4KLSAgICAgICAgPHBhdHRlcm4+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJQQVRURVJOIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuKiIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRUQiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICA8L3BhdHRlcm4+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDxvcHRpb24gbmFtZT0iUEFDS0FHRV9OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLlVzZXJDb250cm9sbGVyVGVzdCIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iTUVUSE9EX05BTUUiIHZhbHVlPSJ0ZXN0Q2FsY3VsYXRlU2hhcmVSYXRlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJURVNUX09CSkVDVCIgdmFsdWU9Im1ldGhvZCIgLz4KLSAgICAgIDxtZXRob2Qgdj0iMiI+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iTWFrZSIgZW5hYmxlZD0idHJ1ZSIgLz4KLSAgICAgIDwvbWV0aG9kPgotICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJVc2VyQ29udHJvbGxlclRlc3QudGVzdExvZ2luIiB0eXBlPSJKVW5pdCIgZmFjdG9yeU5hbWU9IkpVbml0IiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+Ci0gICAgICA8bW9kdWxlIG5hbWU9ImVjaG8tYmFja2VuZCIgLz4KLSAgICAgIDxleHRlbnNpb24gbmFtZT0iY292ZXJhZ2UiPgotICAgICAgICA8cGF0dGVybj4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IlBBVFRFUk4iIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci4qIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDwvcGF0dGVybj4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPG9wdGlvbiBuYW1lPSJQQUNLQUdFX05BTUUiIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlciIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuVXNlckNvbnRyb2xsZXJUZXN0IiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJNRVRIT0RfTkFNRSIgdmFsdWU9InRlc3RMb2dpbiIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iVEVTVF9PQkpFQ1QiIHZhbHVlPSJtZXRob2QiIC8+Ci0gICAgICA8bWV0aG9kIHY9IjIiPgotICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+Ci0gICAgICA8L21ldGhvZD4KLSAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgPGNvbmZpZ3VyYXRpb24gbmFtZT0iTXlQcm9qZWN0QXBwbGljYXRpb24iIHR5cGU9IlNwcmluZ0Jvb3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25UeXBlIiBmYWN0b3J5TmFtZT0iU3ByaW5nIEJvb3QiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+Ci0gICAgICA8bW9kdWxlIG5hbWU9ImVjaG8tYmFja2VuZCIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iU1BSSU5HX0JPT1RfTUFJTl9DTEFTUyIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5NeVByb2plY3RBcHBsaWNhdGlvbiIgLz4KLSAgICAgIDxtZXRob2Qgdj0iMiI+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iTWFrZSIgZW5hYmxlZD0idHJ1ZSIgLz4KLSAgICAgIDwvbWV0aG9kPgotICAgIDwvY29uZmlndXJhdGlvbj4KICAgICA8cmVjZW50X3RlbXBvcmFyeT4KICAgICAgIDxsaXN0PgotICAgICAgICA8aXRlbSBpdGVtdmFsdWU9IkpVbml0LlVzZXJDb250cm9sbGVyVGVzdC50ZXN0Q2FsY3VsYXRlU2hhcmVSYXRlIiAvPgotICAgICAgICA8aXRlbSBpdGVtdmFsdWU9IkpVbml0LlNlZWRDb21tZW50Q29udHJvbGxlclRlc3QiIC8+Ci0gICAgICAgIDxpdGVtIGl0ZW12YWx1ZT0iSlVuaXQuUG9zdENvbnRyb2xsZXJUZXN0LnRlc3RHZXRBbGxDb2xsZWN0aW9ucyIgLz4KLSAgICAgICAgPGl0ZW0gaXRlbXZhbHVlPSJKVW5pdC5Vc2VyQ29udHJvbGxlclRlc3QudGVzdExvZ2luIiAvPgotICAgICAgICA8aXRlbSBpdGVtdmFsdWU9IkpVbml0LlVzZXJDb250cm9sbGVyVGVzdCIgLz4KKyAgICAgICAgPGl0ZW0gaXRlbXZhbHVlPSLlupTnlKjnqIvluo8uTXlQcm9qZWN0QXBwbGljYXRpb24iIC8+CisgICAgICAgIDxpdGVtIGl0ZW12YWx1ZT0iSlVuaXQuVG9ycmVudENvbnRyb2xsZXJUZXN0IiAvPgogICAgICAgPC9saXN0PgogICAgIDwvcmVjZW50X3RlbXBvcmFyeT4KICAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iU2hhcmVkSW5kZXhlcyI+Ci0gICAgPGF0dGFjaGVkQ2h1bmtzPgotICAgICAgPHNldD4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYnVuZGxlZC1qZGstOTgyM2RjZTNhYTc1LWZkZmU0ZGFlM2EyZC1pbnRlbGxpai5pbmRleGluZy5zaGFyZWQuY29yZS1JVS0yNDMuMjE1NjUuMTkzIiAvPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSJidW5kbGVkLWpzLXByZWRlZmluZWQtZDY5ODZjYzcxMDJiLWU3NjhiOWVkNzkwZS1KYXZhU2NyaXB0LUlVLTI0My4yMTU2NS4xOTMiIC8+Ci0gICAgICA8L3NldD4KLSAgICA8L2F0dGFjaGVkQ2h1bmtzPgotICA8L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJTcGVsbENoZWNrZXJTZXR0aW5ncyIgUnVudGltZURpY3Rpb25hcmllcz0iMCIgRm9sZGVycz0iMCIgQ3VzdG9tRGljdGlvbmFyaWVzPSIwIiBEZWZhdWx0RGljdGlvbmFyeT0iYXBwbGljYXRpb24tbGV2ZWwiIFVzZVNpbmdsZURpY3Rpb25hcnk9InRydWUiIHRyYW5zZmVycmVkPSJ0cnVlIiAvPgogICA8Y29tcG9uZW50IG5hbWU9IlRhc2tNYW5hZ2VyIj4KICAgICA8dGFzayBhY3RpdmU9InRydWUiIGlkPSJEZWZhdWx0IiBzdW1tYXJ5PSJEZWZhdWx0IHRhc2siPgpAQCAtMzk2LDY1ICsxNjcsNyBAQAogICAgICAgPG9wdGlvbiBuYW1lPSJudW1iZXIiIHZhbHVlPSJEZWZhdWx0IiAvPgogICAgICAgPG9wdGlvbiBuYW1lPSJwcmVzZW50YWJsZUlkIiB2YWx1ZT0iRGVmYXVsdCIgLz4KICAgICAgIDx1cGRhdGVkPjE3NDQzNDg3NDAzNDI8L3VwZGF0ZWQ+Ci0gICAgICA8d29ya0l0ZW0gZnJvbT0iMTc0ODM2NTU5NjI4MyIgZHVyYXRpb249IjEzMzgwMDAiIC8+Ci0gICAgICA8d29ya0l0ZW0gZnJvbT0iMTc0ODM5OTY2ODU3NyIgZHVyYXRpb249IjIwMDUwMDAiIC8+Ci0gICAgICA8d29ya0l0ZW0gZnJvbT0iMTc0ODQyMDc1NTkwNCIgZHVyYXRpb249IjI4ODgwMDAiIC8+Ci0gICAgICA8d29ya0l0ZW0gZnJvbT0iMTc0ODQ5ODc2MzYyMCIgZHVyYXRpb249IjY4MTgwMDAiIC8+CiAgICAgPC90YXNrPgogICAgIDxzZXJ2ZXJzIC8+CiAgIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlR5cGVTY3JpcHRHZW5lcmF0ZWRGaWxlc01hbmFnZXIiPgotICAgIDxvcHRpb24gbmFtZT0idmVyc2lvbiIgdmFsdWU9IjMiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlZjcy5Mb2cuVGFicy5Qcm9wZXJ0aWVzIj4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fR0VORVJJQ19UQUJTIj4KLSAgICAgIDxtYXA+Ci0gICAgICAgIDxlbnRyeSBrZXk9Ijc2NWEwOWNlLTkxODctNGVmNS1hZDZmLWEzYjQ5NmY5Y2ViYSIgdmFsdWU9IlRPT0xfV0lORE9XIiAvPgotICAgICAgPC9tYXA+Ci0gICAgPC9vcHRpb24+Ci0gICAgPG9wdGlvbiBuYW1lPSJUQUJfU1RBVEVTIj4KLSAgICAgIDxtYXA+Ci0gICAgICAgIDxlbnRyeSBrZXk9Ijc2NWEwOWNlLTkxODctNGVmNS1hZDZmLWEzYjQ5NmY5Y2ViYSI+Ci0gICAgICAgICAgPHZhbHVlPgotICAgICAgICAgICAgPFN0YXRlPgotICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IkZJTFRFUlMiPgotICAgICAgICAgICAgICAgIDxtYXA+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJyb290cyI+Ci0gICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4KLSAgICAgICAgICAgICAgICAgICAgICA8bGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiRQUk9KRUNUX0RJUiQiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgPC9saXN0PgotICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L21hcD4KLSAgICAgICAgICAgICAgPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iU0hPV19PTkxZX0FGRkVDVEVEX0NIQU5HRVMiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICAgICAgPC9TdGF0ZT4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2VudHJ5PgotICAgICAgICA8ZW50cnkga2V5PSJNQUlOIj4KLSAgICAgICAgICA8dmFsdWU+Ci0gICAgICAgICAgICA8U3RhdGU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iRklMVEVSUyI+Ci0gICAgICAgICAgICAgICAgPG1hcD4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9ImJyYW5jaCI+Ci0gICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4KLSAgICAgICAgICAgICAgICAgICAgICA8bGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkhFQUQiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgPC9saXN0PgotICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L21hcD4KLSAgICAgICAgICAgICAgPC9vcHRpb24+Ci0gICAgICAgICAgICA8L1N0YXRlPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZW50cnk+Ci0gICAgICA8L21hcD4KLSAgICA8L29wdGlvbj4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iVmNzTWFuYWdlckNvbmZpZ3VyYXRpb24iPgotICAgIDxNRVNTQUdFIHZhbHVlPSJDaGFuZ2VzIiAvPgotICAgIDxNRVNTQUdFIHZhbHVlPSJNZXJnZSAmcXVvdDvmt7vliqDkvp3otZYmcXVvdDsiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJMQVNUX0NPTU1JVF9NRVNTQUdFIiB2YWx1ZT0iTWVyZ2UgJnF1b3Q75re75Yqg5L6d6LWWJnF1b3Q7IiAvPgotICA8L2NvbXBvbmVudD4KIDwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8udnNjb2RlL2xhdW5jaC5qc29uIGIvLnZzY29kZS9sYXVuY2guanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRhMmVhCi0tLSAvZGV2L251bGwKKysrIGIvLnZzY29kZS9sYXVuY2guanNvbgpAQCAtMCwwICsxLDE0IEBACit7CisgICAgImNvbmZpZ3VyYXRpb25zIjogWworICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJqYXZhIiwKKyAgICAgICAgICAgICJuYW1lIjogIlNwcmluZyBCb290LU15UHJvamVjdEFwcGxpY2F0aW9uPGVjaG8tYmFja2VuZD4iLAorICAgICAgICAgICAgInJlcXVlc3QiOiAibGF1bmNoIiwKKyAgICAgICAgICAgICJjd2QiOiAiJHt3b3Jrc3BhY2VGb2xkZXJ9IiwKKyAgICAgICAgICAgICJtYWluQ2xhc3MiOiAiY29tLmV4YW1wbGUubXlwcm9qZWN0Lk15UHJvamVjdEFwcGxpY2F0aW9uIiwKKyAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJlY2hvLWJhY2tlbmQiLAorICAgICAgICAgICAgImFyZ3MiOiAiIiwKKyAgICAgICAgICAgICJlbnZGaWxlIjogIiR7d29ya3NwYWNlRm9sZGVyfS8uZW52IgorICAgICAgICB9CisgICAgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy52c2NvZGUvc2V0dGluZ3MuanNvbiBiLy52c2NvZGUvc2V0dGluZ3MuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODRmODljCi0tLSAvZGV2L251bGwKKysrIGIvLnZzY29kZS9zZXR0aW5ncy5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAgICJqYXZhLmNvbmZpZ3VyYXRpb24udXBkYXRlQnVpbGRDb25maWd1cmF0aW9uIjogImludGVyYWN0aXZlIiwKKyAgICAiamF2YS5jb21waWxlLm51bGxBbmFseXNpcy5tb2RlIjogImF1dG9tYXRpYyIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kYXRhL3RvcnJlbnRzL2E0Y2QxNmIyNmE4OWVjN2U1ZGM1MzQwNDBlZGNhOTQ4Zjc4OTE4ZWMudG9ycmVudCBiL2RhdGEvdG9ycmVudHMvYTRjZDE2YjI2YTg5ZWM3ZTVkYzUzNDA0MGVkY2E5NDhmNzg5MThlYy50b3JyZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTA4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRhL3RvcnJlbnRzL2E0Y2QxNmIyNmE4OWVjN2U1ZGM1MzQwNDBlZGNhOTQ4Zjc4OTE4ZWMudG9ycmVudApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kYXRhL3RvcnJlbnRzL2ZpbGVzLnRvcnJlbnQgYi9kYXRhL3RvcnJlbnRzL2ZpbGVzLnRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0OTc0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvdG9ycmVudHMvZmlsZXMudG9ycmVudApAQCAtMCwwICsxIEBACitkODphbm5vdW5jZTIyOmh0dHBzOi8vdHJhY2tlci5ieXIucHQxMDpjcmVhdGVkIGJ5MjE6cUJpdHRvcnJlbnQgdjQuNS4zLjEwMTM6Y3JlYXRpb24gZGF0ZWkxNzQ3NzE3OTAxZTQ6aW5mb2Q1OmZpbGVzbGQ2Omxlbmd0aGkxNzNlNDpwYXRobDEzOnZhbGlkLnRvcnJlbnRlZWU0Om5hbWU1OmZpbGVzMTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6L/Ht6EX0NeM88vsf7NWEn1GhlvtlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RhdGEvdG9ycmVudHMvdmFsaWQudG9ycmVudCBiL2RhdGEvdG9ycmVudHMvdmFsaWQudG9ycmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkwZTUyCi0tLSAvZGV2L251bGwKKysrIGIvZGF0YS90b3JyZW50cy92YWxpZC50b3JyZW50CkBAIC0wLDAgKzEgQEAKK2QxMDpjcmVhdGVkIGJ5MTg6cUJpdHRvcnJlbnQgdjUuMS4wMTM6Y3JlYXRpb24gZGF0ZWkxNzQ1OTQ4OTk1ZTQ6aW5mb2Q2Omxlbmd0aGkyMmU0Om5hbWUxNTpleGFtcGxlLnRvcnJlbnQxMjpwaWVjZSBsZW5ndGhpMTYzODRlNjpwaWVjZXMyMDpGbh7wthop+jzHCY4G5sJoFKN0bDc6cHJpdmF0ZWkxZWVlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNoby1iYWNrZW5kLmltbCBiL2VjaG8tYmFja2VuZC5pbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Y2U3MjIuLjAwMDAwMDAKLS0tIGEvZWNoby1iYWNrZW5kLmltbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtb2R1bGUgdmVyc2lvbj0iNCI+Ci0gIDxjb21wb25lbnQgbmFtZT0iQWRkaXRpb25hbE1vZHVsZUVsZW1lbnRzIj4KLSAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiIGR1bWI9InRydWUiPgotICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzIiB0eXBlPSJqYXZhLXJlc291cmNlIiAvPgotICAgIDwvY29udGVudD4KLSAgPC9jb21wb25lbnQ+Ci08L21vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LWJlbmNvZGluZy0xLjMuMC1TTkFQU0hPVC5qYXIgYi9saWJzL3R0b3JyZW50LWJlbmNvZGluZy0xLjMuMC1TTkFQU0hPVC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjN2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdHRvcnJlbnQtYmVuY29kaW5nLTEuMy4wLVNOQVBTSE9ULmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LWNsaS0xLjMuMC1TTkFQU0hPVC5qYXIgYi9saWJzL3R0b3JyZW50LWNsaS0xLjMuMC1TTkFQU0hPVC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MWY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdHRvcnJlbnQtY2xpLTEuMy4wLVNOQVBTSE9ULmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LWNsaWVudC0xLjMuMC1TTkFQU0hPVC5qYXIgYi9saWJzL3R0b3JyZW50LWNsaWVudC0xLjMuMC1TTkFQU0hPVC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzZDMxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdHRvcnJlbnQtY2xpZW50LTEuMy4wLVNOQVBTSE9ULmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LWNvbW1vbi0xLjMuMC1TTkFQU0hPVC5qYXIgYi9saWJzL3R0b3JyZW50LWNvbW1vbi0xLjMuMC1TTkFQU0hPVC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0MGU3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdHRvcnJlbnQtY29tbW9uLTEuMy4wLVNOQVBTSE9ULmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LW5ldHdvcmstMS4wLmphciBiL2xpYnMvdHRvcnJlbnQtbmV0d29yay0xLjAuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NTExODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3R0b3JyZW50LW5ldHdvcmstMS4wLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LXRlc3QtYXBpLTEuMC5qYXIgYi9saWJzL3R0b3JyZW50LXRlc3QtYXBpLTEuMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0ZDU2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdHRvcnJlbnQtdGVzdC1hcGktMS4wLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LXRlc3RzLTEuMy4wLVNOQVBTSE9ULmphciBiL2xpYnMvdHRvcnJlbnQtdGVzdHMtMS4zLjAtU05BUFNIT1QuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3N2JmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3R0b3JyZW50LXRlc3RzLTEuMy4wLVNOQVBTSE9ULmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL3R0b3JyZW50LXRyYWNrZXItMS4zLjAtU05BUFNIT1QuamFyIGIvbGlicy90dG9ycmVudC10cmFja2VyLTEuMy4wLVNOQVBTSE9ULmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjcwNDYxCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90dG9ycmVudC10cmFja2VyLTEuMy4wLVNOQVBTSE9ULmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb20ueG1sIGIvcG9tLnhtbAppbmRleCBmOTk4N2FjLi4yMGI4ZTcxIDEwMDY0NAotLS0gYS9wb20ueG1sCisrKyBiL3BvbS54bWwKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAogICAgIDxncm91cElkPmdyb3VwSWQ8L2dyb3VwSWQ+CkBAIC0xMCwxNCArMTAsMTQgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItcGFyZW50PC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjYuMDwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aC8+IDwhLS0gbG9va3VwIHBhcmVudCBmcm9tIHJlcG9zaXRvcnkgLS0+CisgICAgICAgIDx2ZXJzaW9uPjIuNi4wPC92ZXJzaW9uPiA8IS0tIOS9v+eUqOS9oOW4jOacm+eahFNwcmluZyBCb29054mI5pysIC0tPgorICAgICAgICA8cmVsYXRpdmVQYXRoIC8+IDwhLS0gbG9va3VwIHBhcmVudCBmcm9tIHJlcG9zaXRvcnkgLS0+CiAgICAgPC9wYXJlbnQ+Ci0KICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPG1hdmVuLmNvbXBpbGVyLnNvdXJjZT4xNzwvbWF2ZW4uY29tcGlsZXIuc291cmNlPgogICAgICAgICA8bWF2ZW4uY29tcGlsZXIudGFyZ2V0PjE3PC9tYXZlbi5jb21waWxlci50YXJnZXQ+CiAgICAgICAgIDxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgorICAgICAgICA8c2EtdG9rZW4udmVyc2lvbj4xLjM3LjA8L3NhLXRva2VuLnZlcnNpb24+CiAgICAgPC9wcm9wZXJ0aWVzPgogCiAgICAgPGRlcGVuZGVuY2llcz4KQEAgLTc4LDYgKzc4LDE2IEBACiAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC54bWwuYmluZDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheGItYXBpPC9hcnRpZmFjdElkPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi54aWFveW1pbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmtuaWZlNGotb3BlbmFwaTMtamFrYXJ0YS1zcHJpbmctYm9vdC1zdGFydGVyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC41LjA8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC52YWxpZGF0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dmFsaWRhdGlvbi1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAuMS5GaW5hbDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8IS0tIFNwcmluZyBXZWIgTVZDIC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CkBAIC0xMDgsMTEgKzExOCwxNyBAQAogICAgICAgICAgICAgPHZlcnNpb24+MS4xOC4zMDwvdmVyc2lvbj4gPCEtLSDnoa7kv53kvb/nlKjnmoTmmK/mnIDmlrDniYjmnKwgLS0+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5wYWdlaGVscGVyPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGFnZWhlbHBlci1zcHJpbmctYm9vdC1zdGFydGVyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS40Ljc8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKwogCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2xmNGotYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS43LjMwPC92ZXJzaW9uPiA8IS0tIOeJiOacrOWPr+S7peagueaNrumcgOimgeiwg+aVtCAtLT4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNy4zMjwvdmVyc2lvbj4gPCEtLSDniYjmnKzlj6/ku6XmoLnmja7pnIDopoHosIPmlbQgLS0+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jaC5xb3MubG9nYmFjazwvZ3JvdXBJZD4KQEAgLTEyMCw3ICsxMzYsNiBAQAogICAgICAgICAgICAgPHZlcnNpb24+MS4yLjM8L3ZlcnNpb24+IDwhLS0g54mI5pys5Y+v5Lul5qC55o2u6ZyA6KaB6LCD5pW0IC0tPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgotCiAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWZpbGV1cGxvYWQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWZpbGV1cGxvYWQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4xLjQ8L3ZlcnNpb24+CkBAIC0xMzAsMTEgKzE0NSw3IEBACiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXZhbGlkYXRpb248L2FydGlmYWN0SWQ+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jb20uYmFpZHViY2U8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5xaWFuZmFuPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MC4xLjE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKwogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItd2ViZmx1eDwvYXJ0aWZhY3RJZD4KQEAgLTE0NSwxNiArMTU2LDY4IEBACiAgICAgICAgICAgICA8dmVyc2lvbj40LjEyPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vY2tpdG88L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tb2NraXRvLWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKwogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItdGVzdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtY29tbW9uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8IS0tIHR0b3JyZW50IC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtY2xpZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LWNsaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnR1cm48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dG9ycmVudC1uZXR3b3JrPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnR1cm48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dG9ycmVudC10ZXN0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtYmVuY29kaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LXRlc3RzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LXRyYWNrZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIueGlhb3ltaW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rbmlmZTRqLW9wZW5hcGkzLWpha2FydGEtc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuNS4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jbi5kZXYzMzwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNhLXRva2VuLXNwcmluZy1ib290LXN0YXJ0ZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3NhLXRva2VuLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKworCiAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnBlcnNpc3RlbmNlPC9ncm91cElkPgpAQCAtMTYyLDI5ICsyMjUsNiBAQAogICAgICAgICAgICAgPHZlcnNpb24+My4xLjA8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItZGF0YS1qcGE8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmpha2FydGEudHJhbnNhY3Rpb248L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWthcnRhLnRyYW5zYWN0aW9uLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC4wPC92ZXJzaW9uPiA8IS0tIOS9v+eUqOacgOaWsOeJiOacrCAtLT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmhpYmVybmF0ZTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmhpYmVybmF0ZS1jb3JlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NS42LjcuRmluYWw8L3ZlcnNpb24+IDwhLS0g5LiOIEpha2FydGEg5YW85a6555qE54mI5pysIC0tPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5teXNxbDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm15c3FsLWNvbm5lY3Rvci1qYXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+OC4wLjI3PC92ZXJzaW9uPiA8IS0tIOS9v+eUqOmAguWQiOS9oOeahOeJiOacrCAtLT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCiAgICAgPC9kZXBlbmRlbmNpZXM+CiAKIApAQCAtMjMyLDcgKzI3Miw4IEBACiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPCEtLXN1cHByZXNzIFVucmVzb2x2ZWRNYXZlblByb3BlcnR5IC0tPgorICAgICAgICAgICAgICAgICAgICA8IS0tc3VwcHJlc3MKKyAgICAgICAgICAgICAgICAgICAgVW5yZXNvbHZlZE1hdmVuUHJvcGVydHkgLS0+CiAgICAgICAgICAgICAgICAgICAgIDxhcmdMaW5lPiR7c3VyZWZpcmVBcmdMaW5lfTwvYXJnTGluZT4KICAgICAgICAgICAgICAgICAgICAgPHNraXBUZXN0cz5mYWxzZTwvc2tpcFRlc3RzPgogICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CkBAIC0yNTEsMTQgKzI5MiwyMiBAQAogICAgICAgICAgICAgPC9wbHVnaW4+CiAKICAgICAgICAgPC9wbHVnaW5zPgotICAgICAgICA8cmVzb3VyY2VzPgotICAgICAgICAgICAgPHJlc291cmNlPgotICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5PgotICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi54bWw8L2luY2x1ZGU+Ci0gICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KLSAgICAgICAgICAgIDwvcmVzb3VyY2U+Ci0gICAgICAgIDwvcmVzb3VyY2VzPgorPCEtLSAgICAgICAgICAgICAgICA8cmVzb3VyY2VzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgPHJlc291cmNlPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5Pi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi54bWw8L2luY2x1ZGU+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2U+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICA8cmVzb3VyY2U+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5saWJzPC9kaXJlY3Rvcnk+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qLmphcjwvaW5jbHVkZT4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgPC9yZXNvdXJjZT4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2VzPi0tPgorCisKICAgICA8L2J1aWxkPgogCiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmphdmEKaW5kZXggNDljZDVmMC4uZWI1ODA4MiAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhCkBAIC01LDEwICs1LDE0IEBACiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LlNwcmluZ0FwcGxpY2F0aW9uOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5hdXRvY29uZmlndXJlLlNwcmluZ0Jvb3RBcHBsaWNhdGlvbjsKIAorCisKIEBTcHJpbmdCb290QXBwbGljYXRpb24KIEBNYXBwZXJTY2FuKCJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyIikgIC8vIOaJq+aPjyBNYXBwZXIg5o6l5Y+jCisKIHB1YmxpYyBjbGFzcyBNeVByb2plY3RBcHBsaWNhdGlvbiB7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTcHJpbmdBcHBsaWNhdGlvbi5ydW4oTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MsIGFyZ3MpOwogICAgIH0KIH0KKwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTYzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29tbW9uUmVzdWx0U3RhdHVzLmphdmEKQEAgLTAsMCArMSwzNyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uOworCisKK3B1YmxpYyBlbnVtIENvbW1vblJlc3VsdFN0YXR1cyBpbXBsZW1lbnRzIFJlc3VsdFN0YXR1cyB7CisKKyAgICBPSygwLCAi5oiQ5YqfIiksCisKKyAgICBGQUlMKDUwMCwgIuWksei0pSIpLAorCisgICAgUEFSQU1fRVJST1IoNDAwLCAi5Y+C5pWw6Z2e5rOVIiksCisKKyAgICBSRUNPUkRfTk9UX0VYSVNUKDQwNCwgIuiusOW9leS4jeWtmOWcqCIpLAorCisgICAgVU5BVVRIT1JJWkVEKDQwMSwgIuacquaOiOadgyIpLAorCisgICAgRk9SQklEREVOKDQwMywgIuaXoOadg+mZkCIpLAorCisgICAgU0VSVkVSX0VSUk9SKDUwMCwgIuacjeWKoeWZqOWGhemDqOmUmeivryIpOworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgY29kZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtZXNzYWdlOworCisgICAgQ29tbW9uUmVzdWx0U3RhdHVzKGludCBjb2RlLCBTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOworICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0Q29kZSgpIHsKKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzZDg2NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb247CisKKworcHVibGljIGludGVyZmFjZSBDb25zdGFudHMgeworCisgICAgU3RyaW5nIFRPS0VOX0hFQURFUl9OQU1FID0gIkF1dGhvcml6YXRpb24iOworICAgIFN0cmluZyBTRVNTSU9OX0NVUlJFTlRfVVNFUiA9ICJjdXJyZW50VXNlciI7CisKKyAgICAvKioKKyAgICAgKiDoj5zljZXmoLlpZAorICAgICAqLworICAgIEludGVnZXIgUkVTT1VSQ0VfUk9PVF9JRCA9IDA7CisKKyAgICBpbnRlcmZhY2UgT3JkZXIgeworICAgICAgICBTdHJpbmcgREVGQVVMVF9PUkRFUl9UWVBFID0gImRlc2MiOworCisgICAgICAgIFN0cmluZ1tdIE9SREVSX1RZUEUgPSBuZXcgU3RyaW5nW117ImRlc2MiLCAiYXNjIiwgIkRFU0MiLCAiQVNDIn07CisgICAgfQorCisgICAgaW50ZXJmYWNlIEZpbmlzaFN0YXR1cyB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIOW3suWujOaIkOW5tua1i+ivlQorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIEZJTklTSEVEID0gIiAo5bey5a6M5oiQ5bm25rWL6K+V6YCa6L+HKSI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIOacquWujOaIkOacqua1i+ivlQorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIFVORklOSVNIRUQgPSAiICjmnKrlrozmiJDmnKrmtYvor5UpIjsKKworICAgICAgICAvKioKKyAgICAgICAgICog5bey5a6M5oiQ5L2G5pyq5rWL6K+VCisgICAgICAgICAqLworICAgICAgICBTdHJpbmcgRklOSVNIRURfTk9UX1RFU1QgPSAiICjlt7LlrozmiJDkvYbmnKrmtYvor5UpIjsKKworICAgIH0KKworICAgIGludGVyZmFjZSBTb3VyY2UgeworICAgICAgICBTdHJpbmcgUFJFRklYID0gIltSS1RdICI7CisKKyAgICAgICAgU3RyaW5nIE5BTUUgPSAicm9ja2V0IHB0IjsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQW5ub3VuY2UgeworCisgICAgICAgIFN0cmluZyBQUk9UT0NPTCA9ICJodHRwIjsKKworICAgICAgICBTdHJpbmcgSE9TVE5BTUUgPSAiMTkyLjE2OC42LjExMiI7CisKKyAgICAgICAgSW50ZWdlciBQT1JUID0gOTk2NjsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9SZXN1bHRTdGF0dXMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9SZXN1bHRTdGF0dXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmM3YWZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL1Jlc3VsdFN0YXR1cy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbjsKKworCitwdWJsaWMgaW50ZXJmYWNlIFJlc3VsdFN0YXR1cyB7CisgICAgLyoqCisgICAgICog6ZSZ6K+v56CBCisgICAgICovCisgICAgaW50IGdldENvZGUoKTsKKworICAgIC8qKgorICAgICAqIOmUmeivr+S/oeaBrworICAgICAqLworICAgIFN0cmluZyBnZXRNZXNzYWdlKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9JMThuTWVzc2FnZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI1ZTliCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuamF2YQpAQCAtMCwwICsxLDYxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZTsKKworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5NZXNzYWdlU291cmNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5pMThuLkxvY2FsZUNvbnRleHRIb2xkZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuUmVsb2FkYWJsZVJlc291cmNlQnVuZGxlTWVzc2FnZVNvdXJjZTsKKworaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOworCitpbXBvcnQgbG9tYm9rLmV4cGVyaW1lbnRhbC5VdGlsaXR5Q2xhc3M7CitpbXBvcnQgbG9tYm9rLmV4dGVybi5zbGY0ai5TbGY0ajsKKworQFNsZjRqCitAVXRpbGl0eUNsYXNzCitwdWJsaWMgY2xhc3MgSTE4bk1lc3NhZ2UgeworCisgICAgc3RhdGljIHsKKyAgICAgICAgUmVsb2FkYWJsZVJlc291cmNlQnVuZGxlTWVzc2FnZVNvdXJjZSBtZXNzYWdlU291cmNlID0KKyAgICAgICAgICAgICAgICBuZXcgUmVsb2FkYWJsZVJlc291cmNlQnVuZGxlTWVzc2FnZVNvdXJjZSgpOworICAgICAgICBtZXNzYWdlU291cmNlLnNldENhY2hlU2Vjb25kcyg1KTsKKyAgICAgICAgbWVzc2FnZVNvdXJjZS5zZXRCYXNlbmFtZXMoImNsYXNzcGF0aDppMThuL21lc3NhZ2UiKTsKKyAgICAgICAgSTE4bk1lc3NhZ2UuaW5pdChtZXNzYWdlU291cmNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBNZXNzYWdlU291cmNlIG1lc3NhZ2VTb3VyY2U7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdChNZXNzYWdlU291cmNlIG1lc3NhZ2VTb3VyY2UpIHsKKyAgICAgICAgT2JqZWN0cy5yZXF1aXJlTm9uTnVsbChtZXNzYWdlU291cmNlLCAiTWVzc2FnZVNvdXJjZSBjYW4ndCBiZSBudWxsIik7CisgICAgICAgIEkxOG5NZXNzYWdlLm1lc3NhZ2VTb3VyY2UgPSBtZXNzYWdlU291cmNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIOivu+WPluWbvemZheWMlua2iOaBrworICAgICAqCisgICAgICogQHBhcmFtIG1zZ0NvZGUg5raI5oGv56CBCisgICAgICogQHBhcmFtIGFyZ3MgICAg5raI5oGv5Y+C5pWwIOS+izogbmV3IFN0cmluZ1tdeyIxIiwiMiIsIjMifQorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtc2dDb2RlLCBPYmplY3RbXSBhcmdzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gSTE4bk1lc3NhZ2UubWVzc2FnZVNvdXJjZS5nZXRNZXNzYWdlKG1zZ0NvZGUsIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgIExvY2FsZUNvbnRleHRIb2xkZXIuZ2V0TG9jYWxlKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZy5lcnJvcigiPT09PiDor7vlj5blm73pmYXljJbmtojmga/lpLHotKUsIGNvZGU6e30sIGFyZ3M6e30sIGV4Ont9IiwgbXNnQ29kZSwgYXJncywKKyAgICAgICAgICAgICAgICAgICAgZS5nZXRNZXNzYWdlKCkgPT0gbnVsbCA/IGUudG9TdHJpbmcoKSA6IGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIi1Vbmtub3duLSI7CisgICAgfQorCisgICAgLyoqCisgICAgICog6I635Y+W5LiA5p2h6K+t6KiA6YWN572u5L+h5oGvCisgICAgICoKKyAgICAgKiBAcGFyYW0gbXNnQ29kZSDmtojmga/noIEKKyAgICAgKiBAcmV0dXJuIOWvueW6lOmFjee9rueahOS/oeaBrworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1zZ0NvZGUpIHsKKyAgICAgICAgcmV0dXJuIEkxOG5NZXNzYWdlLmdldE1lc3NhZ2UobXNnQ29kZSwgbnVsbCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvT3JkZXJQYWdlUGFyYW0uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL09yZGVyUGFnZVBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmZjM4YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL09yZGVyUGFnZVBhcmFtLmphdmEKQEAgLTAsMCArMSw5OSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2U7CisKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uQ29tbW9uUmVzdWx0U3RhdHVzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uQ29uc3RhbnRzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uZXhjZXB0aW9uLlJvY2tldFBURXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgY24uaHV0b29sLmNvcmUudXRpbC5BcnJheVV0aWw7CitpbXBvcnQgY24uaHV0b29sLmNvcmUudXRpbC5TdHJVdGlsOworaW1wb3J0IGlvLnN3YWdnZXIudjMub2FzLmFubm90YXRpb25zLm1lZGlhLlNjaGVtYTsKK2ltcG9ydCBsb21ib2suR2V0dGVyOworaW1wb3J0IGxvbWJvay5TZXR0ZXI7CisKK0BHZXR0ZXIKK0BTZXR0ZXIKK3B1YmxpYyBjbGFzcyBPcmRlclBhZ2VQYXJhbSBleHRlbmRzIFBhZ2VQYXJhbSB7CisKKyAgICAvKioKKyAgICAgKiDmjpLluo/lrZfmrrUKKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuaOkuW6j+Wtl+autSIpCisgICAgcHJvdGVjdGVkIFN0cmluZyBwcm9wOworCisgICAgLyoqCisgICAgICog5o6S5bqP6KeE5YiZCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLmjpLluo/op4TliJkiKQorICAgIHByb3RlY3RlZCBTdHJpbmcgc29ydDsKKworICAgIHB1YmxpYyB2b2lkIHZhbGlkT3JkZXIoTGlzdDxTdHJpbmc+IG9yZGVyS2V5KSB0aHJvd3MgUm9ja2V0UFRFeGNlcHRpb24geworICAgICAgICBwcm9wID0gU3RyaW5nVXRpbHMuaXNCbGFuayhwcm9wKSA/IG51bGwgOiBTdHJVdGlsLnRvVW5kZXJsaW5lQ2FzZShwcm9wKTsKKyAgICAgICAgc29ydCA9IFN0cmluZ1V0aWxzLmlzQmxhbmsoc29ydCkgPyBDb25zdGFudHMuT3JkZXIuREVGQVVMVF9PUkRFUl9UWVBFIDogc29ydDsKKworICAgICAgICBpZiAoQXJyYXlzLmFzTGlzdChDb25zdGFudHMuT3JkZXIuT1JERVJfVFlQRSkuaW5kZXhPZihzb3J0KSA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSb2NrZXRQVEV4Y2VwdGlvbihDb21tb25SZXN1bHRTdGF0dXMuUEFSQU1fRVJST1IsICLmjpLluo/mlrnlvI/pjK/oqqQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChTdHJpbmdVdGlscy5pc05vdEJsYW5rKHByb3ApICYmIEFycmF5cy5hc0xpc3Qob3JkZXJLZXkpLmluZGV4T2YocHJvcCkgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUm9ja2V0UFRFeGNlcHRpb24oQ29tbW9uUmVzdWx0U3RhdHVzLlBBUkFNX0VSUk9SLCAi5o6S5bqP5qyE5L2N6Yyv6KqkIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB2YWxpZE9yZGVyKCkgdGhyb3dzIFJvY2tldFBURXhjZXB0aW9uIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IG9yZGVyS2V5ID0gZ2V0T3JkZXJLZXkoKTsKKyAgICAgICAgcHJvcCA9IFN0cmluZ1V0aWxzLmlzQmxhbmsocHJvcCkgPyBudWxsIDogU3RyVXRpbC50b1VuZGVybGluZUNhc2UocHJvcCk7CisgICAgICAgIHNvcnQgPSBTdHJpbmdVdGlscy5pc0JsYW5rKHNvcnQpID8gQ29uc3RhbnRzLk9yZGVyLkRFRkFVTFRfT1JERVJfVFlQRSA6IHNvcnQ7CisKKyAgICAgICAgaWYgKCFBcnJheVV0aWwuY29udGFpbnMoQ29uc3RhbnRzLk9yZGVyLk9SREVSX1RZUEUsIHNvcnQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUm9ja2V0UFRFeGNlcHRpb24oQ29tbW9uUmVzdWx0U3RhdHVzLlBBUkFNX0VSUk9SLCAi5o6S5bqP5pa55byP6Yyv6KqkIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoU3RyaW5nVXRpbHMuaXNOb3RCbGFuayhwcm9wKSAmJiAhb3JkZXJLZXkuY29udGFpbnMocHJvcCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSb2NrZXRQVEV4Y2VwdGlvbihDb21tb25SZXN1bHRTdGF0dXMuUEFSQU1fRVJST1IsICLmjpLluo/mrITkvY3pjK/oqqQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4g5Y+N5bCE6I635Y+W5a2X5q615YiX6KGoCisgICAgICovCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRPcmRlcktleSgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBGaWVsZFtdIGZpZWxkcyA9IGdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcyAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKEZpZWxkIGZpZWxkIDogZmllbGRzKSB7CisgICAgICAgICAgICAgICAgZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGZpZWxkLmdldE5hbWUoKTsKKworICAgICAgICAgICAgICAgIGxpc3QuYWRkKFN0clV0aWwudG9VbmRlcmxpbmVDYXNlKG5hbWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisgICAgLyoqCisgICAgICogQHJldHVybiDlj43lsITojrflj5blrZfmrrXliJfooagKKyAgICAgKi8KKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldE9yZGVyS2V5KENsYXNzIGNsYXp6KSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAgICAgRmllbGRbXSBmaWVsZHMgPSBjbGF6ei5nZXREZWNsYXJlZEZpZWxkcygpOworICAgICAgICBpZiAoZmllbGRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoRmllbGQgZmllbGQgOiBmaWVsZHMpIHsKKyAgICAgICAgICAgICAgICBmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOworICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZmllbGQuZ2V0TmFtZSgpOworCisgICAgICAgICAgICAgICAgbGlzdC5hZGQoU3RyVXRpbC50b1VuZGVybGluZUNhc2UobmFtZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVBhcmFtLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTkxMDhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVBhcmFtLmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2U7CisKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk1heDsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk1pbjsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk5vdE51bGw7CitpbXBvcnQgbG9tYm9rLkdldHRlcjsKK2ltcG9ydCBsb21ib2suU2V0dGVyOworaW1wb3J0IGxvbWJvay5Ub1N0cmluZzsKKworCitAR2V0dGVyCitAU2V0dGVyCitAVG9TdHJpbmcKK3B1YmxpYyBjbGFzcyBQYWdlUGFyYW0geworICAgIEBOb3ROdWxsKG1lc3NhZ2UgPSAicGFnZeWPguaVsOS4jeiDveS4uuepuiIpCisgICAgQE1pbih2YWx1ZSA9IDFMLCBtZXNzYWdlID0gInBhZ2Xlj4LmlbDlv4XpobvmmK/mlbDlrZfmiJbmlbDlgLzlsI/kuo7pmZDliLYiKQorICAgIHByb3RlY3RlZCBJbnRlZ2VyIHBhZ2U7CisKKyAgICBATm90TnVsbChtZXNzYWdlID0gIuWPguaVsOS4jeiDveS4uuepuiIpCisgICAgQE1pbih2YWx1ZSA9IDFMLCBtZXNzYWdlID0gIuWPguaVsOW/hemhu+aYr+aVsOWtl+aIluaVsOWAvOWwj+S6jumZkOWItiIpCisgICAgQE1heCh2YWx1ZSA9IDIwMEwsIG1lc3NhZ2UgPSAi5Y+C5pWw5b+F6aG75piv5pWw5a2X5oiW5pWw5YC85aSn5LqO6ZmQ5Yi2IikKKyAgICBwcm90ZWN0ZWQgSW50ZWdlciBzaXplOworCisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1BhZ2VVdGlsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YjUxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5iYXNlOworCitpbXBvcnQgY29tLmdpdGh1Yi5wYWdlaGVscGVyLlBhZ2VIZWxwZXI7CitpbXBvcnQgY29tLmdpdGh1Yi5wYWdlaGVscGVyLlBhZ2VJbmZvOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBQYWdlVXRpbCB7CisKKworICAgIHB1YmxpYyBzdGF0aWMgaW50IERFRkFVTFRfUEFHRV9TSVpFID0gMjA7CisKKyAgICAvKioKKyAgICAgKiDlvIDlp4vliIbpobUKKyAgICAgKgorICAgICAqIEBwYXJhbSBwYXJhbQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydFBhZ2UoT3JkZXJQYWdlUGFyYW0gcGFyYW0pIHsKKyAgICAgICAgSW50ZWdlciBwYWdlID0gcGFyYW0uZ2V0UGFnZSgpOworICAgICAgICBpZiAocGFnZSA9PSBudWxsKSB7CisgICAgICAgICAgICBwYXJhbS5zZXRQYWdlKDEpOworICAgICAgICAgICAgcGFyYW0uc2V0U2l6ZShERUZBVUxUX1BBR0VfU0laRSk7CisgICAgICAgIH0KKworICAgICAgICBQYWdlSGVscGVyLnN0YXJ0UGFnZShwYXJhbS5nZXRQYWdlKCksIHBhcmFtLmdldFNpemUoKSk7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDlvIDlp4vliIbpobUKKyAgICAgKgorICAgICAqIEBwYXJhbSBwYXJhbQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydFBhZ2UoUGFnZVBhcmFtIHBhcmFtKSB7CisgICAgICAgIEludGVnZXIgcGFnZSA9IHBhcmFtLmdldFBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcGFyYW0uc2V0UGFnZSgxKTsKKyAgICAgICAgICAgIHBhcmFtLnNldFNpemUoREVGQVVMVF9QQUdFX1NJWkUpOworICAgICAgICB9CisKKyAgICAgICAgUGFnZUhlbHBlci5zdGFydFBhZ2UocGFyYW0uZ2V0UGFnZSgpLCBwYXJhbS5nZXRTaXplKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOWIhumhtee7k+aenAorICAgICAqCisgICAgICogQHBhcmFtIGxpc3QKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc1BhZ2UgZ2V0UGFnZShMaXN0IGxpc3QpIHsKKyAgICAgICAgUGFnZUluZm8gcGFnZUluZm8gPSBuZXcgUGFnZUluZm8obGlzdCk7CisgICAgICAgIHJldHVybiBuZXcgUmVzUGFnZShwYWdlSW5mby5nZXRUb3RhbCgpLCBwYWdlSW5mby5nZXRQYWdlTnVtKCksIHBhZ2VJbmZvLmdldFNpemUoKSk7CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXNQYWdlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXNQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhMjJkZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc1BhZ2UuamF2YQpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZTsKK2ltcG9ydCBsb21ib2suQWxsQXJnc0NvbnN0cnVjdG9yOworaW1wb3J0IGxvbWJvay5HZXR0ZXI7CitpbXBvcnQgbG9tYm9rLk5vQXJnc0NvbnN0cnVjdG9yOworaW1wb3J0IGxvbWJvay5TZXR0ZXI7CitpbXBvcnQgbG9tYm9rLlRvU3RyaW5nOworCisvKioKKyAqIOWIhumhteeahOi/lOWbnuWAvAorICovCitAR2V0dGVyCitAU2V0dGVyCitAVG9TdHJpbmcoY2FsbFN1cGVyID0gZmFsc2UpCitATm9BcmdzQ29uc3RydWN0b3IKK0BBbGxBcmdzQ29uc3RydWN0b3IKK3B1YmxpYyBjbGFzcyBSZXNQYWdlIHsKKworICAgIHByaXZhdGUgbG9uZyB0b3RhbDsKKworICAgIHByaXZhdGUgaW50IHBhZ2U7CisKKyAgICBwcml2YXRlIGludCBzaXplOworCisgICAgcHVibGljIHN0YXRpYyBSZXNQYWdlIGdldFBhZ2UobG9uZyB0b3RhbCwgaW50IHBhZ2UsIGludCBzaXplKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzUGFnZSh0b3RhbCwgcGFnZSwgc2l6ZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBSZXNQYWdlIGRlZmF1bHRQYWdlKCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc1BhZ2UoMTAsIDEsIDEwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjBmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2U7CisKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25JZ25vcmU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OworCitpbXBvcnQgbG9tYm9rLkdldHRlcjsKK2ltcG9ydCBsb21ib2suTm9BcmdzQ29uc3RydWN0b3I7CitpbXBvcnQgbG9tYm9rLlNldHRlcjsKK2ltcG9ydCBsb21ib2suVG9TdHJpbmc7CisKKy8qKgorICog6L+U5Zue5YC85a6e5L2T57G7CisgKi8KK0BHZXR0ZXIKK0BTZXR0ZXIKK0BUb1N0cmluZworQE5vQXJnc0NvbnN0cnVjdG9yCitwdWJsaWMgY2xhc3MgUmVzdWx0PFQ+IHsKKworICAgIHByaXZhdGUgaW50IGNvZGU7CisKKyAgICBwcml2YXRlIFN0cmluZyBtc2c7CisKKyAgICBASnNvblByb3BlcnR5CisgICAgcHJpdmF0ZSBUIGRhdGE7CisKKyAgICBwcml2YXRlIFJlc1BhZ2UgcGFnZTsKKworCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gc3RhdHVzLmdldE1zZygpOworICAgICAgICB0aGlzLmRhdGEgPSBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBSZXN1bHQoU3RhdHVzIHN0YXR1cywgVCBkYXRhKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gc3RhdHVzLmdldE1zZygpOworICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgIH0KKworICAgIHB1YmxpYyBSZXN1bHQoU3RhdHVzIHN0YXR1cywgU3RyaW5nIG1zZykgeworICAgICAgICB0aGlzLmNvZGUgPSBzdGF0dXMuZ2V0Q29kZSgpOworICAgICAgICB0aGlzLm1zZyA9IG1zZzsKKyAgICAgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdWx0KFN0YXR1cyBzdGF0dXMsIGludCBtc2dDb2RlKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gSTE4bk1lc3NhZ2UuZ2V0TWVzc2FnZShTdHJpbmcudmFsdWVPZihtc2dDb2RlKSk7CisgICAgICAgIHRoaXMuZGF0YSA9IG51bGw7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzLCBTdHJpbmcgbXNnLCBUIGRhdGEpIHsKKyAgICAgICAgdGhpcy5jb2RlID0gc3RhdHVzLmdldENvZGUoKTsKKyAgICAgICAgdGhpcy5tc2cgPSBtc2c7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzLCBpbnQgbXNnQ29kZSwgVCBkYXRhKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gSTE4bk1lc3NhZ2UuZ2V0TWVzc2FnZShTdHJpbmcudmFsdWVPZihtc2dDb2RlKSk7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzLCBUIGRhdGEsIFJlc1BhZ2UgcGFnZSkgeworICAgICAgICB0aGlzLmNvZGUgPSBzdGF0dXMuZ2V0Q29kZSgpOworICAgICAgICB0aGlzLm1zZyA9IHN0YXR1cy5nZXRNc2coKTsKKyAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgdGhpcy5wYWdlID0gcGFnZTsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdWx0KFN0YXR1cyBzdGF0dXMsIFN0cmluZyBtc2csIFQgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gbXNnOworICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlOworICAgIH0KKworICAgIHB1YmxpYyBSZXN1bHQoU3RhdHVzIHN0YXR1cywgaW50IG1zZ0NvZGUsIFQgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gSTE4bk1lc3NhZ2UuZ2V0TWVzc2FnZShTdHJpbmcudmFsdWVPZihtc2dDb2RlKSk7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgICAgIHRoaXMucGFnZSA9IHBhZ2U7CisgICAgfQorCisgICAgQEpzb25JZ25vcmUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N1Y2Nlc3MoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvZGUgPT0gU3RhdHVzLlNVQ0NFU1MuZ2V0Q29kZSgpOworICAgIH0KKworICAgIEBKc29uSWdub3JlCisgICAgcHVibGljIGJvb2xlYW4gbm9uU3VjY2VzcygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29kZSAhPSBTdGF0dXMuU1VDQ0VTUy5nZXRDb2RlKCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHN1Y2Nlc3MoU3RyaW5nIOWPlua2iOaUtuiXj+aIkOWKnykgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuU1VDQ0VTUyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IG9rKCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuU1VDQ0VTUyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IG9rKFQgZGF0YSkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuU1VDQ0VTUywgZGF0YSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGlsbGVnYWwoKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0PFQ+KFN0YXR1cy5CQURfUkVRVUVTVCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHVuYXV0aG9yaXplZCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLlVOQVVUSE9SSVpFRCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGZvcmJpZGRlbigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZPUkJJRERFTik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IG5vdEZvdW5kKCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuTk9UX0ZPVU5EKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gZmFpbHVyZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZBSUxVUkUpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBmYWlsdXJlKFN0cmluZyBtc2cpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZBSUxVUkUsIG1zZyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGVycm9yKFN0cmluZyBtc2cpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZBSUxVUkUsIG1zZyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGNvbmZsaWN0KCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuQ09ORkxJQ1QpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBidWlsZChTdGF0dXMgc3RhdHVzLCBUIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oc3RhdHVzLCBkYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gYnVpbGQoU3RhdHVzIHN0YXR1cywgU3RyaW5nIG1zZykgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihzdGF0dXMsIG1zZyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGJ1aWxkKFN0YXR1cyBzdGF0dXMsIGludCBtc2dDb2RlKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0PFQ+KHN0YXR1cywgbXNnQ29kZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGJ1aWxkKFN0YXR1cyBzdGF0dXMsIFN0cmluZyBtc2csIFQgZGF0YSkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihzdGF0dXMsIG1zZywgZGF0YSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGJ1aWxkKFN0YXR1cyBzdGF0dXMsIGludCBtc2dDb2RlLCBUIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oc3RhdHVzLCBtc2dDb2RlLCBkYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBvayhPYmplY3QgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KFN0YXR1cy5TVUNDRVNTLCBkYXRhLCBwYWdlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBidWlsZChTdGF0dXMgc3RhdHVzLCBPYmplY3QgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KHN0YXR1cywgZGF0YSwgcGFnZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBSZXN1bHQgYnVpbGQoU3RhdHVzIHN0YXR1cywgU3RyaW5nIG1zZywgT2JqZWN0IGRhdGEsIFJlc1BhZ2UgcGFnZSkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChzdGF0dXMsIG1zZywgZGF0YSwgcGFnZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBSZXN1bHQgYnVpbGQoU3RhdHVzIHN0YXR1cywgaW50IG1zZ0NvZGUsIE9iamVjdCBkYXRhLCBSZXNQYWdlIHBhZ2UpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoc3RhdHVzLCBtc2dDb2RlLCBkYXRhLCBwYWdlKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvU3RhdHVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0OWQwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5iYXNlOworCisKK3B1YmxpYyBlbnVtIFN0YXR1cyB7CisKKyAgICAvKioKKyAgICAgKiDor7fmsYLmiafooYzmiJDlip8KKyAgICAgKi8KKyAgICBTVUNDRVNTKDAsICLmk43kvZzmiJDlip8iKSwKKworICAgIC8qKgorICAgICAqIOivt+axgumqjOivgeWksei0pQorICAgICAqLworICAgIEJBRF9SRVFVRVNUKDQwMCwgIuaTjeS9nOmqjOivgeWksei0pSIpLAorCisgICAgLyoqCisgICAgICog5p2D6ZmQ5LiN6LazCisgICAgICovCisgICAgVU5BVVRIT1JJWkVEKDQwMSwgIuaTjeS9nOacquaOiOadgyIpLAorCisgICAgLyoqCisgICAgICog6K+35rGC5ouS57udCisgICAgICovCisgICAgRk9SQklEREVOKDQwMywgIuaTjeS9nOiiq+aLkue7nSIpLAorCisgICAgLyoqCisgICAgICog5pyq55+l6K+35rGCCisgICAgICovCisgICAgTk9UX0ZPVU5EKDQwNCwgIuacquefpeaTjeS9nCIpLAorCisgICAgLyoqCisgICAgICog5pyq55+l6K+35rGCCisgICAgICovCisgICAgQ09ORkxJQ1QoNDA5LCAi6K+35rGC5Y+R55Sf5Yay56qBIiksCisKKyAgICAvKioKKyAgICAgKiDor7fmsYLmiafooYzlpLHotKUKKyAgICAgKi8KKyAgICBGQUlMVVJFKDUwMCwgIuaTjeS9nOWksei0pSIpOworCisgICAgcHJpdmF0ZSBpbnQgY29kZTsKKworICAgIHByaXZhdGUgU3RyaW5nIG1zZzsKKworICAgIFN0YXR1cyhpbnQgY29kZSwgU3RyaW5nIG1zZykgeworICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOworICAgICAgICB0aGlzLm1zZyA9IG1zZzsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldENvZGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvZGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRNc2coKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1zZzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vZXhjZXB0aW9uL1JvY2tldFBURXhjZXB0aW9uLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vZXhjZXB0aW9uL1JvY2tldFBURXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NzVmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9leGNlcHRpb24vUm9ja2V0UFRFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uZXhjZXB0aW9uOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5Db21tb25SZXN1bHRTdGF0dXM7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5SZXN1bHRTdGF0dXM7CisKK3B1YmxpYyBjbGFzcyBSb2NrZXRQVEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geworICAgIHByaXZhdGUgZmluYWwgUmVzdWx0U3RhdHVzIHN0YXR1czsKKworICAgIHB1YmxpYyBSb2NrZXRQVEV4Y2VwdGlvbihSZXN1bHRTdGF0dXMgc3RhdHVzKSB7CisgICAgICAgIHN1cGVyKHN0YXR1cy5nZXRNZXNzYWdlKCkpOworICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKKyAgICB9CisKKyAgICBwdWJsaWMgUm9ja2V0UFRFeGNlcHRpb24oUmVzdWx0U3RhdHVzIHN0YXR1cywgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgc3VwZXIobWVzc2FnZSk7CisgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOworICAgIH0KKworICAgIHB1YmxpYyBSb2NrZXRQVEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBzdXBlcihtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBDb21tb25SZXN1bHRTdGF0dXMuRkFJTDsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdWx0U3RhdHVzIGdldFN0YXR1cygpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzMWI5MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29uZmlnOworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUuaGFuZGxlcnMuTWV0YU9iamVjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMucmVmbGVjdGlvbi5NZXRhT2JqZWN0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5Db21wb25lbnQ7CisKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKKworQENvbXBvbmVudAorcHVibGljIGNsYXNzIE15TWV0YU9iamVjdEhhbmRsZXIgaW1wbGVtZW50cyBNZXRhT2JqZWN0SGFuZGxlciB7CisKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGluc2VydEZpbGwoTWV0YU9iamVjdCBtZXRhT2JqZWN0KSB7CisgICAgICAgIHRoaXMuc3RyaWN0SW5zZXJ0RmlsbChtZXRhT2JqZWN0LCAiY3JlYXRlVGltZSIsIExvY2FsRGF0ZVRpbWUuY2xhc3MsIExvY2FsRGF0ZVRpbWUubm93KCkpOworICAgICAgICB0aGlzLnN0cmljdEluc2VydEZpbGwobWV0YU9iamVjdCwgInVwZGF0ZVRpbWUiLCBMb2NhbERhdGVUaW1lLmNsYXNzLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKyAgICB9CisKKyAgICAvLyDmm7TmlrDml7boh6rliqjloavlhYUKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVGaWxsKE1ldGFPYmplY3QgbWV0YU9iamVjdCkgeworICAgICAgICB0aGlzLnN0cmljdFVwZGF0ZUZpbGwobWV0YU9iamVjdCwgInVwZGF0ZVRpbWUiLCBMb2NhbERhdGVUaW1lLmNsYXNzLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvVHJhY2tlckNvbmZpZy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzUyMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuamF2YQpAQCAtMCwwICsxLDgxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb25maWc7CisKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC50cmFja2VyLlRyYWNrZWRUb3JyZW50OworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5WYWx1ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5CZWFuOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5hbm5vdGF0aW9uLkNvbmZpZ3VyYXRpb247CitpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5QcmVEZXN0cm95OworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOworCitAQ29uZmlndXJhdGlvbgorcHVibGljIGNsYXNzIFRyYWNrZXJDb25maWcgeworICAgIEBWYWx1ZSgiJHtwdC50cmFja2VyLnBvcnR9IikKKyAgICBwcml2YXRlIGludCB0cmFja2VyUG9ydDsKKworICAgIEBWYWx1ZSgiJHtwdC50cmFja2VyLnRvcnJlbnQtZGlyfSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdG9ycmVudERpcjsKKyAgICBAVmFsdWUoIiR7cHQudHJhY2tlci5hbm5vdW5jZS11cmx9IikKKyAgICBwcml2YXRlIFN0cmluZyBhbm5vdW5jZVVSTDsKKworICAgIHByaXZhdGUgVHJhY2tlciB0cmFja2VyOyAvLyDlrZjlgqggVHJhY2tlciDlrp7kvosKKworICAgIEBCZWFuCisgICAgcHVibGljIFRyYWNrZXIgdG9ycmVudFRyYWNrZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyDpqozor4HlubbliJvlu7rnm67lvZUKKyAgICAgICAgRmlsZSBkaXIgPSBuZXcgRmlsZSh0b3JyZW50RGlyKTsKKyAgICAgICAgdmFsaWRhdGVUb3JyZW50RGlyZWN0b3J5KGRpcik7CisKKyAgICAgICAgLy8g5Yid5aeL5YyWIFRyYWNrZXIKKyAgICAgICAgdHJhY2tlciA9IG5ldyBUcmFja2VyKHRyYWNrZXJQb3J0LCBhbm5vdW5jZVVSTCk7CisgICAgICAgIHRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKGZhbHNlKTsgLy8gUFQg56uZ54K55b+F6aG75YWz6Zet5Yy/5ZCN5qih5byPCisgICAgICAgIHRyYWNrZXIuc2V0QW5ub3VuY2VJbnRlcnZhbCgxODAwKTsgLy8gMzDliIbpkp8gYW5ub3VuY2Ug6Ze06ZqUCisKKyAgICAgICAgLy8g5Yqg6L2956eN5a2Q5paH5Lu2CisgICAgICAgIGxvYWRUb3JyZW50cyh0cmFja2VyLCBkaXIpOworCisgICAgICAgIC8vIOWQr+WKqCBUcmFja2VyCisgICAgICAgIHRyYWNrZXIuc3RhcnQodHJ1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhY2tlciBzdGFydGVkIG9uIHBvcnQgIiArIHRyYWNrZXJQb3J0KTsKKyAgICAgICAgcmV0dXJuIHRyYWNrZXI7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlVG9ycmVudERpcmVjdG9yeShGaWxlIGRpcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKCFkaXIuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgIGlmICghZGlyLm1rZGlycygpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCLml6Dms5XliJvlu7rnm67lvZU6ICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZGlyLmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIui3r+W+hOS4jeaYr+ebruW9lTogIiArIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkaXIuY2FuUmVhZCgpIHx8ICFkaXIuY2FuV3JpdGUoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCLlupTnlKjnqIvluo/ml6DmnYPpmZDorr/pl67nm67lvZU6ICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGxvYWRUb3JyZW50cyhUcmFja2VyIHRyYWNrZXIsIEZpbGUgZGlyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoIWRpci5leGlzdHMoKSB8fCAhZGlyLmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigi5peg5pWI55qE56eN5a2Q55uu5b2VOiAiICsgZGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEZpbGVbXSB0b3JyZW50RmlsZXMgPSBkaXIubGlzdEZpbGVzKChkLCBuYW1lKSAtPiBuYW1lLmVuZHNXaXRoKCIudG9ycmVudCIpKTsKKyAgICAgICAgaWYgKHRvcnJlbnRGaWxlcyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIuaXoOazleivu+WPluebruW9leWGheWuuTogIiArIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEZpbGUgZiA6IHRvcnJlbnRGaWxlcykgeworICAgICAgICAgICAgdHJhY2tlci5hbm5vdW5jZShUcmFja2VkVG9ycmVudC5sb2FkKGYpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBQcmVEZXN0cm95CisgICAgcHVibGljIHZvaWQgc3RvcFRyYWNrZXIoKSB7CisgICAgICAgIGlmICh0cmFja2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyYWNrZXIuc3RvcCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFja2VyIHN0b3BwZWQuIik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGViMTM1Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbW1lbnRzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkNvbW1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9mb3J1bS9wb3N0cyIpCi1wdWJsaWMgY2xhc3MgQ29tbWVudENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgQ29tbWVudFNlcnZpY2UgY29tbWVudFNlcnZpY2U7Ci0KLSAgICAvLyDmt7vliqDor4TorroKLSAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vY29tbWVudHMiKQotICAgIHB1YmxpYyBTdHJpbmcgYWRkQ29tbWVudChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBDb21tZW50cyBjb21tZW50KSB7Ci0gICAgICAgIC8vIOa3u+WKoOivhOiuugotICAgICAgICBjb21tZW50U2VydmljZS5hZGRDb21tZW50KHBvc3RJZCwgY29tbWVudCk7Ci0gICAgICAgIHJldHVybiAiQ29tbWVudCBhZGRlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluaJgOacieivhOiuugotICAgIEBHZXRNYXBwaW5nKCIve3Bvc3RfaWR9L2dldEFsbENvbW1lbnRzIikKLSAgICBwdWJsaWMgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRDb21tZW50c0J5UG9zdElkKEBQYXRoVmFyaWFibGUoInBvc3RfaWQiKSBMb25nIHBvc3RJZCkgewotICAgICAgICAvLyDojrflj5bor4TorrrlubbloavlhYXnlKjmiLfkv6Hmga8KLSAgICAgICAgcmV0dXJuIGNvbW1lbnRTZXJ2aWNlLmdldENvbW1lbnRzQnlQb3N0SWQocG9zdElkKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxZDBhMi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckR5bmFtaWM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRHluYW1pY1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9keW5hbWljIikKLXB1YmxpYyBjbGFzcyBEeW5hbWljQ29udHJvbGxlciB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBEeW5hbWljU2VydmljZSBkeW5hbWljU2VydmljZTsKLQotICAgIC8vIOWIm+W7uuWlveWPi+WKqOaAgeaOpeWPowotICAgIEBQb3N0TWFwcGluZygiL3t1c2VyX2lkfS9jcmVhdGVEeW5hbWljIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjcmVhdGVEeW5hbWljKEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0odmFsdWUgPSAidGl0bGUiLCByZXF1aXJlZCA9IGZhbHNlKSBTdHJpbmcgdGl0bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gImNvbnRlbnQiKSBTdHJpbmcgY29udGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0odmFsdWUgPSAiaW1hZ2VfdXJsIiwgcmVxdWlyZWQgPSBmYWxzZSkgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgcmV0dXJuIGR5bmFtaWNTZXJ2aWNlLmNyZWF0ZUR5bmFtaWModXNlcklkLCB0aXRsZSwgY29udGVudCwgaW1hZ2VGaWxlcyk7Ci0gICAgfQotCi0gICAgLy/liKDpmaTlpb3lj4vliqjmgIEKLSAgICBARGVsZXRlTWFwcGluZygiL21lL2RlbGV0ZUR5bmFtaWMve2R5bmFtaWNfaWR9IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8U3RyaW5nPiBkZWxldGVEeW5hbWljKEBQYXRoVmFyaWFibGUoImR5bmFtaWNfaWQiKSBMb25nIGR5bmFtaWNJZCkgewotICAgICAgICBkeW5hbWljU2VydmljZS5kZWxldGVEeW5hbWljKGR5bmFtaWNJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygi5Yqo5oCB5Yig6Zmk5oiQ5YqfIik7Ci0gICAgfQotCi0gICAgLy/lpb3lj4vliqjmgIHor4TorroKLSAgICBAUG9zdE1hcHBpbmcoIi97dXNlcl9pZH0vZmVlZHMve2R5bmFtaWNfaWR9L2NvbW1lbnRzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gYWRkQ29tbWVudCgKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCwKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoImR5bmFtaWNfaWQiKSBMb25nIGR5bmFtaWNJZCwKLSAgICAgICAgICAgIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBTdHJpbmc+IGNvbnRlbnQpIHsKLQotICAgICAgICBTdHJpbmcgY29tbWVudENvbnRlbnQgPSBjb250ZW50LmdldCgiY29udGVudCIpOyAgLy8g6I635Y+W6K+E6K665YaF5a65Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBkeW5hbWljU2VydmljZS5hZGRDb21tZW50KHVzZXJJZCwgZHluYW1pY0lkLCBjb21tZW50Q29udGVudCk7Ci0KLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluafkOS4quWlveWPi+eahOaJgOacieWKqOaAgQotICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2dldEFkeW5hbWljIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsVXNlckR5bmFtaWNzKEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZHluYW1pY1NlcnZpY2UuZ2V0QWxsVXNlckR5bmFtaWNzKHVzZXJJZCk7Ci0KLSAgICAgICAgaWYgKHJlc3BvbnNlID09IG51bGwgfHwgcmVzcG9uc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkubm9Db250ZW50KCkuYnVpbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOi/lOWbnuWTjeW6lAotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2dldEFsbER5bmFtaWNzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyhAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g6I635Y+W5b2T5YmN55So5oi35omA5pyJ5aW95Y+L55qESUQKLSAgICAgICAgTGlzdDxMb25nPiBmcmllbmRJZHMgPSBkeW5hbWljU2VydmljZS5nZXRBbGxGcmllbmRJZHModXNlcklkKTsKLSAgICAgICAgZnJpZW5kSWRzLmFkZCh1c2VySWQpOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZHluYW1pY1NlcnZpY2UuZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyhmcmllbmRJZHMpOwotCi0gICAgICAgIGlmIChyZXNwb25zZSA9PSBudWxsIHx8IHJlc3BvbnNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm5vQ29udGVudCgpLmJ1aWxkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIC8v54K56LWe5aW95Y+L5Yqo5oCBCi0gICAgQFBvc3RNYXBwaW5nKCIvbGlrZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PFN0cmluZz4gbGlrZUR5bmFtaWMoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0LmdldCgidXNlcklkIik7Ci0gICAgICAgIExvbmcgZHluYW1pY0lkID0gcmVxdWVzdC5nZXQoImR5bmFtaWNJZCIpOwotICAgICAgICAvLyDmiafooYzngrnotZ4KLSAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZHluYW1pY1NlcnZpY2UubGlrZUR5bmFtaWModXNlcklkLCBkeW5hbWljSWQpOwotCi0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2soIkxpa2Ugc3VjY2Vzc2Z1bCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LmJhZFJlcXVlc3QoKS5ib2R5KCJMaWtlIGZhaWxlZCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQERlbGV0ZU1hcHBpbmcoIi91bmxpa2UiKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxTdHJpbmc+IHVubGlrZUR5bmFtaWMoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0LmdldCgidXNlcklkIik7Ci0gICAgICAgIExvbmcgZHluYW1pY0lkID0gcmVxdWVzdC5nZXQoImR5bmFtaWNJZCIpOwotCi0gICAgICAgIC8vIOaJp+ihjOWPlua2iOeCuei1ngotICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkeW5hbWljU2VydmljZS51bmxpa2VEeW5hbWljKHVzZXJJZCwgZHluYW1pY0lkKTsKLQotICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKCJVbmxpa2Ugc3VjY2Vzc2Z1bCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LmJhZFJlcXVlc3QoKS5ib2R5KCJVbmxpa2UgZmFpbGVkIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwODMwYjYuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cDsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwQ29tbWVudHM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuR3JvdXBTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1AUmVzdENvbnRyb2xsZXIKLUBSZXF1ZXN0TWFwcGluZygiL2VjaG8vZ3JvdXBzIikKLXB1YmxpYyBjbGFzcyBHcm91cENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgR3JvdXBTZXJ2aWNlIGdyb3VwU2VydmljZTsKLQotICAgIEBQb3N0TWFwcGluZygiL2NyZWF0ZUdyb3VwIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlR3JvdXAoQFJlcXVlc3RCb2R5IEdyb3VwIGdyb3VwUmVxdWVzdCkgewotICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLmlrnms5XliJvlu7rlsI/nu4QKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBncm91cCBuYW1lOiAiICsgZ3JvdXBSZXF1ZXN0LmdldEdyb3VwTmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIGdyb3VwU2VydmljZS5jcmVhdGVHcm91cChncm91cFJlcXVlc3QpOwotICAgIH0KLQotCi0gICAgLy8g5Yqg5YWl5bCP57uE5o6l5Y+jCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9qb2luIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gam9pbkdyb3VwKEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7Ci0gICAgICAgIHJldHVybiBncm91cFNlcnZpY2Uuam9pbkdyb3VwKGdyb3VwSWQsIHVzZXJJZCk7Ci0gICAgfQotCi0gICAgLy8g6YCA5Ye65bCP57uE5o6l5Y+jCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9sZWF2ZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxlYXZlR3JvdXAoQFBhdGhWYXJpYWJsZSgiZ3JvdXBfaWQiKSBMb25nIGdyb3VwSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7Ci0gICAgICAgIHJldHVybiBncm91cFNlcnZpY2UubGVhdmVHcm91cChncm91cElkLCB1c2VySWQpOwotICAgIH0KLQotICAgIC8vIOiOt+WPluWwj+e7hOaIkOWRmOaOpeWPowotICAgIEBHZXRNYXBwaW5nKCIve2dyb3VwX2lkfS9tZW1iZXJzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0R3JvdXBNZW1iZXJzKEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkKSB7Ci0gICAgICAgIHJldHVybiBncm91cFNlcnZpY2UuZ2V0R3JvdXBNZW1iZXJzKGdyb3VwSWQpOwotICAgIH0KLQotICAgIC8v5Y+R5biD5biW5a2QCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9jcmVhdGVQb3N0IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlUG9zdCgKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgidXNlcl9pZCIpIExvbmcgdXNlcklkLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgiY29udGVudCIpIFN0cmluZyBjb250ZW50LAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgidGl0bGUiKSBTdHJpbmcgdGl0bGUsCi0gICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gImltYWdlcyIsIHJlcXVpcmVkID0gZmFsc2UpIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgY29udGVudCwgdGl0bGUsIGltYWdlRmlsZXMpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIC8v6I635Y+W5p+Q5Liq5bCP57uE5YaF55qE5omA5pyJ5biW5a2QCi0gICAgQEdldE1hcHBpbmcoIi97Z3JvdXBfaWR9L2dldEFsbFBvc3RzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsUG9zdHMoQFBhdGhWYXJpYWJsZSgiZ3JvdXBfaWQiKSBMb25nIGdyb3VwSWQpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5nZXRBbGxQb3N0cyhncm91cElkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluaJgOacieWwj+e7hOWQjeensAotICAgIEBQb3N0TWFwcGluZygiL2dldEFsbEdyb3VwcyIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHNlYXJjaEdyb3VwcyhAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5zZWFyY2hHcm91cHMocGFyYW1zKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvLyDngrnotZ7luJblrZAKLSAgICBAUG9zdE1hcHBpbmcoIi97Z3JvdXBfcG9zdF9pZH0vbGlrZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxpa2VQb3N0KAotICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgiZ3JvdXBfcG9zdF9pZCIpIExvbmcgZ3JvdXBQb3N0SWQpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5saWtlUG9zdChncm91cFBvc3RJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7Ci0gICAgfQotCi0gICAgLy8g5Y+W5raI54K56LWeCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX3Bvc3RfaWR9L3VubGlrZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHVubGlrZVBvc3QoCi0gICAgICAgICAgICBAUGF0aFZhcmlhYmxlKCJncm91cF9wb3N0X2lkIikgTG9uZyBncm91cFBvc3RJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZ3JvdXBTZXJ2aWNlLnVubGlrZVBvc3QoZ3JvdXBQb3N0SWQpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIC8vIOa3u+WKoOivhOiuuuaOpeWPowotICAgIEBQb3N0TWFwcGluZygiL3tncm91cF9wb3N0X2lkfS9jb21tZW50IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gYWRkQ29tbWVudCgKLQotICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgiZ3JvdXBfcG9zdF9pZCIpIExvbmcgcG9zdElkLAotICAgICAgICAgICAgQFJlcXVlc3RCb2R5IEdyb3VwQ29tbWVudHMgY29tbWVudCkgewotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBncm91cFNlcnZpY2UuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ODEyNDYuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5MZXZlbFNlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9sZXZlbCIpCi1AUmVzdENvbnRyb2xsZXIKLXB1YmxpYyBjbGFzcyBMZXZlbENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgTGV2ZWxTZXJ2aWNlIGxldmVsU2VydmljZTsKLQotICAgIEBHZXRNYXBwaW5nKCIvZ2V0RXhwZXJpZW5jZSIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0RXhwZXJpZW5jZShAUmVxdWVzdFBhcmFtIExvbmcgdXNlcl9pZCkgewotICAgICAgICByZXR1cm4gbGV2ZWxTZXJ2aWNlLmdldFVzZXJFeHBlcmllbmNlKHVzZXJfaWQpOwotICAgIH0KLQotICAgIEBQb3N0TWFwcGluZygiL3VwZGF0ZUV4cGVyaWVuY2UiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZUV4cGVyaWVuY2UoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1zKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy52YWx1ZU9mKHBhcmFtcy5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgSW50ZWdlciBleHBlcmllbmNlID0gSW50ZWdlci52YWx1ZU9mKHBhcmFtcy5nZXQoImV4cGVyaWVuY2UiKS50b1N0cmluZygpKTsKLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9IHBhcmFtcy5nZXQoInNvdXJjZSIpLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgcmV0dXJuIGxldmVsU2VydmljZS51cGRhdGVFeHBlcmllbmNlKHVzZXJJZCwgZXhwZXJpZW5jZSwgc291cmNlKTsKLSAgICB9Ci0KLSAgICAvLyDmo4Dmn6XnlKjmiLfmmK/lkKbmu6HotrPljYfnuqfmnaHku7YKLSAgICBAR2V0TWFwcGluZygiL3VwZ3JhZGUtY2hlY2siKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNoZWNrVXBncmFkZShAUmVxdWVzdFBhcmFtIExvbmcgdXNlcl9pZCkgewotICAgICAgICByZXR1cm4gbGV2ZWxTZXJ2aWNlLmNoZWNrVXBncmFkZSh1c2VyX2lkKTsKLSAgICB9Ci0KLSAgICBAUG9zdE1hcHBpbmcoIi91cGdyYWRlcyIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdXBncmFkZVVzZXJMZXZlbChAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy52YWx1ZU9mKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIEJvb2xlYW4gY2FuVXBncmFkZSA9IChCb29sZWFuKSByZXF1ZXN0LmdldCgiY2FuX3VwZ3JhZGUiKTsKLSAgICAgICAgcmV0dXJuIGxldmVsU2VydmljZS51cGdyYWRlVXNlckxldmVsKHVzZXJJZCwgY2FuVXBncmFkZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjMzMDI4Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qb3N0OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlBvc3RTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotCi1AUmVzdENvbnRyb2xsZXIKLUBSZXF1ZXN0TWFwcGluZygiL2VjaG8vZm9ydW0vcG9zdHMiKQotcHVibGljIGNsYXNzIFBvc3RDb250cm9sbGVyIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFBvc3RTZXJ2aWNlIHBvc3RTZXJ2aWNlOwotCi0gICAgLy/liJvlu7rmlrDluJblrZDvvIjlt7LlrozmiJDvvIkKLSAgICBAUG9zdE1hcHBpbmcoIi97dXNlcl9pZH0vY3JlYXRlUG9zdCIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY3JlYXRlUG9zdCgKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCwKLSAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0odmFsdWUgPSAicG9zdENvbnRlbnQiKSBTdHJpbmcgcG9zdENvbnRlbnQsCi0gICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gInRpdGxlIiwgcmVxdWlyZWQgPSBmYWxzZSkgU3RyaW5nIHRpdGxlLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSh2YWx1ZSA9ICJpbWFnZVVybCIpIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7Ci0gICAgICAgIHJldHVybiBwb3N0U2VydmljZS5jcmVhdGVQb3N0KHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBpbWFnZUZpbGVzKTsKLSAgICB9Ci0KLSAgICAvL+e8lui+keW4luWtkO+8iOW3suWujOaIkO+8iQotICAgIEBQdXRNYXBwaW5nKCIve3Bvc3RfaWR9L2VkaXRQb3N0IikKLSAgICBwdWJsaWMgU3RyaW5nIHVwZGF0ZVBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkLCBAUmVxdWVzdEJvZHkgUG9zdCBwb3N0KSB7Ci0gICAgICAgIHBvc3RTZXJ2aWNlLnVwZGF0ZVBvc3QocG9zdElkLCBwb3N0KTsKLSAgICAgICAgcmV0dXJuICJQb3N0IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ISI7Ci0gICAgfQotCi0gICAgLy/liKDpmaTluJblrZDvvIjlt7LlrozmiJDvvIkKLSAgICBARGVsZXRlTWFwcGluZygiL3twb3N0X2lkfS9kZWxldGVQb3N0IikKLSAgICBwdWJsaWMgU3RyaW5nIGRlbGV0ZVBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkKSB7Ci0gICAgICAgIHBvc3RTZXJ2aWNlLmRlbGV0ZVBvc3QocG9zdElkKTsKLSAgICAgICAgcmV0dXJuICJQb3N0IGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5ISI7Ci0gICAgfQotCi0gICAgLy/ngrnotZ7luJblrZDvvIjlt7LlrozmiJDvvIkKLSAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vbGlrZSIpCi0gICAgcHVibGljIFN0cmluZyBsaWtlUG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSkgewotCi0gICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7Ci0gICAgICAgIHBvc3RTZXJ2aWNlLmxpa2VQb3N0KHBvc3RJZCwgdXNlcklkKTsKLQotICAgICAgICByZXR1cm4gIlBvc3QgbGlrZWQgc3VjY2Vzc2Z1bGx5ISI7Ci0gICAgfQotCi0gICAgLy/lj5bmtojngrnotZ7vvIjlt7LlrozmiJDvvIkKLSAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vdW5saWtlIikKLSAgICBwdWJsaWMgU3RyaW5nIHVubGlrZVBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkLCBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdEJvZHkpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0Qm9keS5nZXQoInVzZXJfaWQiKTsKLSAgICAgICAgcG9zdFNlcnZpY2UudW5saWtlUG9zdChwb3N0SWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgcmV0dXJuICJQb3N0IHVubGlrZWQgc3VjY2Vzc2Z1bGx5ISI7Ci0gICAgfQotCi0gICAgLy/ojrflj5bluJblrZDliJfooajvvIjlt7LlrozmiJDvvIkKLSAgICBAR2V0TWFwcGluZygiL2dldEFsbFBvc3RzIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxQb3N0cygpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RTZXJ2aWNlLmdldEFsbFBvc3RzKCk7ICAvLyDosIPnlKjmnI3liqHlsYLnmoQgZ2V0QWxsUG9zdHMg5pa55rOVCi0gICAgfQotCi0gICAgQEdldE1hcHBpbmcoIi97cG9zdElkfS9nZXRQb3N0IikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQb3N0QnlJZChAUGF0aFZhcmlhYmxlIExvbmcgcG9zdElkKSB7Ci0gICAgICAgIHJldHVybiBwb3N0U2VydmljZS5nZXRQb3N0QnlJZChwb3N0SWQpOwotICAgIH0KLQotCi0gICAgLy/mlLbol4/luJblrZDvvIjlt7LlrozmiJDvvIkKLSAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vY29sbGVjdCIpCi0gICAgcHVibGljIFN0cmluZyBjb2xsZWN0UG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSkgewotICAgICAgICBMb25nIHVzZXJJZCA9IHJlcXVlc3RCb2R5LmdldCgidXNlcl9pZCIpOwotICAgICAgICBwb3N0U2VydmljZS5jb2xsZWN0UG9zdChwb3N0SWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgcmV0dXJuICJQb3N0IGNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLQotICAgIC8v5Y+W5raI5pS26JeP77yI5bey5a6M5oiQ77yJCi0gICAgQERlbGV0ZU1hcHBpbmcoIi97cG9zdF9pZH0vdW5jb2xsZWN0IikKLSAgICBwdWJsaWMgU3RyaW5nIHVuY29sbGVjdFBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkLCBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdEJvZHkpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0Qm9keS5nZXQoInVzZXJfaWQiKTsKLSAgICAgICAgcG9zdFNlcnZpY2UudW5jb2xsZWN0UG9zdChwb3N0SWQsIHVzZXJJZCk7Ci0gICAgICAgIHJldHVybiAiUG9zdCB1bmNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLSAgICAvLyDojrflj5bnlKjmiLfmlLbol4/nmoTmiYDmnInluJblrZAKLSAgICBAR2V0TWFwcGluZygiL3t1c2VySWR9L2dldEFsbGNvbGxlY3Rpb25zIikKLSAgICBwdWJsaWMgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRBbGxDb2xsZWN0aW9ucyhAUGF0aFZhcmlhYmxlKCJ1c2VySWQiKSBMb25nIHVzZXJJZCkgewotICAgICAgICByZXR1cm4gcG9zdFNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnModXNlcklkKTsKLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvU2VlZENvbW1lbnRDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NGI1NmMuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlNlZWRDb21tZW50OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlNlZWRDb21tZW50U2VydmljZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1AUmVzdENvbnRyb2xsZXIKLUBSZXF1ZXN0TWFwcGluZygiL2VjaG8vc2VlZHMiKQotcHVibGljIGNsYXNzIFNlZWRDb21tZW50Q29udHJvbGxlciB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBTZWVkQ29tbWVudFNlcnZpY2Ugc2VlZENvbW1lbnRTZXJ2aWNlOwotCi0gICAgQFBvc3RNYXBwaW5nKCIve3NlZWRfaWR9L2NvbW1lbnRzIikKLSAgICBwdWJsaWMgU3RyaW5nIHB1Ymxpc2hDb21tZW50KEBQYXRoVmFyaWFibGUoInNlZWRfaWQiKSBpbnQgc2VlZElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IFNlZWRDb21tZW50IHNlZWRDb21tZW50KSB7Ci0gICAgICAgIC8vIOiwg+eUqOacjeWKoeexu+eahOmAu+i+keWkhOeQhuivhOiuuuWPkeW4gwotICAgICAgICByZXR1cm4gc2VlZENvbW1lbnRTZXJ2aWNlLnB1Ymxpc2hDb21tZW50KHNlZWRJZCwgc2VlZENvbW1lbnQpOwotICAgIH0KLQotICAgIEBHZXRNYXBwaW5nKCIve3NlZWRfaWR9L2dldEFsbENvbW1lbnRzIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxDb21tZW50cyhAUGF0aFZhcmlhYmxlKCJzZWVkX2lkIikgaW50IHNlZWRJZCkgewotICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLojrflj5bmiYDmnInor4TorrrmlbDmja4KLSAgICAgICAgcmV0dXJuIHNlZWRDb21tZW50U2VydmljZS5nZXRBbGxDb21tZW50c0ZvclNlZWQoc2VlZElkKTsKLSAgICB9Ci0KLSAgICAvLyDngrnotZ7liIfmjaLmjqXlj6MKLSAgICBAUHV0TWFwcGluZygiL3tjb21tZW50X2lkfS9saWtlLXRvZ2dsZSIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdG9nZ2xlTGlrZShAUGF0aFZhcmlhYmxlKCJjb21tZW50X2lkIikgTG9uZyBjb21tZW50SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHNlZWRDb21tZW50U2VydmljZS50b2dnbGVMaWtlKGNvbW1lbnRJZCwgdXNlcklkKTsKLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjRiN2VhLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5UYXNrU2VydmljZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1AUmVzdENvbnRyb2xsZXIKLUBSZXF1ZXN0TWFwcGluZygiL2VjaG8vdGFzay90dXRvcmlhbCIpCi1wdWJsaWMgY2xhc3MgVGFza0NvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVGFza1NlcnZpY2UgdGFza1NlcnZpY2U7Ci0KLSAgICBAR2V0TWFwcGluZygiL2dldEFsbFRhc2tzIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxUYXNrcyhAUmVxdWVzdFBhcmFtKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgcmV0dXJuIHRhc2tTZXJ2aWNlLmdldEFsbFRhc2tzRm9yVXNlcih1c2VySWQpOwotICAgIH0KLQotCi0gICAgQFBvc3RNYXBwaW5nKCIvdXBkYXRlU3RhdHVzIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1cGRhdGVUYXNrU3RhdHVzKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSBMb25nLnBhcnNlTG9uZyhyZXF1ZXN0LmdldCgidXNlcl9pZCIpLnRvU3RyaW5nKCkpOwotICAgICAgICBTdHJpbmcgdGFza0lkID0gcmVxdWVzdC5nZXQoInRhc2tfaWQiKS50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gdGFza1NlcnZpY2UudXBkYXRlVGFza1N0YXR1cyh1c2VySWQsIHRhc2tJZCk7Ci0gICAgfQotCi0gICAgLy/ojrflj5blvZPliY3nu4/pqozlkozku7vliqHlpZblirEKLSAgICBAR2V0TWFwcGluZygiL2dldEV4cGVyaWVuY2UiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEV4cGVyaWVuY2UoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB0YXNrU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSh1c2VySWQpOwotICAgIH0KLQotICAgIC8v6I635Y+W5b2T5YmN55qE5oyH5byV5q2l6aqkCi0gICAgQEdldE1hcHBpbmcoIi9nZXROZXdTdGVwIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXROZXdTdGVwKEBSZXF1ZXN0UGFyYW0oInVzZXJfaWQiKSBMb25nIHVzZXJJZCkgewotICAgICAgICByZXR1cm4gdGFza1NlcnZpY2UuZ2V0TmV3U3RlcCh1c2VySWQpOwotICAgIH0KLQotCi0gICAgLy/mm7TmlrDov5vluqYKLSAgICBAUG9zdE1hcHBpbmcoIi91cGRhdGVQcm9ncmVzcyIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdXBkYXRlUHJvZ3Jlc3MoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7Ci0gICAgICAgIEludGVnZXIgcHJvZ3Jlc3MgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0KCJwcm9ncmVzcyIpLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gdGFza1NlcnZpY2UudXBkYXRlVGFza1Byb2dyZXNzKHVzZXJJZCwgdGFza0lkLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgLy/pooblj5bku7vliqHlpZblirEKLSAgICBAUG9zdE1hcHBpbmcoIi9yZXdhcmRDbGFpbSIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gcmV3YXJkQ2xhaW0oQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0YXNrU2VydmljZS5jbGFpbVJld2FyZCh1c2VySWQsIHRhc2tJZCk7Ci0gICAgfQotCi0gICAgLy/mo4Dmn6Xku7vliqHlpZblirHnirbmgIEKLSAgICBAUG9zdE1hcHBpbmcoIi9yZXdhcmRSZXZpZXciKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHJld2FyZFJldmlldyhAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgU3RyaW5nIHRhc2tJZCA9IHJlcXVlc3QuZ2V0KCJ0YXNrX2lkIikudG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRhc2tTZXJ2aWNlLmNoZWNrUmV3YXJkU3RhdHVzKHVzZXJJZCwgdGFza0lkKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhMmNjZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXIuamF2YQpAQCAtMCwwICsxLDI5MyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5QYWdlVXRpbDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuVG9ycmVudFNlcnZpY2U7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuUHJvbW90aW9uU2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnZvLlRvcnJlbnRWTzsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuUmVzdWx0OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8ucGFyYW0uVG9ycmVudFVwbG9hZFBhcmFtOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8uVG9ycmVudFVwZGF0ZURUTzsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLlByb21vdGlvbkNyZWF0ZURUTzsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlByb21vdGlvbjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyU2VydmljZTsKKworaW1wb3J0IGlvLnN3YWdnZXIudjMub2FzLmFubm90YXRpb25zLk9wZXJhdGlvbjsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5Db250ZW50OworaW1wb3J0IGlvLnN3YWdnZXIudjMub2FzLmFubm90YXRpb25zLm1lZGlhLlNjaGVtYTsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5yZXNwb25zZXMuQXBpUmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLkh0dHBTdGF0dXM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudmFsaWRhdGlvbi5hbm5vdGF0aW9uLlZhbGlkYXRlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGNuLmRldjMzLnNhdG9rZW4uYW5ub3RhdGlvbi5TYUNoZWNrTG9naW47CitpbXBvcnQgY24uZGV2MzMuc2F0b2tlbi5zdHAuU3RwVXRpbDsKKworQFJlc3RDb250cm9sbGVyCitAUmVxdWVzdE1hcHBpbmcoIi9zZWVkcyIpCitwdWJsaWMgY2xhc3MgVG9ycmVudENvbnRyb2xsZXIgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVG9ycmVudFNlcnZpY2UgdG9ycmVudFNlcnZpY2U7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBQcm9tb3Rpb25TZXJ2aWNlIHByb21vdGlvblNlcnZpY2U7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyU2VydmljZSB1c2VyU2VydmljZTsKKworCisgICAgQFNhQ2hlY2tMb2dpbgorICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLnp43lrZDliJfooajmn6Xor6IiLCBkZXNjcmlwdGlvbiA9ICLnp43lrZDliJfooajmnaHku7bmn6Xor6It5YiG6aG1LeaOkuW6jyIpCisgICAgQEFwaVJlc3BvbnNlKHJlc3BvbnNlQ29kZSA9ICIwIiwgZGVzY3JpcHRpb24gPSAi5pON5L2c5oiQ5YqfIiwKKyAgICAgICAgICAgIGNvbnRlbnQgPSB7QENvbnRlbnQobWVkaWFUeXBlID0gImFwcGxpY2F0aW9uL2pzb24iLAorICAgICAgICAgICAgICAgICAgICBzY2hlbWEgPSBAU2NoZW1hKGltcGxlbWVudGF0aW9uID0gVG9ycmVudFZPLmNsYXNzKSkKKyAgICAgICAgICAgIH0pCisgICAgQFBvc3RNYXBwaW5nKCIvbGlzdCIpCisgICAgcHVibGljIFJlc3VsdCBsaXN0KEBSZXF1ZXN0Qm9keSBUb3JyZW50UGFyYW0gcGFyYW0pIHsKKyAgICAgICAgLy8g5p6E5bu65o6S5bqP5ZKM5qih57OK5p+l6K+i5p2h5Lu2CisgICAgICAgIHBhcmFtLnZhbGlkT3JkZXIocGFyYW0uZ2V0T3JkZXJLZXkoVG9ycmVudEVudGl0eS5jbGFzcykpOworICAgICAgICBwYXJhbS5idWlsZExpa2UoKTsKKworICAgICAgICBQYWdlVXRpbC5zdGFydFBhZ2UocGFyYW0pOworCisgICAgICAgIC8vIOafpeivouaVsOaNrgorICAgICAgICBMaXN0PFRvcnJlbnRFbnRpdHk+IGxpc3QgPSB0b3JyZW50U2VydmljZS5zZWFyY2gocGFyYW0pOworCisgICAgICAgIC8vIOi/lOWbnuWIhumhtee7k+aenAorICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKGxpc3QsIFBhZ2VVdGlsLmdldFBhZ2UobGlzdCkpOworICAgIH0KKworICAgIEBTYUNoZWNrTG9naW4KKyAgICBAT3BlcmF0aW9uKHN1bW1hcnkgPSAi56eN5a2Q6K+m5oOF5p+l6K+iIikKKyAgICBAQXBpUmVzcG9uc2UocmVzcG9uc2VDb2RlID0gIjAiLCBkZXNjcmlwdGlvbiA9ICLmk43kvZzmiJDlip8iLCBjb250ZW50ID0geworICAgICAgICAgICAgQENvbnRlbnQobWVkaWFUeXBlID0gImFwcGxpY2F0aW9uL2pzb24iLCBzY2hlbWEgPSBAU2NoZW1hKGltcGxlbWVudGF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgVG9ycmVudEVudGl0eS5jbGFzcykpCisgICAgfSkKKyAgICBAUG9zdE1hcHBpbmcoIi9pbmZvL3tpZH0iKQorICAgIHB1YmxpYyBSZXN1bHQgaW5mbyhAUGF0aFZhcmlhYmxlKCJpZCIpTG9uZyBpZCkgeworCisgICAgICAgIFRvcnJlbnRFbnRpdHkgZW50aXR5ID0gdG9ycmVudFNlcnZpY2Uuc2VsZWN0QnlTZWVkSWQoaWQpOworICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKGVudGl0eSk7CisgICAgfQorCitAT3BlcmF0aW9uKHN1bW1hcnkgPSAi5LiK5Lyg56eN5a2QIikKKworICAgIEBQb3N0TWFwcGluZygiL3VwbG9hZCIpCisgICAgcHVibGljIFJlc3VsdCB1cGxvYWRUb3JyZW50KAorICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgiZmlsZSIpIE11bHRpcGFydEZpbGUgZmlsZSwKKyAgICAgICAgICAgIEBNb2RlbEF0dHJpYnV0ZSBAVmFsaWRhdGVkIFRvcnJlbnRVcGxvYWRQYXJhbSBwYXJhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIOmqjOivgeeUqOaIt+adg+mZkAorICAgICAgICAgICAgLy8gTG9uZyB1c2VySWQgPSBTdHBVdGlsLmdldExvZ2luSWRBc0xvbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyB1c2VySWQgPSBTdHJpbmcudmFsdWVPZihwYXJhbS5nZXRVcGxvYWRlcigpKTsKKyAgICAgICAgICAgIHBhcmFtLnNldFVwbG9hZGVyKHVzZXJJZCk7CisKKyAgICAgICAgICAgIC8vIOmqjOivgeaWh+S7tuWkp+Wwj+WSjOexu+WeiworICAgICAgICAgICAgaWYgKGZpbGUuaXNFbXB0eSgpIHx8IGZpbGUuZ2V0U2l6ZSgpID4gMTAgKiAxMDI0ICogMTAyNCkgeyAvLyAxME1C6ZmQ5Yi2CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5paH5Lu25aSn5bCP5LiN56ym5ZCI6KaB5rGCIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnRvcnJlbnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWPquaUr+aMgS50b3JyZW505paH5Lu2Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRvcnJlbnRTZXJ2aWNlLnVwbG9hZFRvcnJlbnQoZmlsZSwgcGFyYW0pOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi56eN5a2Q5LiK5Lyg5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICog6I635Y+W56eN5a2Q5paH5Lu2CisgICAgICovCisgICAgQEdldE1hcHBpbmcoIi97c2VlZF9pZH0vZG93bmxvYWQiKQorICAgIHB1YmxpYyB2b2lkIGRvd25sb2FkVG9ycmVudCgKKyAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoInNlZWRfaWQiKSBMb25nIHNlZWRJZCwKKyAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0oInBhc3NrZXkiKSBTdHJpbmcgcGFzc2tleSwKKyAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgLy8g6I635Y+W56eN5a2Q5a6e5L2TCisgICAgICAgIFRvcnJlbnRFbnRpdHkgZW50aXR5ID0gdG9ycmVudFNlcnZpY2Uuc2VsZWN0QnlTZWVkSWQoc2VlZElkKTsKKyAgICAgICAgaWYgKGVudGl0eSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXNwb25zZS5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19OT1RfRk9VTkQsICLnp43lrZDkuI3lrZjlnKgiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOiOt+WPluW5tuWkhOeQhuenjeWtkOaWh+S7tuWGheWuue+8iOmcgOWcqHNlcnZpY2XkuK3lrp7njrBwYXNza2V55rOo5YWl77yJCisgICAgICAgIGJ5dGVbXSB0b3JyZW50Qnl0ZXMgPSB0b3JyZW50U2VydmljZS5mZXRjaChzZWVkSWQsIHBhc3NrZXkpOworCisgICAgICAgIC8vIOiuvue9ruS4i+i9veaWh+S7tuWQjQorICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBlbnRpdHkuZ2V0RmlsZU5hbWUoKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IG51bGwgfHwgZmlsZW5hbWUuaXNCbGFuaygpKSB7CisgICAgICAgICAgICBmaWxlbmFtZSA9IHNlZWRJZCArICIudG9ycmVudCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmaWxlbmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIudG9ycmVudCIpKSB7CisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lICsgIi50b3JyZW50IjsKKyAgICAgICAgfQorICAgICAgICBmaWxlbmFtZSA9IGphdmEubmV0LlVSTEVuY29kZXIuZW5jb2RlKGZpbGVuYW1lLCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpLnJlcGxhY2VBbGwoIlxcKyIsCisgICAgICAgICAgICAgICAgIiUyMCIpOworCisgICAgICAgIC8vIOiuvue9ruWTjeW6lOWktAorICAgICAgICByZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzgubmFtZSgpKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudExlbmd0aCh0b3JyZW50Qnl0ZXMubGVuZ3RoKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIpOworICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiYXR0YWNobWVudDtmaWxlbmFtZT0iICsgZmlsZW5hbWUpOworCisgICAgICAgIC8vIOWGmeWFpeaWh+S7tuWGheWuuQorICAgICAgICByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS53cml0ZSh0b3JyZW50Qnl0ZXMpOworICAgICAgICByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5mbHVzaCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOaUtuiXj+aIluiAheWPlua2iOaUtuiXjworICAgICAqLworICAgIEBQb3N0TWFwcGluZygiL3tzZWVkX2lkfS9mYXZvcml0ZS10b2dnbGUiKQorICAgIHB1YmxpYyBSZXN1bHQgZmF2b3JpdGUoCisgICAgICAgICAgICBAUGF0aFZhcmlhYmxlKCJzZWVkX2lkIikgTG9uZyBzZWVkSWQsCisgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKCJ1c2VyX2lkIikgTG9uZyAgdXNlcklkKSB7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgIHJldHVybiAgdG9ycmVudFNlcnZpY2UuZmF2b3JpdGUoc2VlZElkLCB1c2VySWQpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5aSx6LSlOiAiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBTYUNoZWNrTG9naW4KKyAgICBAT3BlcmF0aW9uKHN1bW1hcnkgPSAi5Yig6Zmk56eN5a2QIikKKyAgICBARGVsZXRlTWFwcGluZygiL3t0b3JyZW50SWR9IikKKyAgICBwdWJsaWMgUmVzdWx0IGRlbGV0ZVRvcnJlbnQoQFBhdGhWYXJpYWJsZSBMb25nIHRvcnJlbnRJZCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAvLyAg6aqM6K+B55So5oi35p2D6ZmQCisgICAgICAgICAgICBMb25nIHVzZXJJZCA9IFN0cFV0aWwuZ2V0TG9naW5JZEFzTG9uZygpOworICAgICAgICAgICAgaWYgKCF0b3JyZW50U2VydmljZS5jYW5Vc2VyRGVsZXRlVG9ycmVudCh0b3JyZW50SWQsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLmsqHmnInmnYPpmZDliKDpmaTmraTnp43lrZAiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9ycmVudFNlcnZpY2UuZGVsZXRlVG9ycmVudCh0b3JyZW50SWQpOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5Yig6Zmk5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFNhQ2hlY2tMb2dpbgorICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLkv67mlLnnp43lrZDkv6Hmga8iKQorICAgIEBQdXRNYXBwaW5nKCIve3RvcnJlbnRJZH0iKQorICAgIHB1YmxpYyBSZXN1bHQgdXBkYXRlVG9ycmVudCgKKyAgICAgICAgICAgIEBQYXRoVmFyaWFibGUgTG9uZyB0b3JyZW50SWQsCisgICAgICAgICAgICBAUmVxdWVzdEJvZHkgQFZhbGlkYXRlZCBUb3JyZW50VXBkYXRlRFRPIHVwZGF0ZURUTykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8g6aqM6K+B55So5oi35p2D6ZmQCisgICAgICAgICAgICBMb25nIHVzZXJJZCA9IFN0cFV0aWwuZ2V0TG9naW5JZEFzTG9uZygpOworICAgICAgICAgICAgaWYgKCF0b3JyZW50U2VydmljZS5jYW5Vc2VyVXBkYXRlVG9ycmVudCh0b3JyZW50SWQsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLmsqHmnInmnYPpmZDkv67mlLnmraTnp43lrZAiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9ycmVudFNlcnZpY2UudXBkYXRlVG9ycmVudCh0b3JyZW50SWQsIHVwZGF0ZURUTyk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLmm7TmlrDlpLHotKU6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAU2FDaGVja0xvZ2luCisgICAgQE9wZXJhdGlvbihzdW1tYXJ5ID0gIuWIm+W7uuS/g+mUgOa0u+WKqCIpCisgICAgQFBvc3RNYXBwaW5nKCIvcHJvbW90aW9ucyIpCisgICAgcHVibGljIFJlc3VsdCBjcmVhdGVQcm9tb3Rpb24oQFJlcXVlc3RCb2R5IEBWYWxpZGF0ZWQgUHJvbW90aW9uQ3JlYXRlRFRPIHByb21vdGlvbkRUTykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8g6aqM6K+B55So5oi35p2D6ZmQ77yI5Y+q5pyJ566h55CG5ZGY5Y+v5Lul5Yib5bu65L+D6ZSA77yJCisvLyAgICAgICAgICAgIGlmICghU3RwVXRpbC5oYXNSb2xlKCJhZG1pbiIpKSB7CisvLyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLmsqHmnInmnYPpmZDliJvlu7rkv4PplIDmtLvliqgiKTsKKy8vICAgICAgICAgICAgfQorLy8KKyAgICAgICAgICAgIFByb21vdGlvbiBwcm9tb3Rpb24gPSBwcm9tb3Rpb25TZXJ2aWNlLmNyZWF0ZVByb21vdGlvbihwcm9tb3Rpb25EVE8pOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vayhwcm9tb3Rpb24pOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5Yib5bu65L+D6ZSA5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFNhQ2hlY2tMb2dpbgorICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLojrflj5bkv4PplIDmtLvliqjliJfooagiKQorICAgIEBHZXRNYXBwaW5nKCIvcHJvbW90aW9ucyIpCisgICAgcHVibGljIFJlc3VsdCBnZXRQcm9tb3Rpb25zKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgTGlzdDxQcm9tb3Rpb24+IHByb21vdGlvbnMgPSBwcm9tb3Rpb25TZXJ2aWNlLmdldEFsbEFjdGl2ZVByb21vdGlvbnMoKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2socHJvbW90aW9ucyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLojrflj5bkv4PplIDliJfooajlpLHotKU6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAU2FDaGVja0xvZ2luCisgICAgQE9wZXJhdGlvbihzdW1tYXJ5ID0gIuiOt+WPluS/g+mUgOivpuaDhSIpCisgICAgQEdldE1hcHBpbmcoIi9wcm9tb3Rpb25zL3twcm9tb3Rpb25JZH0iKQorICAgIHB1YmxpYyBSZXN1bHQgZ2V0UHJvbW90aW9uRGV0YWlscyhAUGF0aFZhcmlhYmxlIExvbmcgcHJvbW90aW9uSWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFByb21vdGlvbiBwcm9tb3Rpb24gPSBwcm9tb3Rpb25TZXJ2aWNlLmdldFByb21vdGlvbkJ5SWQocHJvbW90aW9uSWQpOworICAgICAgICAgICAgaWYgKHByb21vdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5L+D6ZSA5rS75Yqo5LiN5a2Y5ZyoIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKHByb21vdGlvbik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLojrflj5bkv4PplIDor6bmg4XlpLHotKU6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAU2FDaGVja0xvZ2luCisgICAgQE9wZXJhdGlvbihzdW1tYXJ5ID0gIuWIoOmZpOS/g+mUgOa0u+WKqCIpCisgICAgQERlbGV0ZU1hcHBpbmcoIi9wcm9tb3Rpb25zL3twcm9tb3Rpb25JZH0iKQorICAgIHB1YmxpYyBSZXN1bHQgZGVsZXRlUHJvbW90aW9uKEBQYXRoVmFyaWFibGUgTG9uZyBwcm9tb3Rpb25JZCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8g6aqM6K+B55So5oi35p2D6ZmQ77yI5Y+q5pyJ566h55CG5ZGY5Y+v5Lul5Yig6Zmk5L+D6ZSA77yJCisgICAgICAgICAgICBpZiAoIVN0cFV0aWwuaGFzUm9sZSgiYWRtaW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuayoeacieadg+mZkOWIoOmZpOS/g+mUgOa0u+WKqCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9tb3Rpb25TZXJ2aWNlLmRlbGV0ZVByb21vdGlvbihwcm9tb3Rpb25JZCk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLliKDpmaTkv4PplIDlpLHotKU6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDkuIvovb3np43lrZDvvIjljIXlkKvlj43kvZzlvIrmnLrliLbvvIkKKyAgICBAUG9zdE1hcHBpbmcoIi97dG9ycmVudElkfS9kb3dubG9hZCIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PD8+IGRvd25sb2FkVG9ycmVudChAUGF0aFZhcmlhYmxlIExvbmcgdG9ycmVudElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0gTG9uZyB1c2VySWQpIHsKKy8vICAgICAgICAvLyDpqozor4HnlKjmiLfouqvku73lkozmnYPpmZAKKy8vICAgICAgICBpZiAoIXVzZXJTZXJ2aWNlLnZhbGlkYXRlVXNlcih1c2VySWQpKSB7CisvLyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQpLmJ1aWxkKCk7CisvLyAgICAgICAgfQorCisgICAgICAgIC8vIOajgOafpeeUqOaIt+S4iuS8oOmHj+aYr+WQpui2s+WknworICAgICAgICBpZiAoIXRvcnJlbnRTZXJ2aWNlLmNoZWNrVXNlclVwbG9hZFJhdGlvKHVzZXJJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoSHR0cFN0YXR1cy5GT1JCSURERU4pCisgICAgICAgICAgICAgICAgLmJvZHkoIuS4iuS8oOmHj+S4jei2s++8jOaXoOazleS4i+i9vSIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g5bqU55So5L+D6ZSA5oqY5omj77yI5aaC5p6c5pyJ77yJCisgICAgICAgIGRvdWJsZSBkb3dubG9hZFNpemUgPSB0b3JyZW50U2VydmljZS5jYWxjdWxhdGVEb3dubG9hZFNpemUodG9ycmVudElkLCB1c2VySWQpOworCisgICAgICAgIC8vIOiusOW9leS4i+i9vQorICAgICAgICB0b3JyZW50U2VydmljZS5yZWNvcmREb3dubG9hZCh0b3JyZW50SWQsIHVzZXJJZCwgZG93bmxvYWRTaXplKTsKKworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2soKS5idWlsZCgpOworICAgIH0KKworCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEKaW5kZXggZTk2ZGY4Zi4uYWNkYTQwMyAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuamF2YQpAQCAtMSwxMjIgKzEsMTkwIEBACiBwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwogCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyUmVwb3NpdG9yeTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5UYXNrU2VydmljZTsKK2ltcG9ydCBjbi5kZXYzMy5zYXRva2VuLmFubm90YXRpb24uU2FDaGVja0xvZ2luOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5jb3JlLmNvbmRpdGlvbnMucXVlcnkuUXVlcnlXcmFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5QYWdlVXRpbDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnZvLlRvcnJlbnRWTzsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Vc2VyTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVmVyaWZpY2F0aW9uVG9rZW47CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRW1haWxTZXJ2aWNlOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJTZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5SZXN1bHQ7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGk7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlPcGVyYXRpb247CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlQYXJhbTsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5PcGVyYXRpb247CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMubWVkaWEuQ29udGVudDsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMucmVzcG9uc2VzLkFwaVJlc3BvbnNlOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlsczsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuSHR0cFN0YXR1czsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5BdXRoZW50aWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5Vc2VybmFtZVBhc3N3b3JkQXV0aGVudGljYXRpb25Ub2tlbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuQXV0aGVudGljYXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5jb250ZXh0LlNlY3VyaXR5Q29udGV4dEhvbGRlcjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKIAotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOworaW1wb3J0IGphdmF4LmFubm90YXRpb24uUmVzb3VyY2U7CitpbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7CitpbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLkNocm9ub1VuaXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIEBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby91c2VyIikKK0BSZXF1ZXN0TWFwcGluZygiL3VzZXIiKQorQEFwaSh2YWx1ZSA9ICLnlKjmiLfnrqHnkIbmjqXlj6MiLCB0YWdzID0geyLnlKjmiLfnrqHnkIYifSkKIHB1YmxpYyBjbGFzcyBVc2VyQ29udHJvbGxlciB7CiAKLSAgICBAQXV0b3dpcmVkCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBVc2VyU2VydmljZSB1c2VyU2VydmljZTsKIAogICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OworICAgIHByaXZhdGUgQXV0aGVudGljYXRpb25NYW5hZ2VyIGF1dGhlbnRpY2F0aW9uTWFuYWdlcjsKIAotICAgIC8vIOaOpeWPo++8mueUn+aIkOmCgOivt+eggQotICAgIEBQb3N0TWFwcGluZygiL2dldEludml0ZUNvZGUiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdlbmVyYXRlSW52aXRlQ29kZShAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHVzZXJTZXJ2aWNlLmdlbmVyYXRlSW52aXRlQ29kZSh1c2VySWQpOwotICAgIH0KKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyTWFwcGVyIHVzZXJNYXBwZXI7IC8vIOS9v+eUqCBNeUJhdGlzLVBsdXMKIAotICAgIC8v5rOo5YaMCi0gICAgQFBvc3RNYXBwaW5nKCIvcmVnaXN0ZXIiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlZ2lzdGVyKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QpIHsKLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gKFN0cmluZykgcmVxdWVzdC5nZXQoInVzZXJuYW1lIik7Ci0gICAgICAgIFN0cmluZyBlbWFpbCA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0KCJlbWFpbCIpOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgicGFzc3dvcmQiKTsKLSAgICAgICAgU3RyaW5nIHJvbGUgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgicm9sZSIpOwotICAgICAgICBTdHJpbmcgaW52aXRlQ29kZSA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0KCJpbnZpdGVDb2RlIik7CisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7IC8vIOabv+aNoiBKUEEKIAotICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLnmoTms6jlhozmlrnms5UKLSAgICAgICAgU3RyaW5nIHJlc3VsdE1lc3NhZ2UgPSB1c2VyU2VydmljZS5yZWdpc3RlclVzZXIodXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZCwgcm9sZSwgaW52aXRlQ29kZSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFVzZXJDb250cm9sbGVyLmNsYXNzKTsKIAotICAgICAgICAvLyDov5Tlm57ms6jlhoznu5PmnpwKLSAgICAgICAgcmV0dXJuIE1hcC5vZigibXNnIiwgcmVzdWx0TWVzc2FnZSk7Ci0gICAgfQotCi0gICAgLy/nmbvlvZUKICAgICBAUG9zdE1hcHBpbmcoIi9sb2dpbiIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gbG9naW4oQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgidXNlcm5hbWUiKTsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZykgcmVxdWVzdC5nZXQoInBhc3N3b3JkIik7CisgICAgQEFwaU9wZXJhdGlvbih2YWx1ZSA9ICLnlKjmiLfnmbvlvZUiLCBub3RlcyA9ICLkvb/nlKjnlKjmiLflkI3lkozlr4bnoIHov5vooYznmbvlvZUiKQorICAgIHB1YmxpYyBSZXN1bHQgbG9naW5Db250cm9sbGVyKEBSZXF1ZXN0UGFyYW0gQEFwaVBhcmFtKHZhbHVlID0gIueUqOaIt+WQjSIsIHJlcXVpcmVkID0gdHJ1ZSkgU3RyaW5nIHVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0gQEFwaVBhcmFtKHZhbHVlID0gIuWvhueggSIsIHJlcXVpcmVkID0gdHJ1ZSkgU3RyaW5nIHBhc3N3b3JkKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBBdXRoZW50aWNhdGlvbiBhdXRoZW50aWNhdGlvbiA9IGF1dGhlbnRpY2F0aW9uTWFuYWdlci5hdXRoZW50aWNhdGUoCisgICAgICAgICAgICAgICAgICAgIG5ldyBVc2VybmFtZVBhc3N3b3JkQXV0aGVudGljYXRpb25Ub2tlbih1c2VybmFtZSwgcGFzc3dvcmQpCisgICAgICAgICAgICApOworICAgICAgICAgICAgU2VjdXJpdHlDb250ZXh0SG9sZGVyLmdldENvbnRleHQoKS5zZXRBdXRoZW50aWNhdGlvbihhdXRoZW50aWNhdGlvbik7CiAKLSAgICAgICAgLy8g6LCD55So5pyN5Yqh5bGC55qE55m75b2V5pa55rOVCi0gICAgICAgIFN0cmluZyByZXN1bHRNZXNzYWdlID0gdXNlclNlcnZpY2UubG9naW5Vc2VyKHVzZXJuYW1lLCBwYXNzd29yZCk7CisgICAgICAgICAgICAvLyDkvb/nlKggTXlCYXRpcy1QbHVzIOafpeivogorICAgICAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RPbmUobmV3IFF1ZXJ5V3JhcHBlcjxVc2VyPigpLmVxKCJ1c2VybmFtZSIsIHVzZXJuYW1lKSk7CiAKLSAgICAgICAgLy8g5qC55o2u55m75b2V57uT5p6c6L+U5Zue5LiN5ZCM55qE5ZON5bqUCi0gICAgICAgIGlmIChyZXN1bHRNZXNzYWdlLmVxdWFscygi55m75b2V5oiQ5YqfIikpIHsKLSAgICAgICAgICAgIC8vIOafpeivoueUqOaIt+S/oeaBrwotICAgICAgICAgICAgT3B0aW9uYWw8VXNlcnM+IHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlVc2VybmFtZSh1c2VybmFtZSk7Ci0gICAgICAgICAgICBpZiAodXNlci5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgICAgIC8vIOWwhueUqOaIt+eahOaJgOacieS/oeaBr+S9nOS4uui/lOWbnuWAvAotICAgICAgICAgICAgICAgIHJldHVybiBNYXAub2YoIm1zZyIsIHJlc3VsdE1lc3NhZ2UsICJ1c2VyIiwgdXNlci5nZXQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBNYXAub2YoIm1zZyIsICLnlKjmiLfkv6Hmga/mn6Xor6LlpLHotKUiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBNYXAub2YoIm1zZyIsIHJlc3VsdE1lc3NhZ2UpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2dpbiBzdWNjZXNzZnVsIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vayh1c2VyKTsKKyAgICAgICAgfSBjYXRjaCAoQXV0aGVudGljYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi55m75b2V5aSx6LSlIik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvL+S/ruaUueWvhueggQotICAgIEBQb3N0TWFwcGluZygiL3Bhc3N3b3JkIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjaGFuZ2VQYXNzd29yZChAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgU3RyaW5nIG9sZFBhc3N3b3JkID0gKFN0cmluZykgcmVxdWVzdC5nZXQoIm9sZF9wYXNzd29yZCIpOwotICAgICAgICBTdHJpbmcgbmV3UGFzc3dvcmQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgibmV3X3Bhc3N3b3JkIik7Ci0gICAgICAgIFN0cmluZyBjb25maXJtUGFzc3dvcmQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgiY29uZmlybV9wYXNzd29yZCIpOwotCi0gICAgICAgIC8vIOiwg+eUqOacjeWKoeWxgueahOS/ruaUueWvhueggeaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0TWVzc2FnZSA9IHVzZXJTZXJ2aWNlLmNoYW5nZVBhc3N3b3JkKHVzZXJJZCwgb2xkUGFzc3dvcmQsIG5ld1Bhc3N3b3JkLCBjb25maXJtUGFzc3dvcmQpOwotCi0gICAgICAgIC8vIOi/lOWbnuS/ruaUuee7k+aenAotICAgICAgICByZXR1cm4gTWFwLm9mKCJtZXNzYWdlIiwgcmVzdWx0TWVzc2FnZSwgInN0YXR1cyIsIHJlc3VsdE1lc3NhZ2UuZXF1YWxzKCLlr4bnoIHkv67mlLnmiJDlip8iKSA/ICJzdWNjZXNzIiA6ICJlcnJvciIpOwotICAgIH0KLQotICAgIC8vIOiOt+WPlueUqOaIt+S4quS6uui1hOaWmQotICAgIEBHZXRNYXBwaW5nKCIve3VzZXJJZH0vZ2V0UHJvZmlsZSIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0UHJvZmlsZShAUGF0aFZhcmlhYmxlKCJ1c2VySWQiKSBMb25nIHVzZXJJZCkgewotICAgICAgICByZXR1cm4gdXNlclNlcnZpY2UuZ2V0UHJvZmlsZSh1c2VySWQpOwotICAgIH0KLQotICAgIC8vIOS/ruaUueeUqOaIt+S4quS6uui1hOaWmQotICAgIEBQdXRNYXBwaW5nKCIve3VzZXJJZH0vZWRpdFByb2ZpbGUiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGVkaXRQcm9maWxlKAotICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgidXNlcklkIikgTG9uZyB1c2VySWQsCi0gICAgICAgICAgICBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiBwcm9maWxlRGF0YSkgewotCi0gICAgICAgIC8vIOiOt+WPluivt+axguS9k+S4reeahOS/ruaUueaVsOaNrgotICAgICAgICBTdHJpbmcgYXZhdGFyVXJsID0gKFN0cmluZykgcHJvZmlsZURhdGEuZ2V0KCJhdmF0YXJVcmwiKTsKLSAgICAgICAgU3RyaW5nIG5pY2tuYW1lID0gKFN0cmluZykgcHJvZmlsZURhdGEuZ2V0KCJuaWNrbmFtZSIpOwotICAgICAgICBTdHJpbmcgZ2VuZGVyID0gKFN0cmluZykgcHJvZmlsZURhdGEuZ2V0KCJnZW5kZXIiKTsKLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gKFN0cmluZykgcHJvZmlsZURhdGEuZ2V0KCJkZXNjcmlwdGlvbiIpOwotICAgICAgICBTdHJpbmcgaG9iYmllcyA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgiaG9iYmllcyIpOwotCi0gICAgICAgIC8vIOiwg+eUqOacjeWKoeWxguaWueazlei/m+ihjOS/ruaUuQotICAgICAgICBib29sZWFuIHVwZGF0ZWQgPSB1c2VyU2VydmljZS5lZGl0UHJvZmlsZSh1c2VySWQsIGF2YXRhclVybCwgbmlja25hbWUsIGdlbmRlciwgZGVzY3JpcHRpb24sIGhvYmJpZXMpOwotCi0gICAgICAgIC8vIOi/lOWbnuaTjeS9nOe7k+aenOa2iOaBrwotICAgICAgICBpZiAodXBkYXRlZCkgewotICAgICAgICAgICAgcmV0dXJuIE1hcC5vZigibWVzc2FnZSIsICLnlKjmiLfotYTmlpnmm7TmlrDmiJDlip8iKTsKKyAgICBAUG9zdE1hcHBpbmcoIi9yZWdpc3RlciIpCisgICAgQEFwaU9wZXJhdGlvbih2YWx1ZSA9ICLnlKjmiLfms6jlhowiLCBub3RlcyA9ICLkvb/nlKjnlKjmiLfkv6Hmga/ov5vooYzms6jlhowiKQorICAgIHB1YmxpYyBSZXN1bHQgcmVnaXN0ZXJDb250cm9sbGVyKEBSZXF1ZXN0Qm9keSBAQXBpUGFyYW0odmFsdWUgPSAi5paw55So5oi35L+h5oGvIiwgcmVxdWlyZWQgPSB0cnVlKSBVc2VyIG5ld1VzZXIpIHsKKyAgICAgICAgaWYgKHVzZXJTZXJ2aWNlLmNoZWNrRW1haWxFeGlzdHMobmV3VXNlci5nZXRFbWFpbCgpKSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvciggIumCrueuseW3suiiq+S9v+eUqO+8jOivt+S9v+eUqOWFtuS7lumCrueuseazqOWGjOaIluaJvuWbnuWvhuegge+8gSIpOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IHVzZXJTZXJ2aWNlLnByZVJlZ2lzdGVyVXNlcihuZXdVc2VyKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIFVzZXIgcmVzcG9uc2VVc2VyID0gbmV3IFVzZXIoKTsKKyAgICAgICAgICAgIHJlc3BvbnNlVXNlci5zZXRFbWFpbChuZXdVc2VyLmdldEVtYWlsKCkpOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIE1hcC5vZigibWVzc2FnZSIsICLnlKjmiLfkuI3lrZjlnKgiKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIui0puWPt+W3suWtmOWcqOaIluazqOWGjOWksei0pe+8gSIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8g6K6h566X5YiG5Lqr546HCi0gICAgQEdldE1hcHBpbmcoIi97dXNlcl9pZH0vY2FsY3VsYXRlLXNoYXJlLXJhdGUiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNhbGN1bGF0ZVNoYXJlUmF0ZShAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJTZXJ2aWNlLmNhbGN1bGF0ZVNoYXJlUmF0ZSh1c2VySWQpOworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVmVyaWZpY2F0aW9uUmVxdWVzdCB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGVtYWlsOworICAgICAgICBwcml2YXRlIFN0cmluZyBjb2RlOworCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKSB7IHJldHVybiBlbWFpbDsgfQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRFbWFpbChTdHJpbmcgZW1haWwpIHsgdGhpcy5lbWFpbCA9IGVtYWlsOyB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsgcmV0dXJuIGNvZGU7IH0KKyAgICAgICAgcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgY29kZSkgeyB0aGlzLmNvZGUgPSBjb2RlOyB9CiAgICAgfQogCisgICAgQFBvc3RNYXBwaW5nKCIvdmVyaWZ5LWNvZGUiKQorICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAi6aqM6K+B6YKu566x6aqM6K+B56CBIiwgbm90ZXMgPSAi6aqM6K+B55So5oi36YKu566x55qE6aqM6K+B56CBIikKKyAgICBwdWJsaWMgUmVzdWx0IHZlcmlmeUVtYWlsQ29kZShAUmVxdWVzdEJvZHkgQEFwaVBhcmFtKHZhbHVlID0gIumqjOivgeivt+axguS/oeaBryIsIHJlcXVpcmVkID0gdHJ1ZSkgVmVyaWZpY2F0aW9uUmVxdWVzdCB2ZXJpZmljYXRpb25SZXF1ZXN0KSB7CisgICAgICAgIFN0cmluZyBlbWFpbCA9IHZlcmlmaWNhdGlvblJlcXVlc3QuZ2V0RW1haWwoKTsKKyAgICAgICAgU3RyaW5nIGNvZGUgPSB2ZXJpZmljYXRpb25SZXF1ZXN0LmdldENvZGUoKTsKKyAgICAgICAgYm9vbGVhbiBpc1ZlcmlmaWVkID0gdXNlclNlcnZpY2UudmVyaWZ5RW1haWwoZW1haWwsIGNvZGUpOworICAgICAgICBpZiAoaXNWZXJpZmllZCkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvciggIumqjOivgeeggemUmeivr+aIluW3sui/h+acn++8gSIpOworICAgICAgICB9CisgICAgfQorCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgRW1haWxTZXJ2aWNlIGVtYWlsU2VydmljZTsKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRW1haWxSZXF1ZXN0IHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZW1haWw7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKSB7IHJldHVybiBlbWFpbDsgfQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRFbWFpbChTdHJpbmcgZW1haWwpIHsgdGhpcy5lbWFpbCA9IGVtYWlsOyB9CisgICAgfQorCisgICAgQFBvc3RNYXBwaW5nKCIvZ2V0LXZlcmlmaWNhdGlvbi1lbWFpbCIpCisgICAgQEFwaU9wZXJhdGlvbih2YWx1ZSA9ICLlj5HpgIHpqozor4Hpgq7ku7YiLCBub3RlcyA9ICLpgJrov4fnlLXlrZDpgq7ku7blj5HpgIHpqozor4Hpgq7ku7YiKQorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxSZXN1bHQ+IHNlbmRWZXJpZmljYXRpb25FbWFpbChAUmVxdWVzdEJvZHkgQEFwaVBhcmFtKHZhbHVlID0gIuWPkemAgemqjOivgeivt+axgiIsIHJlcXVpcmVkID0gdHJ1ZSkgRW1haWxSZXF1ZXN0IGVtYWlsVmVyaWZpY2F0aW9uUmVxdWVzdCkgeworICAgICAgICBTdHJpbmcgZW1haWwgPSBlbWFpbFZlcmlmaWNhdGlvblJlcXVlc3QuZ2V0RW1haWwoKTsKKyAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RPbmUobmV3IFF1ZXJ5V3JhcHBlcjxVc2VyPigpLmVxKCJlbWFpbCIsIGVtYWlsKSk7CisgICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigi5pyq5om+5Yiw5LiO6K+l6YKu566x5Zyw5Z2A55u45YWz6IGU55qE55So5oi3OiB7fSIsIGVtYWlsKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoSHR0cFN0YXR1cy5CQURfUkVRVUVTVCkKKyAgICAgICAgICAgICAgICAgICAgLmJvZHkoUmVzdWx0LmVycm9yKCLmnKrmib7liLDkuI7or6Xpgq7nrrHlnLDlnYDnm7jlhbPogZTnmoTnlKjmiLciKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyDnlJ/miJDpqozor4HnoIEKKyAgICAgICAgU3RyaW5nIHRva2VuID0gUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tTnVtZXJpYyg2KTsKKyAgICAgICAgSW5zdGFudCBleHBpcnlEYXRlID0gSW5zdGFudC5ub3coKS5wbHVzKDEsIENocm9ub1VuaXQuSE9VUlMpOworICAgICAgICBsb2dnZXIuaW5mbygi55Sf5oiQ55qE6aqM6K+B5Luk54mMOiB7fSwg6L+H5pyf5pe26Ze0OiB7fSIsIHRva2VuLCBleHBpcnlEYXRlKTsKKworICAgICAgICBWZXJpZmljYXRpb25Ub2tlbiB2ZXJpZmljYXRpb25Ub2tlbiA9IG5ldyBWZXJpZmljYXRpb25Ub2tlbih0b2tlbiwgdXNlci5nZXRVc2VybmFtZSgpLCBlbWFpbCwgdXNlci5nZXRQYXNzd29yZCgpLCBleHBpcnlEYXRlKTsKKworICAgICAgICAvLyDkv53lrZjliLAgTXlCYXRpcy1QbHVzIOaVsOaNruW6kworICAgICAgICB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlci5pbnNlcnQodmVyaWZpY2F0aW9uVG9rZW4pOworCisgICAgICAgIGxvZ2dlci5pbmZvKCLpqozor4Hku6TniYzlt7Lkv53lrZjvvIznlKjmiLc6IHt9IiwgdXNlci5nZXRVc2VybmFtZSgpKTsKKyAgICAgICAgZW1haWxTZXJ2aWNlLnNlbmRWZXJpZmljYXRpb25FbWFpbChlbWFpbCwgdG9rZW4pOworCisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhSZXN1bHQub2soKSk7CisgICAgfQorICAgIEBQb3N0TWFwcGluZygiL2NoZWNrUGFzc3dvcmQiKQorICAgIHB1YmxpYyBSZXN1bHQ8U3RyaW5nPiBjaGVja1Bhc3N3b3JkKEBSZXF1ZXN0UGFyYW0gTG9uZyB1c2VySWQsIEBSZXF1ZXN0UGFyYW0gU3RyaW5nIHBhc3N3b3JkKSB7CisgICAgICAgIGJvb2xlYW4gaXNQYXNzd29yZENvcnJlY3QgPSB1c2VyU2VydmljZS5jaGVja1Bhc3N3b3JkKHVzZXJJZCwgcGFzc3dvcmQpOworICAgICAgICBpZiAoaXNQYXNzd29yZENvcnJlY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2soKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWOn+Wni+Wvhueggei+k+WFpemUmeivryIpOworICAgICAgICB9CisgICAgfQorCisKKy8vICAgIEBTYUNoZWNrTG9naW4KKy8vICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLnlKjmiLfmlLbol4/liJfooagiLCBkZXNjcmlwdGlvbiA9ICLojrflj5bnlKjmiLfmlLbol4/nmoTnp43lrZDliJfooagt5YiG6aG1LeaOkuW6jyIpCisvLyAgICBAQXBpUmVzcG9uc2UocmVzcG9uc2VDb2RlID0gIjAiLCBkZXNjcmlwdGlvbiA9ICLmk43kvZzmiJDlip8iLAorLy8gICAgICAgICAgICBjb250ZW50ID0ge0BDb250ZW50KG1lZGlhVHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIiwKKy8vICAgICAgICAgICAgICAgICAgICBzY2hlbWEgPSBAU2NoZW1hKGltcGxlbWVudGF0aW9uID0gVG9ycmVudFZPLmNsYXNzKSkKKy8vICAgICAgICAgICAgfSkKKy8vICAgIEBQb3N0TWFwcGluZygiL2Zhdm9yaXRlL2xpc3QiKQorLy8gICAgcHVibGljIFJlc3VsdCBsaXN0RmF2b3JpdGVzKEBSZXF1ZXN0Qm9keSBGYXZvcml0ZVBhcmFtIHBhcmFtKSB7CisvLyAgICAgICAgaWYgKHBhcmFtLmdldFVzZXJJZCgpID09IG51bGwpIHsKKy8vICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi57y65bCRIHVzZXJJZCIpOworLy8gICAgICAgIH0KKy8vCisvLyAgICAgICAgLy8g5qCh6aqM5o6S5bqP5a2X5q615piv5ZCm5ZCI55CG77yI5Y+v6YCJ77yJCisvLyAgICAgICAgcGFyYW0udmFsaWRPcmRlcihwYXJhbS5nZXRPcmRlcktleShUb3JyZW50RW50aXR5LmNsYXNzKSk7CisvLworLy8gICAgICAgIFBhZ2VVdGlsLnN0YXJ0UGFnZShwYXJhbSk7CisvLworLy8gICAgICAgIExpc3Q8VG9ycmVudEVudGl0eT4gbGlzdCA9IGZhdm9yaXRlU2VydmljZS5nZXRVc2VyRmF2b3JpdGVzUGFnZWQocGFyYW0uZ2V0VXNlcklkKCkpOworLy8KKy8vICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKGxpc3QsIFBhZ2VVdGlsLmdldFBhZ2UobGlzdCkpOworLy8gICAgfQorLy8KKworCiAKIH0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU1MGJlYi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuVXNlckZvbGxvd1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby91c2VycyIpCi1wdWJsaWMgY2xhc3MgVXNlckZvbGxvd0NvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlckZvbGxvd1NlcnZpY2UgdXNlckZvbGxvd1NlcnZpY2U7Ci0KLSAgICAvLyDnlKjmiLflhbPms6jmjqXlj6MKLSAgICBAUG9zdE1hcHBpbmcoIi97Zm9sbG93ZWRfaWR9L2ZvbGxvdyIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGZvbGxvdyhAUGF0aFZhcmlhYmxlKCJmb2xsb3dlZF9pZCIpIExvbmcgZm9sbG93ZWRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgZm9sbG93ZXJJZCA9IHJlcXVlc3QuZ2V0KCJmb2xsb3dlcl9pZCIpOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlckZvbGxvd1NlcnZpY2UuZm9sbG93KGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIC8vIOWPlua2iOWFs+azqOaOpeWPowotICAgIEBQb3N0TWFwcGluZygiL3tmb2xsb3dlZF9pZH0vdW5mb2xsb3ciKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiB1bmZvbGxvdyhAUGF0aFZhcmlhYmxlKCJmb2xsb3dlZF9pZCIpIExvbmcgZm9sbG93ZWRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QpIHsKLSAgICAgICAgTG9uZyBmb2xsb3dlcklkID0gcmVxdWVzdC5nZXQoImZvbGxvd2VyX2lkIik7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyRm9sbG93U2VydmljZS51bmZvbGxvdyhmb2xsb3dlcklkLCBmb2xsb3dlZElkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvLyDojrflj5bmn5DkuKrnlKjmiLfnmoTnsonkuJ3liJfooagKLSAgICBAR2V0TWFwcGluZygiL3t1c2VyX2lkfS9mb2xsb3dlcnMiKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRGb2xsb3dlcnMoQFBhdGhWYXJpYWJsZSgidXNlcl9pZCIpIExvbmcgdXNlcklkKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyRm9sbG93U2VydmljZS5nZXRGb2xsb3dlcnModXNlcklkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICBAR2V0TWFwcGluZygiL3t1c2VyX2lkfS9mb2xsb3dpbmciKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRGb2xsb3dpbmcoQFBhdGhWYXJpYWJsZSgidXNlcl9pZCIpIExvbmcgdXNlcklkKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyRm9sbG93U2VydmljZS5nZXRGb2xsb3dpbmcodXNlcklkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcwMTRhNy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJNZXNzYWdlU2VydmljZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotQFJlc3RDb250cm9sbGVyCi1AUmVxdWVzdE1hcHBpbmcoIi9lY2hvL21lc3NhZ2UiKQotcHVibGljIGNsYXNzIFVzZXJNZXNzYWdlQ29udHJvbGxlciB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyTWVzc2FnZVNlcnZpY2UgdXNlck1lc3NhZ2VTZXJ2aWNlOwotCi0gICAgQFBvc3RNYXBwaW5nKCIvc2VuZE1lc3NhZ2VzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gc2VuZE1lc3NhZ2UoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1zKSB7Ci0gICAgICAgIC8vIOWwhuWPguaVsOi9rOaNouS4uiBMb25nIOexu+WeiwotICAgICAgICBMb25nIHNlbmRlcklkID0gTG9uZy52YWx1ZU9mKHBhcmFtcy5nZXQoInNlbmRlcl9pZCIpLnRvU3RyaW5nKCkpOwotICAgICAgICBMb25nIHJlY2VpdmVySWQgPSBMb25nLnZhbHVlT2YocGFyYW1zLmdldCgicmVjZWl2ZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSAoU3RyaW5nKSBwYXJhbXMuZ2V0KCJjb250ZW50Iik7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyTWVzc2FnZVNlcnZpY2Uuc2VuZE1lc3NhZ2Uoc2VuZGVySWQsIHJlY2VpdmVySWQsIGNvbnRlbnQpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2dldFVzZXJNZXNzYWdlcyIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldFVzZXJNZXNzYWdlcyhAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHVzZXJNZXNzYWdlU2VydmljZS5nZXRVc2VyTWVzc2FnZXModXNlcklkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvLyDojrflj5bljZXmnaHmtojmga/nmoTor6bmg4UKLSAgICBAR2V0TWFwcGluZygiL3ttZXNzYWdlX2lkfS9nZXRBTWVzc2FnZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldE1lc3NhZ2UoQFBhdGhWYXJpYWJsZSgibWVzc2FnZV9pZCIpIExvbmcgbWVzc2FnZUlkKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyTWVzc2FnZVNlcnZpY2UuZ2V0TWVzc2FnZShtZXNzYWdlSWQpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Qcm9tb3Rpb25DcmVhdGVEVE8uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Qcm9tb3Rpb25DcmVhdGVEVE8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTE5NzliCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1Byb21vdGlvbkNyZWF0ZURUTy5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0bzsKKworaW1wb3J0IGxvbWJvay5EYXRhOworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuKjsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQERhdGEKK3B1YmxpYyBjbGFzcyBQcm9tb3Rpb25DcmVhdGVEVE8geworICAgIEBOb3RCbGFuayhtZXNzYWdlID0gIuS/g+mUgOWQjeensOS4jeiDveS4uuepuiIpCisgICAgQFNpemUobWF4ID0gMTAwLCBtZXNzYWdlID0gIuS/g+mUgOWQjeensOmVv+W6puS4jeiDvei2hei/hzEwMOS4quWtl+espiIpCisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICAKKyAgICBAU2l6ZShtYXggPSA1MDAsIG1lc3NhZ2UgPSAi5o+P6L+w6ZW/5bqm5LiN6IO96LaF6L+HNTAw5Liq5a2X56ymIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAKKyAgICBATm90TnVsbChtZXNzYWdlID0gIuW8gOWni+aXtumXtOS4jeiDveS4uuepuiIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIHN0YXJ0VGltZTsKKyAgICAKKyAgICBATm90TnVsbChtZXNzYWdlID0gIue7k+adn+aXtumXtOS4jeiDveS4uuepuiIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGVuZFRpbWU7CisgICAgCisgICAgQE5vdE51bGwobWVzc2FnZSA9ICLmipjmiaPmr5TkvovkuI3og73kuLrnqboiKQorICAgIEBNaW4odmFsdWUgPSAwLCBtZXNzYWdlID0gIuaKmOaJo+avlOS+i+S4jeiDveWwj+S6jjAiKQorICAgIEBNYXgodmFsdWUgPSAxMDAsIG1lc3NhZ2UgPSAi5oqY5omj5q+U5L6L5LiN6IO95aSn5LqOMTAwIikKKyAgICBwcml2YXRlIGRvdWJsZSBkaXNjb3VudFBlcmNlbnRhZ2U7CisgICAgCisgICAgQE5vdEVtcHR5KG1lc3NhZ2UgPSAi6YCC55So56eN5a2Q5YiX6KGo5LiN6IO95Li656m6IikKKyAgICBwcml2YXRlIExpc3Q8TG9uZz4gYXBwbGljYWJsZVRvcnJlbnRJZHM7CisgICAgCisgICAgQEFzc2VydFRydWUobWVzc2FnZSA9ICLnu5PmnZ/ml7bpl7Tlv4XpobvmmZrkuo7lvIDlp4vml7bpl7QiKQorICAgIHB1YmxpYyBib29sZWFuIGlzRW5kVGltZUFmdGVyU3RhcnRUaW1lKCkgeworICAgICAgICByZXR1cm4gZW5kVGltZSAhPSBudWxsICYmIHN0YXJ0VGltZSAhPSBudWxsICYmIGVuZFRpbWUuaXNBZnRlcihzdGFydFRpbWUpOworICAgIH0KK30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1RvcnJlbnRVcGRhdGVEVE8uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Ub3JyZW50VXBkYXRlRFRPLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwOTMyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Ub3JyZW50VXBkYXRlRFRPLmphdmEKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvOworCitpbXBvcnQgbG9tYm9rLkRhdGE7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5Ob3RCbGFuazsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLlNpemU7CisKK0BEYXRhCitwdWJsaWMgY2xhc3MgVG9ycmVudFVwZGF0ZURUTyB7CisgICAgQE5vdEJsYW5rKG1lc3NhZ2UgPSAi5qCH6aKY5LiN6IO95Li656m6IikKKyAgICBAU2l6ZShtYXggPSAzMCwgbWVzc2FnZSA9ICLlkI3np7Dplb/luqbkuI3og73otoXov4czMOS4quWtl+espiIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGU7CisgICAgCisgICAgQFNpemUobWF4ID0gMTAwMCwgbWVzc2FnZSA9ICLmj4/ov7Dplb/luqbkuI3og73otoXov4cxMDAw5Liq5a2X56ymIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAKKyAgICBATm90QmxhbmsobWVzc2FnZSA9ICLliIbnsbvkuI3og73kuLrnqboiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworICAgIAorCisgICAgcHJpdmF0ZSBTdHJpbmcgdGFnczsKKyAgICBATm90QmxhbmsobWVzc2FnZSA9ICLlsIHpnaLkuI3og73kuLrnqboiKQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGltYWdlVXJsOworfSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmODMyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50UGFyYW0uamF2YQpAQCAtMCwwICsxLDQzIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8ucGFyYW07CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuT3JkZXJQYWdlUGFyYW07CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMubWVkaWEuU2NoZW1hOworaW1wb3J0IGxvbWJvay5EYXRhOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICog56eN5a2Q5p+l6K+i5Y+C5pWwCisgKi8KK0BEYXRhCitAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuenjeWtkOafpeivouWPguaVsCIpCitwdWJsaWMgY2xhc3MgVG9ycmVudFBhcmFtIGV4dGVuZHMgT3JkZXJQYWdlUGFyYW0geworCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlhbPplK7lrZciKQorICAgIHByaXZhdGUgU3RyaW5nIGtleXdvcmQ7CisKKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuWIhuexuyIpCisgICAgcHJpdmF0ZSBTdHJpbmcgY2F0ZWdvcnk7CisKKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuS/g+mUgOenjeWtkCIpCisgICAgcHJpdmF0ZSBTdHJpbmcgZnJlZTsKKworICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbGlrZUV4cHJlc3Npb25zOworCisgICAgcHVibGljIHZvaWQgYnVpbGRMaWtlKCkgeworICAgICAgICBsaWtlRXhwcmVzc2lvbnMgPSBuZXcgTGlua2VkSGFzaFNldDw+KCk7CisgICAgICAgIGlmIChTdHJpbmdVdGlscy5pc0VtcHR5KGtleXdvcmQpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAga2V5d29yZCA9IGtleXdvcmQucmVwbGFjZSgiLiIsICIgIik7CisgICAgICAgIFN0cmluZ1tdIHNlYXJjaHN0ckV4cGxvZGVkID0ga2V5d29yZC5zcGxpdCgiICIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlYXJjaHN0ckV4cGxvZGVkLmxlbmd0aCAmJiBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIHNlYXJjaHN0ckVsZW1lbnQgPSBzZWFyY2hzdHJFeHBsb2RlZFtpXS50cmltKCk7CisgICAgICAgICAgICBpZiAoIXNlYXJjaHN0ckVsZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbGlrZUV4cHJlc3Npb25zLmFkZChzZWFyY2hzdHJFbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkZTQ2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50VXBsb2FkUGFyYW0uamF2YQpAQCAtMCwwICsxLDI4IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8ucGFyYW07CisKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQERhdGEKK0BTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5LiK5Lyg5Y+C5pWwIikKK3B1YmxpYyBjbGFzcyBUb3JyZW50VXBsb2FkUGFyYW0geworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5LiK5Lyg6ICFIikKKyAgICBwcml2YXRlIFN0cmluZyB1cGxvYWRlcjsKKworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5qCH6aKYIikKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5o+P6L+wIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5qCH562+IikKKyAgICBwcml2YXRlIFN0cmluZyB0YWdzOworCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLnp43lrZDliIbnsbsiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLnp43lrZDlsIHpnaLlm74gVVJMIikKKyAgICBwcml2YXRlIFN0cmluZyBpbWFnZVVybDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vdm8vVG9ycmVudFZPLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vdm8vVG9ycmVudFZPLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyM2NiMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by92by9Ub3JyZW50Vk8uamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnZvOworCitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CisKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5Ob3RFbXB0eTsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk5vdE51bGw7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK0BEYXRhCitwdWJsaWMgY2xhc3MgVG9ycmVudFZPIHsKKyAgICAvKioKKyAgICAgKiDnp43lrZBJRAorICAgICAqLworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2QSUQiKQorICAgIHByaXZhdGUgTG9uZyBpZDsKKworICAgIC8qKgorICAgICAqIOagh+mimAorICAgICAqLworICAgIEBOb3RFbXB0eQorICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5qCH6aKYIikKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKworCisgICAgLyoqCisgICAgICog5bCB6Z2iCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlsIHpnaIiKQorICAgIHByaXZhdGUgU3RyaW5nIGltYWdlVXJsOworICAgIC8qKgorICAgICAqIOaPj+i/sAorICAgICAqLworICAgIEBOb3RFbXB0eQorICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5o+P6L+wIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKworICAgIC8qKgorICAgICAqIOexu+WIqworICAgICAqLworICAgIEBOb3ROdWxsCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLnsbvliKsiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworCisKKyAgICAvKioKKyAgICAgKiDmt7vliqDml6XmnJ8KKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIua3u+WKoOaXpeacnyIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZVRpbWU7CisKKyAgICAvKioKKyAgICAgKiDkv67mlLnml6XmnJ8KKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuS/ruaUueaXpeacnyIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIHVwZGF0ZVRpbWU7CisKKyAgICAvKioKKyAgICAgKiDkuIrkvKDogIUKKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuS4iuS8oOiAhSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdXBsb2FkZXI7CisgICAgLyoqCisgICAgICog5paH5Lu25aSn5bCPCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLmlofku7blpKflsI8iKQorICAgIHByaXZhdGUgTG9uZyBzaXplOworICAgCisKKworICAgIC8qKgorICAgICAqIOivhOiuuuaVsAorICAgICAqLworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi6K+E6K665pWwIikKKyAgICBwcml2YXRlIEludGVnZXIgY29tbWVudHM7CisgICAgLyoqCisgICAgICog5rWP6KeI5qyh5pWwCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLmtY/op4jmrKHmlbAiKQorICAgIHByaXZhdGUgSW50ZWdlciB2aWV3czsKKyAgICAvKioKKyAgICAgKiDngrnlh7vmrKHmlbAKKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIueCueWHu+asoeaVsCIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGhpdHM7CisKKworICAgIC8qKgorICAgICAqIOS4i+i9veaVsAorICAgICAqLworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5LiL6L295pWwIikKKyAgICBwcml2YXRlIEludGVnZXIgbGVlY2hlcnM7CisgICAgLyoqCisgICAgICog5YGa56eN5pWwCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlgZrnp43mlbAiKQorICAgIHByaXZhdGUgSW50ZWdlciBzZWVkZXJzOworCisgICAgLyoqCisgICAgICog5a6M5oiQ5qyh5pWwCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlrozmiJDmrKHmlbAiKQorICAgIHByaXZhdGUgSW50ZWdlciBjb21wbGV0aW9uczsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbGxlY3Rpb25zLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhODcxMS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gImNvbGxlY3Rpb25zIikKLXB1YmxpYyBjbGFzcyBDb2xsZWN0aW9ucyB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiY29sbGVjdGlvbklkIikKLSAgICBwcml2YXRlIExvbmcgY29sbGVjdGlvbklkOwotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdE5vIikKLSAgICBwcml2YXRlIExvbmcgcG9zdE5vOwotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldENvbGxlY3Rpb25JZCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25JZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb2xsZWN0aW9uSWQoTG9uZyBjb2xsZWN0aW9uSWQpIHsKLSAgICAgICAgdGhpcy5jb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRQb3N0Tm8oKSB7Ci0gICAgICAgIHJldHVybiBwb3N0Tm87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdE5vKExvbmcgcG9zdE5vKSB7Ci0gICAgICAgIHRoaXMucG9zdE5vID0gcG9zdE5vOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db21tZW50cy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbW1lbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjg5ZmEuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbW1lbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbkJhY2tSZWZlcmVuY2U7Ci1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiY29tbWVudHMiKQotcHVibGljIGNsYXNzIENvbW1lbnRzIHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJjb21tZW50X2lkIikKLSAgICBwcml2YXRlIExvbmcgY29tbWVudElkOwotCi0gICAgQE1hbnlUb09uZQotICAgIEBKb2luQ29sdW1uKG5hbWUgPSAicG9zdF9pZCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgQEpzb25CYWNrUmVmZXJlbmNlCi0gICAgcHJpdmF0ZSBQb3N0IHBvc3Q7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29udGVudCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJpc19hbm9ueW1vdXMiKQotICAgIHByaXZhdGUgQm9vbGVhbiBpc0Fub255bW91czsgIC8vIOaYr+WQpuWMv+WQjQotCi0gICAgQENvbHVtbihuYW1lID0gImxpa2VzX2NvdW50IikKLSAgICBwcml2YXRlIEludGVnZXIgbGlrZXNDb3VudCA9IDA7ICAvLyDngrnotZ7mlbAKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZXBseV9jb3VudCIpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIHJlcGx5Q291bnQgPSAwOyAgLy8g5Zue5aSN5pWwCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF90aW1lIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIERhdGUgY29tbWVudFRpbWU7ICAvLyDor4Torrrml7bpl7QKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIExvbmcgdXNlcklkOyAgLy8g6K+E6K666ICF55qEIHVzZXJfaWQKLQotCi0gICAgQENvbHVtbihuYW1lID0gImNvbV9jb21tZW50X2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIExvbmcgY29tX2NvbW1lbnRfaWQ7Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0KLSAgICBwdWJsaWMgTG9uZyBnZXRDb21tZW50SWQoKSB7Ci0gICAgICAgIHJldHVybiBjb21tZW50SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29tbWVudElkKExvbmcgY29tbWVudElkKSB7Ci0gICAgICAgIHRoaXMuY29tbWVudElkID0gY29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyBQb3N0IGdldFBvc3QoKSB7Ci0gICAgICAgIHJldHVybiBwb3N0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBvc3QoUG9zdCBwb3N0KSB7Ci0gICAgICAgIHRoaXMucG9zdCA9IHBvc3Q7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgewotICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7Ci0gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIEJvb2xlYW4gZ2V0SXNBbm9ueW1vdXMoKSB7Ci0gICAgICAgIHJldHVybiBpc0Fub255bW91czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc0Fub255bW91cyhCb29sZWFuIGlzQW5vbnltb3VzKSB7Ci0gICAgICAgIHRoaXMuaXNBbm9ueW1vdXMgPSBpc0Fub255bW91czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRMaWtlc0NvdW50KCkgewotICAgICAgICByZXR1cm4gbGlrZXNDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaWtlc0NvdW50KEludGVnZXIgbGlrZXNDb3VudCkgewotICAgICAgICB0aGlzLmxpa2VzQ291bnQgPSBsaWtlc0NvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyBJbnRlZ2VyIGdldFJlcGx5Q291bnQoKSB7Ci0gICAgICAgIHJldHVybiByZXBseUNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlcGx5Q291bnQoSW50ZWdlciByZXBseUNvdW50KSB7Ci0gICAgICAgIHRoaXMucmVwbHlDb3VudCA9IHJlcGx5Q291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0Q29tbWVudFRpbWUoKSB7Ci0gICAgICAgIHJldHVybiBjb21tZW50VGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50VGltZShEYXRlIGNvbW1lbnRUaW1lKSB7Ci0gICAgICAgIHRoaXMuY29tbWVudFRpbWUgPSBjb21tZW50VGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7Ci0gICAgICAgIHJldHVybiB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFBhcmVudENvbW1lbnQoKSB7Ci0gICAgICAgIHJldHVybiBjb21fY29tbWVudF9pZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRDb21tZW50KExvbmcgY29tX2NvbW1lbnRfaWQpIHsKLSAgICAgICAgdGhpcy5jb21fY29tbWVudF9pZCA9IGNvbV9jb21tZW50X2lkOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljQ29tbWVudC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNDb21tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1Yzg0ZDMuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNDb21tZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJkeW5hbWljX2NvbW1lbnQiKQotcHVibGljIGNsYXNzIER5bmFtaWNDb21tZW50IHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJjb21tZW50X2lkIikKLSAgICBwcml2YXRlIExvbmcgY29tbWVudElkOwotCi0gICAgQENvbHVtbihuYW1lID0gImR5bmFtaWNfaWQiKQotICAgIHByaXZhdGUgTG9uZyBkeW5hbWljSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjb21tZW50X2NvbnRlbnQiKQotICAgIHByaXZhdGUgU3RyaW5nIGNvbW1lbnRDb250ZW50OwotCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfdGltZSIpCi0gICAgcHJpdmF0ZSBEYXRlIGNvbW1lbnRUaW1lOwotCi0gICAgQENvbHVtbihuYW1lID0gImlzX2Fub255bW91cyIpCi0gICAgcHJpdmF0ZSBCb29sZWFuIGlzQW5vbnltb3VzID0gZmFsc2U7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicGFyZW50X2NvbW1lbnRfaWQiKQotICAgIHByaXZhdGUgTG9uZyBwYXJlbnRDb21tZW50SWQ7Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0Q29tbWVudElkKCkgewotICAgICAgICByZXR1cm4gY29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRJZChMb25nIGNvbW1lbnRJZCkgewotICAgICAgICB0aGlzLmNvbW1lbnRJZCA9IGNvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXREeW5hbWljSWQoKSB7Ci0gICAgICAgIHJldHVybiBkeW5hbWljSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RHluYW1pY0lkKExvbmcgZHluYW1pY0lkKSB7Ci0gICAgICAgIHRoaXMuZHluYW1pY0lkID0gZHluYW1pY0lkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb21tZW50Q29udGVudCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbW1lbnRDb250ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRDb250ZW50KFN0cmluZyBjb21tZW50Q29udGVudCkgewotICAgICAgICB0aGlzLmNvbW1lbnRDb250ZW50ID0gY29tbWVudENvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0Q29tbWVudFRpbWUoKSB7Ci0gICAgICAgIHJldHVybiBjb21tZW50VGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50VGltZShEYXRlIGNvbW1lbnRUaW1lKSB7Ci0gICAgICAgIHRoaXMuY29tbWVudFRpbWUgPSBjb21tZW50VGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQm9vbGVhbiBnZXRJc0Fub255bW91cygpIHsKLSAgICAgICAgcmV0dXJuIGlzQW5vbnltb3VzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElzQW5vbnltb3VzKEJvb2xlYW4gaXNBbm9ueW1vdXMpIHsKLSAgICAgICAgdGhpcy5pc0Fub255bW91cyA9IGlzQW5vbnltb3VzOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFBhcmVudENvbW1lbnRJZCgpIHsKLSAgICAgICAgcmV0dXJuIHBhcmVudENvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRDb21tZW50SWQoTG9uZyBwYXJlbnRDb21tZW50SWQpIHsKLSAgICAgICAgdGhpcy5wYXJlbnRDb21tZW50SWQgPSBwYXJlbnRDb21tZW50SWQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNMaWtlcy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNMaWtlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODZmOTAzLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gImR5bmFtaWNfbGlrZXMiKQotcHVibGljIGNsYXNzIER5bmFtaWNMaWtlcyB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAibGlrZV9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGxpa2VJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJkeW5hbWljX2lkIikKLSAgICBwcml2YXRlIExvbmcgZHluYW1pY0lkOwotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAibGlrZV90aW1lIikKLSAgICBwcml2YXRlIERhdGUgbGlrZVRpbWU7Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0TGlrZUlkKCkgewotICAgICAgICByZXR1cm4gbGlrZUlkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExpa2VJZChMb25nIGxpa2VJZCkgewotICAgICAgICB0aGlzLmxpa2VJZCA9IGxpa2VJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXREeW5hbWljSWQoKSB7Ci0gICAgICAgIHJldHVybiBkeW5hbWljSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RHluYW1pY0lkKExvbmcgZHluYW1pY0lkKSB7Ci0gICAgICAgIHRoaXMuZHluYW1pY0lkID0gZHluYW1pY0lkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0TGlrZVRpbWUoKSB7Ci0gICAgICAgIHJldHVybiBsaWtlVGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaWtlVGltZShEYXRlIGxpa2VUaW1lKSB7Ci0gICAgICAgIHRoaXMubGlrZVRpbWUgPSBsaWtlVGltZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRW50aXR5QmFzZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODU4M2NiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuamF2YQpAQCAtMCwwICsxLDYxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKKworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmFubm90YXRpb24uSWRUeXBlOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLlRhYmxlSWQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKKworaW1wb3J0IGxvbWJvay5HZXR0ZXI7CitpbXBvcnQgbG9tYm9rLlNldHRlcjsKKworLyoqCisgKiBCYXNlIGNsYXNzIGZvciBhbiBlbnRpdHksIGFzIGV4cGxhaW5lZCBpbiB0aGUgYm9vayAiRG9tYWluIERyaXZlbiBEZXNpZ24iLgorICogQWxsIGVudGl0aWVzIGluIHRoaXMgcHJvamVjdCBoYXZlIGFuIGlkZW50aXR5IGF0dHJpYnV0ZSB3aXRoIHR5cGUgTG9uZyBhbmQKKyAqIG5hbWUgaWQuIEluc3BpcmVkIGJ5IHRoZSBEREQgU2FtcGxlIHByb2plY3QuCisKKyAqLworQFNldHRlcgorQEdldHRlcgorcHVibGljIGFic3RyYWN0IGNsYXNzIEVudGl0eUJhc2UgeworCisgICAgLyoqCisgICAgICogVGhpcyBpZGVudGl0eSBmaWVsZCBoYXMgdGhlIHdyYXBwZXIgY2xhc3MgdHlwZSBMb25nIHNvIHRoYXQgYW4gZW50aXR5IHdoaWNoCisgICAgICogaGFzIG5vdCBiZWVuIHNhdmVkIGlzIHJlY29nbml6YWJsZSBieSBhIG51bGwgaWRlbnRpdHkuCisgICAgICovCisgICAgQFRhYmxlSWQodHlwZSA9IElkVHlwZS5BVVRPKQorICAgIHByaXZhdGUgSW50ZWdlciBpZDsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb2JqZWN0KSB7CisgICAgICAgIGlmICghKG9iamVjdCBpbnN0YW5jZW9mIEVudGl0eUJhc2UpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnZXRDbGFzcygpLmVxdWFscyhvYmplY3QuZ2V0Q2xhc3MoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBFbnRpdHlCYXNlIHRoYXQgPSAoRW50aXR5QmFzZSkgb2JqZWN0OworICAgICAgICBfY2hlY2tJZGVudGl0eSh0aGlzKTsKKyAgICAgICAgX2NoZWNrSWRlbnRpdHkodGhhdCk7CisgICAgICAgIHJldHVybiB0aGlzLmlkLmVxdWFscyh0aGF0LmdldElkKCkpOworICAgIH0KKworCisgICAgcHJpdmF0ZSB2b2lkIF9jaGVja0lkZW50aXR5KGZpbmFsIEVudGl0eUJhc2UgZW50aXR5KSB7CisgICAgICAgIGlmIChlbnRpdHkuZ2V0SWQoKSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb21wYXJpc29uIGlkZW50aXR5IG1pc3NpbmcgaW4gZW50aXR5OiAiICsgZW50aXR5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgIHJldHVybiBPYmplY3RzLmhhc2godGhpcy5nZXRJZCgpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICI8IiArIGdldElkKCkgKyAiPiI7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRXhwZXJpZW5jZUhpc3RvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FeHBlcmllbmNlSGlzdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzUyZjZiLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FeHBlcmllbmNlSGlzdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiZXhwZXJpZW5jZV9oaXN0b3J5IikKLXB1YmxpYyBjbGFzcyBFeHBlcmllbmNlSGlzdG9yeSB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiaGlzdG9yeV9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGhpc3RvcnlJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIExvbmcgdXNlcklkOwotCi0gICAgQENvbHVtbihuYW1lID0gImV4cGVyaWVuY2VfY2hhbmdlIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEludGVnZXIgZXhwZXJpZW5jZUNoYW5nZTsgIC8vIOe7j+mqjOWAvOWPmOWMlumHjwotCi0gICAgQENvbHVtbihuYW1lID0gInNvdXJjZSIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBTdHJpbmcgc291cmNlOyAgLy8g5pu05paw5p2l5rqQCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXBkYXRlX3RpbWUiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgRGF0ZSB1cGRhdGVUaW1lOyAgLy8g5pu05paw5pON5L2c55qE5pe26Ze0Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0SGlzdG9yeUlkKCkgewotICAgICAgICByZXR1cm4gaGlzdG9yeUlkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEhpc3RvcnlJZChMb25nIGhpc3RvcnlJZCkgewotICAgICAgICB0aGlzLmhpc3RvcnlJZCA9IGhpc3RvcnlJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7Ci0gICAgICAgIHJldHVybiB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnRlZ2VyIGdldEV4cGVyaWVuY2VDaGFuZ2UoKSB7Ci0gICAgICAgIHJldHVybiBleHBlcmllbmNlQ2hhbmdlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEV4cGVyaWVuY2VDaGFuZ2UoSW50ZWdlciBleHBlcmllbmNlQ2hhbmdlKSB7Ci0gICAgICAgIHRoaXMuZXhwZXJpZW5jZUNoYW5nZSA9IGV4cGVyaWVuY2VDaGFuZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTb3VyY2UoKSB7Ci0gICAgICAgIHJldHVybiBzb3VyY2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U291cmNlKFN0cmluZyBzb3VyY2UpIHsKLSAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0VXBkYXRlVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIHVwZGF0ZVRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXBkYXRlVGltZShEYXRlIHVwZGF0ZVRpbWUpIHsKLSAgICAgICAgdGhpcy51cGRhdGVUaW1lID0gdXBkYXRlVGltZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRmF2b3JpdGVFbnRpdHkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GYXZvcml0ZUVudGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzZjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRmF2b3JpdGVFbnRpdHkuamF2YQpAQCAtMCwwICsxLDM2IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuYW5ub3RhdGlvbi5JZFR5cGU7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmFubm90YXRpb24uVGFibGVGaWVsZDsKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuYW5ub3RhdGlvbi5UYWJsZUlkOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLlRhYmxlTmFtZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHk7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlNb2RlbDsKK2ltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaU1vZGVsUHJvcGVydHk7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworQERhdGEKK0BUYWJsZU5hbWUoImZhdm9yaXRlIikKK0BBcGlNb2RlbCgi5pS26JeP5a6e5L2T57G7IikKK3B1YmxpYyBjbGFzcyBGYXZvcml0ZUVudGl0eSB7CisgICAgQFRhYmxlSWQodHlwZSA9IElkVHlwZS5BVVRPKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuaUtuiXj0lEIiwgZXhhbXBsZSA9ICIxIikKKyAgICBwcml2YXRlIExvbmcgaWQ7CisKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnlKjmiLdJRCIsIGV4YW1wbGUgPSAiMTAwMSIpCisgICAgQEpzb25Qcm9wZXJ0eSgidXNlcklkIikKKyAgICBAVGFibGVGaWVsZCgidXNlcl9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKKworICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkElEIiwgZXhhbXBsZSA9ICIyMDAxIikKKyAgICBASnNvblByb3BlcnR5KCJzZWVkSWQiKQorICAgIEBUYWJsZUZpZWxkKCJzZWVkX2lkIikKKyAgICBwcml2YXRlIExvbmcgc2VlZElkOworCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5pS26JeP5pe26Ze0IiwgZXhhbXBsZSA9ICIyMDI0LTA1LTEzIDEyOjAwOjAwIikKKyAgICBASnNvblByb3BlcnR5KCJjcmVhdGVUaW1lIikKKyAgICBAVGFibGVGaWVsZCgiY3JlYXRlX3RpbWUiKQorICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVUaW1lOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0ZyaWVuZFJlbGF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwODYwMDEuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0ZyaWVuZFJlbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJmcmllbmRfcmVsYXRpb24iKQotcHVibGljIGNsYXNzIEZyaWVuZFJlbGF0aW9uIHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWxhdGlvbl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHJlbGF0aW9uSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJmcmllbmRfaWQiKQotICAgIHByaXZhdGUgTG9uZyBmcmllbmRJZDsgIC8vIOWlveWPi0lECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3JlYXRlX3RpbWUiKQotICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVUaW1lOyAgLy8g5aW95Y+L5YWz57O75Yib5bu65pe26Ze0Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0UmVsYXRpb25JZCgpIHsKLSAgICAgICAgcmV0dXJuIHJlbGF0aW9uSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVsYXRpb25JZChMb25nIHJlbGF0aW9uSWQpIHsKLSAgICAgICAgdGhpcy5yZWxhdGlvbklkID0gcmVsYXRpb25JZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7Ci0gICAgICAgIHJldHVybiB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldEZyaWVuZElkKCkgewotICAgICAgICByZXR1cm4gZnJpZW5kSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RnJpZW5kSWQoTG9uZyBmcmllbmRJZCkgewotICAgICAgICB0aGlzLmZyaWVuZElkID0gZnJpZW5kSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0Q3JlYXRlVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlVGltZShEYXRlIGNyZWF0ZVRpbWUpIHsKLSAgICAgICAgdGhpcy5jcmVhdGVUaW1lID0gY3JlYXRlVGltZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTRmMmM3Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiZ3JvdXBfaW50ZXJlc3RzIikKLXB1YmxpYyBjbGFzcyBHcm91cCB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfaWQiKQotICAgIHByaXZhdGUgTG9uZyBncm91cElkOwotCi0gICAgQENvbHVtbihuYW1lID0gImdyb3VwX25hbWUiKQotICAgIHByaXZhdGUgU3RyaW5nIGdyb3VwTmFtZTsKLQotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOyAgLy8g5bCP57uE566A5LuLCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3JlYXRlX3RpbWUiKQotICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVUaW1lOyAgLy8g5Yib5bu65pe26Ze0Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsgIC8vIOWIm+W7uuivpeWwj+e7hOeahOeUqOaIt0lECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAibWVtYmVyX2NvdW50IikKLSAgICBwcml2YXRlIEludGVnZXIgbWVtYmVyQ291bnQ7ICAvLyDlsI/nu4TmiJDlkZjkurrmlbAKLQotICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OyAgLy8g5bCP57uE57G75YirCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY292ZXJfaW1hZ2UiKQotICAgIHByaXZhdGUgU3RyaW5nIGNvdmVySW1hZ2U7ICAvLyDlsI/nu4TlsIHpnaLlm77niYcKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRHcm91cElkKCkgewotICAgICAgICByZXR1cm4gZ3JvdXBJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRHcm91cElkKExvbmcgZ3JvdXBJZCkgewotICAgICAgICB0aGlzLmdyb3VwSWQgPSBncm91cElkOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JvdXBOYW1lKCkgewotICAgICAgICByZXR1cm4gZ3JvdXBOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwTmFtZShTdHJpbmcgZ3JvdXBOYW1lKSB7Ci0gICAgICAgIHRoaXMuZ3JvdXBOYW1lID0gZ3JvdXBOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldENyZWF0ZVRpbWUoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENyZWF0ZVRpbWUoRGF0ZSBjcmVhdGVUaW1lKSB7Ci0gICAgICAgIHRoaXMuY3JlYXRlVGltZSA9IGNyZWF0ZVRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRNZW1iZXJDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1lbWJlckNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE1lbWJlckNvdW50KEludGVnZXIgbWVtYmVyQ291bnQpIHsKLSAgICAgICAgdGhpcy5tZW1iZXJDb3VudCA9IG1lbWJlckNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0ZWdvcnkoKSB7Ci0gICAgICAgIHJldHVybiBjYXRlZ29yeTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDYXRlZ29yeShTdHJpbmcgY2F0ZWdvcnkpIHsKLSAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q292ZXJJbWFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvdmVySW1hZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q292ZXJJbWFnZShTdHJpbmcgY292ZXJJbWFnZSkgewotICAgICAgICB0aGlzLmNvdmVySW1hZ2UgPSBjb3ZlckltYWdlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBDb21tZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2Y0MjA1Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJncm91cF9jb21tZW50cyIpCi1wdWJsaWMgY2xhc3MgR3JvdXBDb21tZW50cyB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGNvbW1lbnRJZDsgIC8vIOivhOiuuklECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfcG9zdF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGdyb3VwUG9zdElkOwotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7Ci0KLSAgICBwcml2YXRlIFN0cmluZyBjb250ZW50OwotCi0gICAgQENvbHVtbihuYW1lID0gInBhcmVudF9jb21tZW50X2lkIikKLSAgICBwcml2YXRlIExvbmcgcGFyZW50Q29tbWVudElkOwotCi0gICAgQENvbHVtbihuYW1lID0gInRpbWUiKQotICAgIHByaXZhdGUgRGF0ZSB0aW1lOyAgLy8g6K+E6K665pe26Ze0Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0Q29tbWVudElkKCkgewotICAgICAgICByZXR1cm4gY29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRJZChMb25nIGNvbW1lbnRJZCkgewotICAgICAgICB0aGlzLmNvbW1lbnRJZCA9IGNvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRHcm91cFBvc3RJZCgpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwUG9zdElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwUG9zdElkKExvbmcgZ3JvdXBQb3N0SWQpIHsKLSAgICAgICAgdGhpcy5ncm91cFBvc3RJZCA9IGdyb3VwUG9zdElkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgewotICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7Ci0gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0UGFyZW50Q29tbWVudElkKCkgewotICAgICAgICByZXR1cm4gcGFyZW50Q29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhcmVudENvbW1lbnRJZChMb25nIHBhcmVudENvbW1lbnRJZCkgewotICAgICAgICB0aGlzLnBhcmVudENvbW1lbnRJZCA9IHBhcmVudENvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRUaW1lKCkgewotICAgICAgICByZXR1cm4gdGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaW1lKERhdGUgdGltZSkgewotICAgICAgICB0aGlzLnRpbWUgPSB0aW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2ZTE4Yy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBNZW1iZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJncm91cF9tZW1iZXJzIikKLXB1YmxpYyBjbGFzcyBHcm91cE1lbWJlcnMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gInJlbGF0aW9uX2lkIikKLSAgICBwcml2YXRlIExvbmcgcmVsYXRpb25JZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJncm91cF9pZCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb25nIGdyb3VwSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRSZWxhdGlvbklkKCkgewotICAgICAgICByZXR1cm4gcmVsYXRpb25JZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbklkKExvbmcgcmVsYXRpb25JZCkgewotICAgICAgICB0aGlzLnJlbGF0aW9uSWQgPSByZWxhdGlvbklkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldEdyb3VwSWQoKSB7Ci0gICAgICAgIHJldHVybiBncm91cElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwSWQoTG9uZyBncm91cElkKSB7Ci0gICAgICAgIHRoaXMuZ3JvdXBJZCA9IGdyb3VwSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ODY3ZjcuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwUG9zdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gImdyb3VwX3Bvc3QiKQotcHVibGljIGNsYXNzIEdyb3VwUG9zdCB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfcG9zdF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGdyb3VwUG9zdElkOwotCi0gICAgQENvbHVtbihuYW1lID0gImdyb3VwX2lkIikKLSAgICBwcml2YXRlIExvbmcgZ3JvdXBJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKLSAgICBwcml2YXRlIExvbmcgdXNlcklkOwotCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsKLQotICAgIHByaXZhdGUgU3RyaW5nIGltYWdlOwotCi0gICAgQENvbHVtbihuYW1lID0gImxpa2VfY291bnQiKQotICAgIHByaXZhdGUgSW50ZWdlciBsaWtlQ291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF9jb3VudCIpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIGNvbW1lbnRDb3VudDsgIC8vIOW4luWtkOivhOiuuuaVsAotCi0gICAgQENvbHVtbihuYW1lID0gInRpbWUiKQotICAgIHByaXZhdGUgRGF0ZSB0aW1lOyAgLy8g5biW5a2Q5Yib5bu65pe26Ze0Ci0KLSAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKLQotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldEdyb3VwUG9zdElkKCkgewotICAgICAgICByZXR1cm4gZ3JvdXBQb3N0SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0R3JvdXBQb3N0SWQoTG9uZyBncm91cFBvc3RJZCkgewotICAgICAgICB0aGlzLmdyb3VwUG9zdElkID0gZ3JvdXBQb3N0SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0R3JvdXBJZCgpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0R3JvdXBJZChMb25nIGdyb3VwSWQpIHsKLSAgICAgICAgdGhpcy5ncm91cElkID0gZ3JvdXBJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7Ci0gICAgICAgIHJldHVybiB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgY29udGVudCkgewotICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBpbWFnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbWFnZShTdHJpbmcgaW1hZ2UpIHsKLSAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnRlZ2VyIGdldExpa2VDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIGxpa2VDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaWtlQ291bnQoSW50ZWdlciBsaWtlQ291bnQpIHsKLSAgICAgICAgdGhpcy5saWtlQ291bnQgPSBsaWtlQ291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0Q29tbWVudENvdW50KCkgewotICAgICAgICByZXR1cm4gY29tbWVudENvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRDb3VudChJbnRlZ2VyIGNvbW1lbnRDb3VudCkgewotICAgICAgICB0aGlzLmNvbW1lbnRDb3VudCA9IGNvbW1lbnRDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRUaW1lKCkgewotICAgICAgICByZXR1cm4gdGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaW1lKERhdGUgdGltZSkgewotICAgICAgICB0aGlzLnRpbWUgPSB0aW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7Ci0gICAgICAgIHJldHVybiB0aXRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIHsKLSAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MZXZlbC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MzdlZjkuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLQotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAibGV2ZWwiKQotcHVibGljIGNsYXNzIExldmVsIHsKLQotICAgIEBJZAotICAgIEBDb2x1bW4obmFtZSA9ICJsZXZlbF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGxldmVsSWQ7ICAvLyDnrYnnuqfllK/kuIDmoIfor4YKLQotICAgIEBDb2x1bW4obmFtZSA9ICJsZXZlbF9uYW1lIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIFN0cmluZyBsZXZlbE5hbWU7ICAvLyDnrYnnuqflkI3np7AKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZXF1aXJlZF9leHBlcmllbmNlIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIExvbmcgcmVxdWlyZWRFeHBlcmllbmNlOyAgLy8g5omA6ZyA57uP6aqM5YC8Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmVxdWlyZWRfc2hhcmVfcmF0aW8iKQotICAgIHByaXZhdGUgRmxvYXQgcmVxdWlyZWRTaGFyZVJhdGlvOyAgLy8g5omA6ZyA5YiG5Lqr546HCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmVxdWlyZWRfdXBsb2FkX2diIikKLSAgICBwcml2YXRlIEZsb2F0IHJlcXVpcmVkVXBsb2FkR2I7ICAvLyDmiYDpnIDkuIrkvKDmlbDmja7ph48KLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZXF1aXJlZF9zZWVkaW5nX2hvdXJzIikKLSAgICBwcml2YXRlIEZsb2F0IHJlcXVpcmVkU2VlZGluZ0hvdXJzOyAgLy8g5omA6ZyA5YGa56eN5pe26ZW/Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicGVybWlzc2lvbnMiKQotICAgIHByaXZhdGUgU3RyaW5nIHBlcm1pc3Npb25zOyAgLy8g5oul5pyJ55qE5p2D6ZmQCi0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0TGV2ZWxJZCgpIHsKLSAgICAgICAgcmV0dXJuIGxldmVsSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGV2ZWxJZChMb25nIGxldmVsSWQpIHsKLSAgICAgICAgdGhpcy5sZXZlbElkID0gbGV2ZWxJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldExldmVsTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIGxldmVsTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMZXZlbE5hbWUoU3RyaW5nIGxldmVsTmFtZSkgewotICAgICAgICB0aGlzLmxldmVsTmFtZSA9IGxldmVsTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRSZXF1aXJlZEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIHJldHVybiByZXF1aXJlZEV4cGVyaWVuY2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRFeHBlcmllbmNlKExvbmcgcmVxdWlyZWRFeHBlcmllbmNlKSB7Ci0gICAgICAgIHRoaXMucmVxdWlyZWRFeHBlcmllbmNlID0gcmVxdWlyZWRFeHBlcmllbmNlOwotICAgIH0KLQotICAgIHB1YmxpYyBGbG9hdCBnZXRSZXF1aXJlZFNoYXJlUmF0aW8oKSB7Ci0gICAgICAgIHJldHVybiByZXF1aXJlZFNoYXJlUmF0aW87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRTaGFyZVJhdGlvKEZsb2F0IHJlcXVpcmVkU2hhcmVSYXRpbykgewotICAgICAgICB0aGlzLnJlcXVpcmVkU2hhcmVSYXRpbyA9IHJlcXVpcmVkU2hhcmVSYXRpbzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0UmVxdWlyZWRVcGxvYWRHYigpIHsKLSAgICAgICAgcmV0dXJuIHJlcXVpcmVkVXBsb2FkR2I7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRVcGxvYWRHYihGbG9hdCByZXF1aXJlZFVwbG9hZEdiKSB7Ci0gICAgICAgIHRoaXMucmVxdWlyZWRVcGxvYWRHYiA9IHJlcXVpcmVkVXBsb2FkR2I7Ci0gICAgfQotCi0gICAgcHVibGljIEZsb2F0IGdldFJlcXVpcmVkU2VlZGluZ0hvdXJzKCkgewotICAgICAgICByZXR1cm4gcmVxdWlyZWRTZWVkaW5nSG91cnM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRTZWVkaW5nSG91cnMoRmxvYXQgcmVxdWlyZWRTZWVkaW5nSG91cnMpIHsKLSAgICAgICAgdGhpcy5yZXF1aXJlZFNlZWRpbmdIb3VycyA9IHJlcXVpcmVkU2VlZGluZ0hvdXJzOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGVybWlzc2lvbnMoKSB7Ci0gICAgICAgIHJldHVybiBwZXJtaXNzaW9uczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQZXJtaXNzaW9ucyhTdHJpbmcgcGVybWlzc2lvbnMpIHsKLSAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MaWtlcy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xpa2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhM2RjZGEuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xpa2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJsaWtlcyIpCi1wdWJsaWMgY2xhc3MgTGlrZXMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpICAvLyDkvb/nlKjoh6rlop7kuLvplK4KLSAgICBAQ29sdW1uKG5hbWUgPSAibGlrZUlkIikKLSAgICBwcml2YXRlIExvbmcgbGlrZUlkOwotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdE5vIikKLSAgICBwcml2YXRlIExvbmcgcG9zdE5vOwotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldExpa2VJZCgpIHsKLSAgICAgICAgcmV0dXJuIGxpa2VJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaWtlSWQoTG9uZyBsaWtlSWQpIHsKLSAgICAgICAgdGhpcy5saWtlSWQgPSBsaWtlSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRQb3N0Tm8oKSB7Ci0gICAgICAgIHJldHVybiBwb3N0Tm87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdE5vKExvbmcgcG9zdE5vKSB7Ci0gICAgICAgIHRoaXMucG9zdE5vID0gcG9zdE5vOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUG9zdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjk0YWFjLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbk1hbmFnZWRSZWZlcmVuY2U7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gInBvc3QiKQotcHVibGljIGNsYXNzIFBvc3QgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gInBvc3RObyIpCi0gICAgcHJpdmF0ZSBMb25nIHBvc3RObzsKLQotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJJZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJfaWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdENvbnRlbnQiKQotICAgIHByaXZhdGUgU3RyaW5nIHBvc3RDb250ZW50OwotCi0gICAgQENvbHVtbihuYW1lID0gImltYWdlVXJsIikKLSAgICBwcml2YXRlIFN0cmluZyBpbWFnZVVybDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJwb3N0VGltZSIpCi0gICAgcHJpdmF0ZSBEYXRlIHBvc3RUaW1lOwotCi0gICAgQENvbHVtbihuYW1lID0gInBvc3RMaWtlTnVtIikKLSAgICBwcml2YXRlIEludGVnZXIgcG9zdExpa2VOdW07Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdENvbGxlY3ROdW0iKQotICAgIHByaXZhdGUgSW50ZWdlciBwb3N0Q29sbGVjdE51bTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ0aXRsZSIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdFR5cGUiKQotICAgIHByaXZhdGUgU3RyaW5nIHBvc3RUeXBlOwotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldFBvc3RObygpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RObzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3N0Tm8oTG9uZyBwb3N0Tm8pIHsKLSAgICAgICAgdGhpcy5wb3N0Tm8gPSBwb3N0Tm87Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcl9pZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJfaWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcl9pZChMb25nIHVzZXIpIHsKLSAgICAgICAgdGhpcy51c2VyX2lkID0gdXNlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBvc3RDb250ZW50KCkgewotICAgICAgICByZXR1cm4gcG9zdENvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdENvbnRlbnQoU3RyaW5nIHBvc3RDb250ZW50KSB7Ci0gICAgICAgIHRoaXMucG9zdENvbnRlbnQgPSBwb3N0Q29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEltYWdlVXJsKCkgewotICAgICAgICByZXR1cm4gaW1hZ2VVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SW1hZ2VVcmwoU3RyaW5nIGltZ1VybCkgewotICAgICAgICB0aGlzLmltYWdlVXJsID0gaW1nVXJsOwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldFBvc3RUaW1lKCkgewotICAgICAgICByZXR1cm4gcG9zdFRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdFRpbWUoRGF0ZSBwb3N0VGltZSkgewotICAgICAgICB0aGlzLnBvc3RUaW1lID0gcG9zdFRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0UG9zdExpa2VOdW0oKSB7Ci0gICAgICAgIHJldHVybiBwb3N0TGlrZU51bTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3N0TGlrZU51bShJbnRlZ2VyIHBvc3RMaWtlTnVtKSB7Ci0gICAgICAgIHRoaXMucG9zdExpa2VOdW0gPSBwb3N0TGlrZU51bTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRQb3N0Q29sbGVjdE51bSgpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RDb2xsZWN0TnVtOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBvc3RDb2xsZWN0TnVtKEludGVnZXIgcG9zdENvbGxlY3ROdW0pIHsKLSAgICAgICAgdGhpcy5wb3N0Q29sbGVjdE51bSA9IHBvc3RDb2xsZWN0TnVtOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7Ci0gICAgICAgIHJldHVybiB0aXRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIHsKLSAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9zdFR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBwb3N0VHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3N0VHlwZShTdHJpbmcgcG9zdFR5cGUpIHsKLSAgICAgICAgdGhpcy5wb3N0VHlwZSA9IHBvc3RUeXBlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qcm9tb3Rpb24uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qcm9tb3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2E4NDZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Byb21vdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKKworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLklkVHlwZTsKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuYW5ub3RhdGlvbi5UYWJsZUlkOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLlRhYmxlTmFtZTsKK2ltcG9ydCBsb21ib2suRGF0YTsKKworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitARGF0YQorQFRhYmxlTmFtZSgicHJvbW90aW9uIikKK3B1YmxpYyBjbGFzcyBQcm9tb3Rpb24geworICAgIEBUYWJsZUlkKHR5cGUgPSBJZFR5cGUuQVVUTykKKyAgICBwcml2YXRlIExvbmcgaWQ7CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAKKyAgICBwcml2YXRlIExvY2FsRGF0ZVRpbWUgc3RhcnRUaW1lOworICAgIAorICAgIHByaXZhdGUgTG9jYWxEYXRlVGltZSBlbmRUaW1lOworICAgIAorICAgIHByaXZhdGUgZG91YmxlIGRpc2NvdW50UGVyY2VudGFnZTsKKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyBhcHBsaWNhYmxlVG9ycmVudElkczsKKyAgICAKKyAgICBwcml2YXRlIExvY2FsRGF0ZVRpbWUgY3JlYXRlVGltZTsKKyAgICAKKyAgICBwcml2YXRlIExvY2FsRGF0ZVRpbWUgdXBkYXRlVGltZTsKKyAgICAKKyAgICBwcml2YXRlIEJvb2xlYW4gaXNEZWxldGVkOworfSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvU2VlZENvbW1lbnQuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjZlOTFmLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLkVudGl0eTsKLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAic2VlZF9jb21tZW50cyIpICAvLyDmmKDlsITliLDmlbDmja7lupPooaggc2VlZF9jb21tZW50cwotcHVibGljIGNsYXNzIFNlZWRDb21tZW50IHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKSAgLy8g6Ieq5aKe5Li76ZSuCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfaWQiKSAgLy8g5pig5bCE5Yiw6KGo55qEIGNvbW1lbnRfaWQg5YiXCi0gICAgcHJpdmF0ZSBsb25nIGNvbW1lbnRJZDsKLQotCi0gICAgQENvbHVtbihuYW1lID0gInNlZWRfaWQiLCAgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIGxvbmcgc2VlZElkOwotCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tX2NvbW1lbnRfaWQiLCAgbnVsbGFibGUgPSB0cnVlKQotICAgIHByaXZhdGUgbG9uZyBjb21Db21tZW50SWQ7ICAvLyDlpJbplK7vvIzmjIflkJHniLbor4TorrrnmoQgY29tbWVudF9pZAotCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIsbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIGxvbmcgdXNlcklkOwotCi0gICAgQENvbHVtbihuYW1lID0gImNvbnRlbnQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIGNvbnRlbnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaXNfYW5vbnltb3VzIikKLSAgICBwcml2YXRlIGJ5dGUgaXNBbm9ueW1vdXM7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAibGlrZXNfY291bnQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgaW50IGxpa2VzQ291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmVwbHlfY291bnQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgaW50IHJlcGx5Q291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF90aW1lIikKLSAgICBwcml2YXRlIERhdGUgY29tbWVudFRpbWU7Ci0KLSAgICAvLyBHZXR0ZXIg5ZKMIFNldHRlciDmlrnms5UKLQotICAgIHB1YmxpYyBsb25nIGdldENvbW1lbnRJZCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50SWQobG9uZyBjb21tZW50SWQpIHsKLSAgICAgICAgdGhpcy5jb21tZW50SWQgPSBjb21tZW50SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIGxvbmcgZ2V0U2VlZElkKCkgewotICAgICAgICByZXR1cm4gc2VlZElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNlZWRJZChsb25nIHNlZWRJZCkgewotICAgICAgICB0aGlzLnNlZWRJZCA9IHNlZWRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgbG9uZyBnZXRDb21Db21tZW50SWQoKSB7Ci0gICAgICAgIHJldHVybiBjb21Db21tZW50SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29tQ29tbWVudElkKGxvbmcgY29tQ29tbWVudElkKSB7Ci0gICAgICAgIHRoaXMuY29tQ29tbWVudElkID0gY29tQ29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyBsb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQobG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgewotICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7Ci0gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIGJ5dGUgZ2V0SXNBbm9ueW1vdXMoKSB7Ci0gICAgICAgIHJldHVybiBpc0Fub255bW91czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc0Fub255bW91cyhieXRlIGlzQW5vbnltb3VzKSB7Ci0gICAgICAgIHRoaXMuaXNBbm9ueW1vdXMgPSBpc0Fub255bW91czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldExpa2VzQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBsaWtlc0NvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExpa2VzQ291bnQoaW50IGxpa2VzQ291bnQpIHsKLSAgICAgICAgdGhpcy5saWtlc0NvdW50ID0gbGlrZXNDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFJlcGx5Q291bnQoKSB7Ci0gICAgICAgIHJldHVybiByZXBseUNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlcGx5Q291bnQoaW50IHJlcGx5Q291bnQpIHsKLSAgICAgICAgdGhpcy5yZXBseUNvdW50ID0gcmVwbHlDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRDb21tZW50VGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbW1lbnRUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRUaW1lKERhdGUgY29tbWVudFRpbWUpIHsKLSAgICAgICAgdGhpcy5jb21tZW50VGltZSA9IGNvbW1lbnRUaW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudExpa2VzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvU2VlZENvbW1lbnRMaWtlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWY3ZmM2Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudExpa2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJzZWVkX2NvbW1lbnRfbGlrZXMiKQotcHVibGljIGNsYXNzIFNlZWRDb21tZW50TGlrZXMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gImlkIikKLSAgICBwcml2YXRlIExvbmcgaWQ7ICAvLyDngrnotZ5JRAotCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgTG9uZyBjb21tZW50SWQ7ICAvLyDooqvngrnotZ7nmoTor4TorrpJRAotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7ICAvLyDngrnotZ7nmoTnlKjmiLdJRAotCi0gICAgQENvbHVtbihuYW1lID0gImlzX2xpa2VkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEJvb2xlYW4gaXNMaWtlZCA9IHRydWU7ICAvLyDngrnotZ7nirbmgIHvvIzpu5jorqTkuLp0cnVl77yI54K56LWe77yJCi0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0SWQoKSB7Ci0gICAgICAgIHJldHVybiBpZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJZChMb25nIGlkKSB7Ci0gICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRDb21tZW50SWQoKSB7Ci0gICAgICAgIHJldHVybiBjb21tZW50SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29tbWVudElkKExvbmcgY29tbWVudElkKSB7Ci0gICAgICAgIHRoaXMuY29tbWVudElkID0gY29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIEJvb2xlYW4gZ2V0SXNMaWtlZCgpIHsKLSAgICAgICAgcmV0dXJuIGlzTGlrZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SXNMaWtlZChCb29sZWFuIGlzTGlrZWQpIHsKLSAgICAgICAgdGhpcy5pc0xpa2VkID0gaXNMaWtlZDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVGFzay5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Rhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3OTZhMS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAidGFza3MiKQotcHVibGljIGNsYXNzIFRhc2sgewotCi0gICAgQElkCi0gICAgQENvbHVtbihuYW1lID0gInRhc2tfaWQiKQotICAgIHByaXZhdGUgU3RyaW5nIHRhc2tJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ0aXRsZSIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZGVzY3JpcHRpb24iLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0gICAgQENvbHVtbihuYW1lID0gInJld2FyZF9leHBlcmllbmNlIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIGludCByZXdhcmRFeHBlcmllbmNlOyAgLy8g5Lu75Yqh5aWW5Yqx55qE57uP6aqMCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmV3YXJkX3BvaW50cyIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBpbnQgcmV3YXJkUG9pbnRzOyAgLy8g5Lu75Yqh5aWW5Yqx55qE56ev5YiGCi0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFza0lkKCkgewotICAgICAgICByZXR1cm4gdGFza0lkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRhc2tJZChTdHJpbmcgdGFza0lkKSB7Ci0gICAgICAgIHRoaXMudGFza0lkID0gdGFza0lkOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7Ci0gICAgICAgIHJldHVybiB0aXRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIHsKLSAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIH0KLQotCi0gICAgcHVibGljIGludCBnZXRSZXdhcmRFeHBlcmllbmNlKCkgewotICAgICAgICByZXR1cm4gcmV3YXJkRXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXdhcmRFeHBlcmllbmNlKGludCByZXdhcmRFeHBlcmllbmNlKSB7Ci0gICAgICAgIHRoaXMucmV3YXJkRXhwZXJpZW5jZSA9IHJld2FyZEV4cGVyaWVuY2U7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRSZXdhcmRQb2ludHMoKSB7Ci0gICAgICAgIHJldHVybiByZXdhcmRQb2ludHM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmV3YXJkUG9pbnRzKGludCByZXdhcmRQb2ludHMpIHsKLSAgICAgICAgdGhpcy5yZXdhcmRQb2ludHMgPSByZXdhcmRQb2ludHM7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1RvcnJlbnRFbnRpdHkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Ub3JyZW50RW50aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZmI3NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Ub3JyZW50RW50aXR5LmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKKworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLio7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OworaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpTW9kZWw7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlNb2RlbFByb3BlcnR5OworaW1wb3J0IGxvbWJvay5EYXRhOworCitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BEYXRhCitAVGFibGVOYW1lKCJ0b3JyZW50IikKK0BBcGlNb2RlbCgi56eN5a2Q5a6e5L2T57G7IikKK3B1YmxpYyBjbGFzcyBUb3JyZW50RW50aXR5IHsKKworICAgIEBUYWJsZUlkKHR5cGUgPSBJZFR5cGUuQVVUTykKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZBJRCIsIGV4YW1wbGUgPSAiMSIpCisgICAgcHJpdmF0ZSBMb25nIGlkOworCisgICAgQEpzb25Qcm9wZXJ0eSgiaW5mb0hhc2giKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOS/oeaBr+WTiOW4jCIsIGV4YW1wbGUgPSAiYWJjZGVmMTIzNDU2IikKKyAgICBwcml2YXRlIFN0cmluZyBpbmZvSGFzaDsKKworICAgIEBKc29uUHJvcGVydHkoImZpbGVOYW1lIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZDmlofku7blkI0iLCBleGFtcGxlID0gIm1vdmllX3RvcnJlbnRfZmlsZS50b3JyZW50IikKKyAgICBwcml2YXRlIFN0cmluZyBmaWxlTmFtZTsKKworICAgIEBKc29uUHJvcGVydHkoInVwbG9hZGVyIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLkuIrkvKDogIUiLCBleGFtcGxlID0gInVzZXIxMjMiKQorICAgIHByaXZhdGUgU3RyaW5nIHVwbG9hZGVyOworCisgICAgQEpzb25Qcm9wZXJ0eSgiY3JlYXRlZFRpbWUiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS4iuS8oOaXtumXtCIsIGV4YW1wbGUgPSAiMjAyNC0wMS0wMSAxMjowMDowMCIpCisgICAgQFRhYmxlRmllbGQoZmlsbCA9IEZpZWxkRmlsbC5JTlNFUlQpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZVRpbWU7CisKKyAgICBASnNvblByb3BlcnR5KCJ1cGRhdGVUaW1lIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmm7TmlrDml7bpl7QiLCBleGFtcGxlID0gIjIwMjQtMDEtMDEgMTI6MDA6MDAiKQorCisgICAgQFRhYmxlRmllbGQoZmlsbCA9IEZpZWxkRmlsbC5JTlNFUlRfVVBEQVRFKQorICAgIHByaXZhdGUgTG9jYWxEYXRlVGltZSB1cGRhdGVUaW1lOworCisgICAgQEpzb25Qcm9wZXJ0eSgic2l6ZSIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi56eN5a2Q5paH5Lu25aSn5bCPIiwgZXhhbXBsZSA9ICIxMjM0NTYiKQorICAgIHByaXZhdGUgTG9uZyBzaXplOworCisgICAgQEpzb25Qcm9wZXJ0eSgidGl0bGUiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOagh+mimCIsIGV4YW1wbGUgPSAi44CK5pif6ZmF56m/6LaK44CLIikKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKworICAgIEBKc29uUHJvcGVydHkoImRlc2NyaXB0aW9uIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZDmj4/ov7AiLCBleGFtcGxlID0gIui/meaYr+S4gOmDqOWlveeci+eahOenkeW5u+eUteW9sSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CisKKyAgICBASnNvblByb3BlcnR5KCJ0YWdzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZDmoIfnrb4iLCBleGFtcGxlID0gIltcIuenkeW5u1wiLFwi5Yqo5L2cXCJdIikKKyAgICBwcml2YXRlIFN0cmluZyB0YWdzOworCisgICAgQEpzb25Qcm9wZXJ0eSgiY2F0ZWdvcnkiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOWIhuexuyIsIGV4YW1wbGUgPSAibW92aWUiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworCisgICAgQEpzb25Qcm9wZXJ0eSgiaW1hZ2VVcmwiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOWwgemdouWbvlVSTCIsIGV4YW1wbGUgPSAiaHR0cDovL2V4YW1wbGUuY29tL2ltYWdlcy9jb3Zlci5qcGciKQorICAgIHByaXZhdGUgU3RyaW5nIGltYWdlVXJsOworCisgICAgQEpzb25Qcm9wZXJ0eSgibGVlY2hlcnMiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS4i+i9veasoeaVsCIsIGV4YW1wbGUgPSAiMTIzIikKKyAgICBwcml2YXRlIEludGVnZXIgbGVlY2hlcnM7CisKKyAgICBASnNvblByb3BlcnR5KCJzZWVkZXJzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLlgZrnp43mlbAiLCBleGFtcGxlID0gIjEwIikKKyAgICBwcml2YXRlIEludGVnZXIgc2VlZGVyczsKKworICAgIEBKc29uUHJvcGVydHkoImNvbW1lbnRzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLor4TorrrmlbAiLCBleGFtcGxlID0gIjUiKQorICAgIHByaXZhdGUgSW50ZWdlciBjb21tZW50czsKKworICAgIEBKc29uUHJvcGVydHkoInZpZXdzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmtY/op4jmrKHmlbAiLCBleGFtcGxlID0gIjEwMDAiKQorICAgIHByaXZhdGUgSW50ZWdlciB2aWV3czsKKworICAgIEBKc29uUHJvcGVydHkoImhpdHMiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIueCueWHu+asoeaVsCIsIGV4YW1wbGUgPSAiMjAwMCIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGhpdHM7CisKKyAgICBASnNvblByb3BlcnR5KCJwcm9tb3Rpb25UaW1lVHlwZSIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5L+D6ZSA5pe26Ze057G75Z6LIiwgZXhhbXBsZSA9ICIxIikKKyAgICBwcml2YXRlIEludGVnZXIgcHJvbW90aW9uVGltZVR5cGU7CisKKyAgICBASnNvblByb3BlcnR5KCJwcm9tb3Rpb25VbnRpbCIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5L+D6ZSA5oiq5q2i5pel5pyfIiwgZXhhbXBsZSA9ICIyMDI0LTEyLTMxVDIzOjU5OjU5IikKKyAgICBwcml2YXRlIExvY2FsRGF0ZVRpbWUgcHJvbW90aW9uVW50aWw7CisKKyAgICAKKyAgICBASnNvblByb3BlcnR5KCJ0b3JyZW50RmlsZSIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi56eN5a2Q5paH5Lu2IiwgZXhhbXBsZSA9ICJiYXNlNjQgZW5jb2RlZCB0b3JyZW50IGZpbGUiKQorICAgIHByaXZhdGUgYnl0ZVtdIHRvcnJlbnRGaWxlOworCisgICAgQEpzb25Qcm9wZXJ0eSgiaXNEZWxldGVkIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmmK/lkKbliKDpmaQiLCBleGFtcGxlID0gImZhbHNlIikKKyAgICBwcml2YXRlIEJvb2xlYW4gaXNEZWxldGVkOworCisgICAgcHVibGljIFRvcnJlbnRFbnRpdHkoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NzRlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKKworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmFubm90YXRpb24uSWRUeXBlOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLlRhYmxlSWQ7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmFubm90YXRpb24uVGFibGVOYW1lOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25Qcm9wZXJ0eTsKK2ltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaU1vZGVsOworaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpTW9kZWxQcm9wZXJ0eTsKK2ltcG9ydCBsb21ib2suRGF0YTsKKworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworCitARGF0YQorQFRhYmxlTmFtZSgidXNlciIpIC8vIOaMh+WumuaVsOaNruW6k+ihqOWQjQorQEFwaU1vZGVsKCLnlKjmiLflrp7kvZPnsbsiKSAvLyDnlKjkuo7mj4/ov7DmqKHlnosKK3B1YmxpYyBjbGFzcyBVc2VyIHsKKworICAgIEBUYWJsZUlkKHR5cGUgPSBJZFR5cGUuQVVUTykgLy8g5oyH5a6a5Li76ZSu562W55WlCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi55So5oi3SUQiLCBleGFtcGxlID0gIjEiKQorICAgIHByaXZhdGUgTG9uZyBpZDsKKworICAgIEBKc29uUHJvcGVydHkoInVzZXJuYW1lIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnlKjmiLflkI0iLCBleGFtcGxlID0gIjIyMzAxMTE1IikKKyAgICBwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKKworICAgIEBKc29uUHJvcGVydHkoIm5pY2tuYW1lIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmmLXnp7AiLCBleGFtcGxlID0gImN5bCIpCisgICAgcHJpdmF0ZSBTdHJpbmcgbmlja25hbWU7CisKKyAgICBASnNvblByb3BlcnR5KCJyb2xlIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLop5LoibIiLCBleGFtcGxlID0gIlN0dWRlbnQiKQorICAgIHByaXZhdGUgU3RyaW5nIHJvbGU7CisKKyAgICBASnNvblByb3BlcnR5KCJwYXNzd29yZCIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5a+G56CBIiwgZXhhbXBsZSA9ICIxMjMiKQorICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOworCisgICAgQEpzb25Qcm9wZXJ0eSgic3RhdHVzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnlKjmiLfnirbmgIEiLCBleGFtcGxlID0gIjEiKQorICAgIHByaXZhdGUgaW50IHN0YXR1czsKKworICAgIEBKc29uUHJvcGVydHkoImVtYWlsIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnlLXlrZDpgq7ku7blnLDlnYAiLCBleGFtcGxlID0gImpvaG5fZG9lQGV4YW1wbGUuY29tIikKKyAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKKworICAgIEBKc29uUHJvcGVydHkoImVtYWlsX3ZlcmlmaWVkIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLpgq7nrrHpqozor4HnirbmgIEiLCBleGFtcGxlID0gInRydWUiKQorICAgIHByaXZhdGUgYm9vbGVhbiBlbWFpbFZlcmlmaWVkOworCisgICAgQEpzb25Qcm9wZXJ0eSgiYXZhdGFyIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLlpLTlg48iKQorICAgIHByaXZhdGUgU3RyaW5nIGF2YXRhcjsKKworICAgIEBKc29uUHJvcGVydHkoInVwbG9hZGVkIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLkuIrkvKDph48iLCBleGFtcGxlID0gIjEwMDAiKQorICAgIHByaXZhdGUgTG9uZyB1cGxvYWRlZDsKKworICAgIEBKc29uUHJvcGVydHkoImRvd25sb2FkZWQiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS4i+i9vemHjyIsIGV4YW1wbGUgPSAiNTAwIikKKyAgICBwcml2YXRlIExvbmcgZG93bmxvYWRlZDsKKworICAgIEBKc29uUHJvcGVydHkoImNyZWF0ZV90aW1lIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLliJvlu7rml7bpl7QiLCBleGFtcGxlID0gIjIwMjQtMDQtMDFUMTI6MDA6MDAiKQorICAgIHByaXZhdGUgTG9jYWxEYXRlVGltZSBjcmVhdGVUaW1lOworCisgICAgQEpzb25Qcm9wZXJ0eSgidXBkYXRlX3RpbWUiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuabtOaWsOaXtumXtCIsIGV4YW1wbGUgPSAiMjAyNC0wNC0wMVQxMjowMDowMCIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIHVwZGF0ZVRpbWU7CisKKyAgICBASnNvblByb3BlcnR5KCJpc19kZWxldGVkIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmmK/lkKbliKDpmaQiLCBleGFtcGxlID0gImZhbHNlIikKKyAgICBwcml2YXRlIEJvb2xlYW4gaXNEZWxldGVkOworCisgICAgcHVibGljIFVzZXIoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEZXRhaWxzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckRldGFpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWYzNWYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEZXRhaWxzLmphdmEKQEAgLTAsMCArMSwyMyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkdyYW50ZWRBdXRob3JpdHk7CisKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworcHVibGljIGludGVyZmFjZSBVc2VyRGV0YWlscyBleHRlbmRzIFNlcmlhbGl6YWJsZSB7CisgICAgQ29sbGVjdGlvbjw/IGV4dGVuZHMgR3JhbnRlZEF1dGhvcml0eT4gZ2V0QXV0aG9yaXRpZXMoKTsKKworICAgIFN0cmluZyBnZXRQYXNzd29yZCgpOworCisgICAgU3RyaW5nIGdldFVzZXJuYW1lKCk7CisKKyAgICBib29sZWFuIGlzQWNjb3VudE5vbkV4cGlyZWQoKTsKKworICAgIGJvb2xlYW4gaXNBY2NvdW50Tm9uTG9ja2VkKCk7CisKKyAgICBib29sZWFuIGlzQ3JlZGVudGlhbHNOb25FeHBpcmVkKCk7CisKKyAgICBib29sZWFuIGlzRW5hYmxlZCgpOworfQorCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckR5bmFtaWMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDRkM2FjLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gInVzZXJfZHluYW1pYyIpCi1wdWJsaWMgY2xhc3MgVXNlckR5bmFtaWMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gImR5bmFtaWNfaWQiKQotICAgIHByaXZhdGUgTG9uZyBkeW5hbWljSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsgIC8vIOWPkeW4g+WKqOaAgeeahOeUqOaIt0lECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAidGl0bGUiKQotICAgIHByaXZhdGUgU3RyaW5nIHRpdGxlOyAgLy8g5Yqo5oCB5qCH6aKYCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29udGVudCIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsgIC8vIOWKqOaAgeWGheWuuQotCi0gICAgQENvbHVtbihuYW1lID0gImltYWdlX3VybCIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgaW1hZ2VVcmw7ICAvLyDlm77niYdVUkwKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ0aW1lIikKLSAgICBwcml2YXRlIERhdGUgdGltZTsgIC8vIOWPkeW4g+WKqOaAgeeahOaXtumXtAotCi0gICAgQENvbHVtbihuYW1lID0gImxpa2VzX2NvdW50IikKLSAgICBwcml2YXRlIGludCBsaWtlc0NvdW50ID0gMDsgIC8vIOeCuei1nuaVsAotCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRzX2NvdW50IikKLSAgICBwcml2YXRlIGludCBjb21tZW50c0NvdW50ID0gMDsgIC8vIOivhOiuuuaVsAotCi0KLSAgICBwdWJsaWMgTG9uZyBnZXREeW5hbWljSWQoKSB7Ci0gICAgICAgIHJldHVybiBkeW5hbWljSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RHluYW1pY0lkKExvbmcgZHluYW1pY0lkKSB7Ci0gICAgICAgIHRoaXMuZHluYW1pY0lkID0gZHluYW1pY0lkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKLSAgICAgICAgcmV0dXJuIHRpdGxlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgewotICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgewotICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7Ci0gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbWFnZVVybCgpIHsKLSAgICAgICAgcmV0dXJuIGltYWdlVXJsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEltYWdlVXJsKFN0cmluZyBpbWFnZVVybCkgewotICAgICAgICB0aGlzLmltYWdlVXJsID0gaW1hZ2VVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0VGltZSgpIHsKLSAgICAgICAgcmV0dXJuIHRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGltZShEYXRlIHRpbWUpIHsKLSAgICAgICAgdGhpcy50aW1lID0gdGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldExpa2VzQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBsaWtlc0NvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExpa2VzQ291bnQoaW50IGxpa2VzQ291bnQpIHsKLSAgICAgICAgdGhpcy5saWtlc0NvdW50ID0gbGlrZXNDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldENvbW1lbnRzQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBjb21tZW50c0NvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRzQ291bnQoaW50IGNvbW1lbnRzQ291bnQpIHsKLSAgICAgICAgdGhpcy5jb21tZW50c0NvdW50ID0gY29tbWVudHNDb3VudDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJGb2xsb3cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjMTRmNy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiZm9sbG93IikKLXB1YmxpYyBjbGFzcyBVc2VyRm9sbG93IHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWNvcmRfaWQiKQotICAgIHByaXZhdGUgTG9uZyByZWNvcmRJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJmb2xsb3dlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGZvbGxvd2VySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZm9sbG93ZWRfaWQiKQotICAgIHByaXZhdGUgTG9uZyBmb2xsb3dlZElkOwotCi0gICAgQENvbHVtbihuYW1lID0gImZvbGxvd190aW1lIikKLSAgICBwcml2YXRlIERhdGUgZm9sbG93VGltZTsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRJZCgpIHsKLSAgICAgICAgcmV0dXJuIHJlY29yZElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElkKExvbmcgcmVjb3JkSWQpIHsKLSAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHJlY29yZElkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldEZvbGxvd2VySWQoKSB7Ci0gICAgICAgIHJldHVybiBmb2xsb3dlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZvbGxvd2VySWQoTG9uZyBmb2xsb3dlcklkKSB7Ci0gICAgICAgIHRoaXMuZm9sbG93ZXJJZCA9IGZvbGxvd2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0Rm9sbG93ZWRJZCgpIHsKLSAgICAgICAgcmV0dXJuIGZvbGxvd2VkSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Rm9sbG93ZWRJZChMb25nIGZvbGxvd2VkSWQpIHsKLSAgICAgICAgdGhpcy5mb2xsb3dlZElkID0gZm9sbG93ZWRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRGb2xsb3dUaW1lKCkgewotICAgICAgICByZXR1cm4gZm9sbG93VGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGb2xsb3dUaW1lKERhdGUgZm9sbG93VGltZSkgewotICAgICAgICB0aGlzLmZvbGxvd1RpbWUgPSBmb2xsb3dUaW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VySW52aXRlQ29kZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNDNjN2UuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJ1c2VyX2ludml0ZV9jb2RlIikKLXB1YmxpYyBjbGFzcyBVc2VySW52aXRlQ29kZSB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiaW52aXRlX2lkIikKLSAgICBwcml2YXRlIExvbmcgaW52aXRlSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJpbnZpdGVfY29kZSIsIG51bGxhYmxlID0gZmFsc2UsIHVuaXF1ZSA9IHRydWUpCi0gICAgcHJpdmF0ZSBTdHJpbmcgaW52aXRlQ29kZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJpc191c2VkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEJvb2xlYW4gaXNVc2VkID0gZmFsc2U7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3JlYXRlZF9hdCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZWRBdDsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRJbnZpdGVJZCgpIHsKLSAgICAgICAgcmV0dXJuIGludml0ZUlkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEludml0ZUlkKExvbmcgaW52aXRlSWQpIHsKLSAgICAgICAgdGhpcy5pbnZpdGVJZCA9IGludml0ZUlkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbnZpdGVDb2RlKCkgewotICAgICAgICByZXR1cm4gaW52aXRlQ29kZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbnZpdGVDb2RlKFN0cmluZyBpbnZpdGVDb2RlKSB7Ci0gICAgICAgIHRoaXMuaW52aXRlQ29kZSA9IGludml0ZUNvZGU7Ci0gICAgfQotCi0gICAgcHVibGljIEJvb2xlYW4gZ2V0SXNVc2VkKCkgewotICAgICAgICByZXR1cm4gaXNVc2VkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElzVXNlZChCb29sZWFuIGlzVXNlZCkgewotICAgICAgICB0aGlzLmlzVXNlZCA9IGlzVXNlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9jYWxEYXRlVGltZSBnZXRDcmVhdGVkQXQoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVkQXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlZEF0KExvY2FsRGF0ZVRpbWUgY3JlYXRlZEF0KSB7Ci0gICAgICAgIHRoaXMuY3JlYXRlZEF0ID0gY3JlYXRlZEF0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyTWVzc2FnZXMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU3ZTQzZS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJ1c2VyX21lc3NhZ2VzIikKLXB1YmxpYyBjbGFzcyBVc2VyTWVzc2FnZXMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gIm1lc3NhZ2VfaWQiKQotICAgIHByaXZhdGUgTG9uZyBtZXNzYWdlSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAic2VuZGVyX2lkIikKLSAgICBwcml2YXRlIExvbmcgc2VuZGVySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmVjZWl2ZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyByZWNlaXZlcklkOwotCi0gICAgQENvbHVtbihuYW1lID0gImNvbnRlbnQiKQotICAgIHByaXZhdGUgU3RyaW5nIGNvbnRlbnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidGltZSIpCi0gICAgcHJpdmF0ZSBEYXRlIHRpbWU7Ci0KLQotICAgIHB1YmxpYyBMb25nIGdldE1lc3NhZ2VJZCgpIHsKLSAgICAgICAgcmV0dXJuIG1lc3NhZ2VJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlSWQoTG9uZyBtZXNzYWdlSWQpIHsKLSAgICAgICAgdGhpcy5tZXNzYWdlSWQgPSBtZXNzYWdlSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0U2VuZGVySWQoKSB7Ci0gICAgICAgIHJldHVybiBzZW5kZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZW5kZXJJZChMb25nIHNlbmRlcklkKSB7Ci0gICAgICAgIHRoaXMuc2VuZGVySWQgPSBzZW5kZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRSZWNlaXZlcklkKCkgewotICAgICAgICByZXR1cm4gcmVjZWl2ZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZWNlaXZlcklkKExvbmcgcmVjZWl2ZXJJZCkgewotICAgICAgICB0aGlzLnJlY2VpdmVySWQgPSByZWNlaXZlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgY29udGVudCkgewotICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldFRpbWUoKSB7Ci0gICAgICAgIHJldHVybiB0aW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRpbWUoRGF0ZSB0aW1lKSB7Ci0gICAgICAgIHRoaXMudGltZSA9IHRpbWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJUYXNrU3RhdHVzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2ODM5ZC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gInVzZXJfdGFza19zdGF0dXMiKQotcHVibGljIGNsYXNzIFVzZXJUYXNrU3RhdHVzIHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJzdGF0dXNfaWQiKQotICAgIHByaXZhdGUgTG9uZyBzdGF0dXNJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIExvbmcgdXNlcklkOwotCi0gICAgQENvbHVtbihuYW1lID0gInRhc2tfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIHRhc2tJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjdXJyZW50X3Byb2dyZXNzIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEZsb2F0IGN1cnJlbnRQcm9ncmVzczsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjdXJyZW50X2V4cGVyaWVuY2UiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgSW50ZWdlciBjdXJyZW50RXhwZXJpZW5jZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjdXJyZW50X3BvaW50cyIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIGN1cnJlbnRQb2ludHM7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAic3RhdHVzIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIFN0cmluZyBzdGF0dXM7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaXNfcmV3YXJkX2NsYWltZWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgQm9vbGVhbiBpc1Jld2FyZENsYWltZWQgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBMb25nIGdldFN0YXR1c0lkKCkgewotICAgICAgICByZXR1cm4gc3RhdHVzSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U3RhdHVzSWQoTG9uZyBzdGF0dXNJZCkgewotICAgICAgICB0aGlzLnN0YXR1c0lkID0gc3RhdHVzSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhc2tJZCgpIHsKLSAgICAgICAgcmV0dXJuIHRhc2tJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUYXNrSWQoU3RyaW5nIHRhc2tJZCkgewotICAgICAgICB0aGlzLnRhc2tJZCA9IHRhc2tJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0Q3VycmVudFByb2dyZXNzKCkgewotICAgICAgICByZXR1cm4gY3VycmVudFByb2dyZXNzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRQcm9ncmVzcyhGbG9hdCBjdXJyZW50UHJvZ3Jlc3MpIHsKLSAgICAgICAgdGhpcy5jdXJyZW50UHJvZ3Jlc3MgPSBjdXJyZW50UHJvZ3Jlc3M7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RXhwZXJpZW5jZShJbnRlZ2VyIGN1cnJlbnRFeHBlcmllbmNlKSB7Ci0gICAgICAgIHRoaXMuY3VycmVudEV4cGVyaWVuY2UgPSBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50UG9pbnRzKCkgewotICAgICAgICByZXR1cm4gY3VycmVudFBvaW50czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50UG9pbnRzKEludGVnZXIgY3VycmVudFBvaW50cykgewotICAgICAgICB0aGlzLmN1cnJlbnRQb2ludHMgPSBjdXJyZW50UG9pbnRzOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCkgewotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFN0YXR1cyhTdHJpbmcgc3RhdHVzKSB7Ci0gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwotICAgIH0KLQotICAgIHB1YmxpYyBCb29sZWFuIGdldElzUmV3YXJkQ2xhaW1lZCgpIHsKLSAgICAgICAgcmV0dXJuIGlzUmV3YXJkQ2xhaW1lZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc1Jld2FyZENsYWltZWQoQm9vbGVhbiBpc1Jld2FyZENsYWltZWQpIHsKLSAgICAgICAgdGhpcy5pc1Jld2FyZENsYWltZWQgPSBpc1Jld2FyZENsYWltZWQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJlNzkzZi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJ1c2VyIikKLXB1YmxpYyBjbGFzcyBVc2VycyB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VybmFtZSIsIG51bGxhYmxlID0gZmFsc2UsdW5pcXVlID0gdHJ1ZSkKLSAgICBwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJhdmF0YXJfdXJsIiwgbnVsbGFibGUgPSB0cnVlKQotICAgIHByaXZhdGUgU3RyaW5nIGF2YXRhclVybDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJlbWFpbCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBTdHJpbmcgZW1haWw7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicGFzc3dvcmQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwotCi0gICAgQENvbHVtbihuYW1lID0gInJvbGUiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIHJvbGU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaW52aXRlX2NvdW50IikKLSAgICBwcml2YXRlIEludGVnZXIgaW52aXRlQ291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAibGV2ZWwiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgTG9uZyBsZXZlbDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1cGxvYWRfY291bnQiKQotICAgIHByaXZhdGUgRmxvYXQgdXBsb2FkQ291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZG93bmxvYWRfY291bnQiKQotICAgIHByaXZhdGUgRmxvYXQgZG93bmxvYWRDb3VudDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJzaGFyZV9yYXRlIikKLSAgICBwcml2YXRlIEZsb2F0IHNoYXJlUmF0ZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWdpc3RyYXRpb25fZGF0ZSIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBEYXRlIHJlZ2lzdHJhdGlvbkRhdGU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAibGFzdF9sb2dpbl90aW1lIikKLSAgICBwcml2YXRlIERhdGUgbGFzdExvZ2luVGltZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX3BvaW50cyIpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIHVzZXJQb2ludHM7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaXNfcHJvbW8iKQotICAgIHByaXZhdGUgQm9vbGVhbiBpc1Byb21vOwotCi0gICAgQENvbHVtbihuYW1lID0gImN1cnJlbnRfZXhwZXJpZW5jZSIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIGN1cnJlbnRFeHBlcmllbmNlOyAgLy8g5b2T5YmN57uP6aqM5YC8Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3VycmVudF9zZWVkaW5nX2hvdXJzIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEZsb2F0IGN1cnJlbnRTZWVkaW5nSG91cnM7ICAvLyDlvZPliY3lgZrnp43ml7bplb8KLQotCi0gICAgQENvbHVtbihuYW1lID0gImdlbmRlciIsIG51bGxhYmxlID0gdHJ1ZSkKLSAgICBwcml2YXRlIFN0cmluZyBnZW5kZXI7ICAvLyDmgKfliKsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJkZXNjcmlwdGlvbiIsIG51bGxhYmxlID0gdHJ1ZSkKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsgIC8vIOS4quS6uuaPj+i/sAotCi0gICAgQENvbHVtbihuYW1lID0gImhvYmJpZXMiLCBudWxsYWJsZSA9IHRydWUpCi0gICAgcHJpdmF0ZSBTdHJpbmcgaG9iYmllczsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWdpc3RyYXRpb25fdGltZSIsIG51bGxhYmxlID0gZmFsc2UsIHVwZGF0YWJsZSA9IGZhbHNlKQotICAgIEBUZW1wb3JhbChUZW1wb3JhbFR5cGUuVElNRVNUQU1QKQotICAgIHByaXZhdGUgRGF0ZSByZWdpc3RyYXRpb25UaW1lOwotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVc2VybmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSkgewotICAgICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBdmF0YXJVcmwoKSB7Ci0gICAgICAgIHJldHVybiBhdmF0YXJVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QXZhdGFyVXJsKFN0cmluZyBhdmF0YXJVcmwpIHsKLSAgICAgICAgdGhpcy5hdmF0YXJVcmwgPSBhdmF0YXJVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsKLSAgICAgICAgcmV0dXJuIGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkgewotICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKLSAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSb2xlKCkgewotICAgICAgICByZXR1cm4gcm9sZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSb2xlKFN0cmluZyByb2xlKSB7Ci0gICAgICAgIHRoaXMucm9sZSA9IHJvbGU7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0SW52aXRlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBpbnZpdGVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbnZpdGVDb3VudChJbnRlZ2VyIGludml0ZUNvdW50KSB7Ci0gICAgICAgIHRoaXMuaW52aXRlQ291bnQgPSBpbnZpdGVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRMZXZlbCgpIHsKLSAgICAgICAgcmV0dXJuIGxldmVsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExldmVsKExvbmcgbGV2ZWwpIHsKLSAgICAgICAgdGhpcy5sZXZlbCA9IGxldmVsOwotICAgIH0KLQotICAgIHB1YmxpYyBGbG9hdCBnZXRVcGxvYWRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIHVwbG9hZENvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVwbG9hZENvdW50KEZsb2F0IHVwbG9hZENvdW50KSB7Ci0gICAgICAgIHRoaXMudXBsb2FkQ291bnQgPSB1cGxvYWRDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0RG93bmxvYWRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkQ291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RG93bmxvYWRDb3VudChGbG9hdCBkb3dubG9hZENvdW50KSB7Ci0gICAgICAgIHRoaXMuZG93bmxvYWRDb3VudCA9IGRvd25sb2FkQ291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIEZsb2F0IGdldFNoYXJlUmF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIHNoYXJlUmF0ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTaGFyZVJhdGUoRmxvYXQgc2hhcmVSYXRlKSB7Ci0gICAgICAgIHRoaXMuc2hhcmVSYXRlID0gc2hhcmVSYXRlOwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldFJlZ2lzdHJhdGlvbkRhdGUoKSB7Ci0gICAgICAgIHJldHVybiByZWdpc3RyYXRpb25EYXRlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlZ2lzdHJhdGlvbkRhdGUoRGF0ZSByZWdpc3RyYXRpb25EYXRlKSB7Ci0gICAgICAgIHRoaXMucmVnaXN0cmF0aW9uRGF0ZSA9IHJlZ2lzdHJhdGlvbkRhdGU7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0TGFzdExvZ2luVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGxhc3RMb2dpblRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdExvZ2luVGltZShEYXRlIGxhc3RMb2dpblRpbWUpIHsKLSAgICAgICAgdGhpcy5sYXN0TG9naW5UaW1lID0gbGFzdExvZ2luVGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRVc2VyUG9pbnRzKCkgewotICAgICAgICByZXR1cm4gdXNlclBvaW50czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VyUG9pbnRzKEludGVnZXIgdXNlclBvaW50cykgewotICAgICAgICB0aGlzLnVzZXJQb2ludHMgPSB1c2VyUG9pbnRzOwotICAgIH0KLQotICAgIHB1YmxpYyBCb29sZWFuIGdldElzUHJvbW8oKSB7Ci0gICAgICAgIHJldHVybiBpc1Byb21vOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElzUHJvbW8oQm9vbGVhbiBpc1Byb21vKSB7Ci0gICAgICAgIHRoaXMuaXNQcm9tbyA9IGlzUHJvbW87Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RXhwZXJpZW5jZShJbnRlZ2VyIGN1cnJlbnRFeHBlcmllbmNlKSB7Ci0gICAgICAgIHRoaXMuY3VycmVudEV4cGVyaWVuY2UgPSBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0Q3VycmVudFNlZWRpbmdIb3VycygpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWVkaW5nSG91cnM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q3VycmVudFNlZWRpbmdIb3VycyhGbG9hdCBjdXJyZW50U2VlZGluZ0hvdXJzKSB7Ci0gICAgICAgIHRoaXMuY3VycmVudFNlZWRpbmdIb3VycyA9IGN1cnJlbnRTZWVkaW5nSG91cnM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRHZW5kZXIoKSB7Ci0gICAgICAgIHJldHVybiBnZW5kZXI7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0R2VuZGVyKFN0cmluZyBnZW5kZXIpIHsKLSAgICAgICAgdGhpcy5nZW5kZXIgPSBnZW5kZXI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRIb2JiaWVzKCkgewotICAgICAgICByZXR1cm4gaG9iYmllczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRIb2JiaWVzKFN0cmluZyBob2JiaWVzKSB7Ci0gICAgICAgIHRoaXMuaG9iYmllcyA9IGhvYmJpZXM7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0UmVnaXN0cmF0aW9uVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvblRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVnaXN0cmF0aW9uVGltZShEYXRlIHJlZ2lzdHJhdGlvblRpbWUpIHsKLSAgICAgICAgdGhpcy5yZWdpc3RyYXRpb25UaW1lID0gcmVnaXN0cmF0aW9uVGltZTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9WZXJpZmljYXRpb25Ub2tlbi5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1ZlcmlmaWNhdGlvblRva2VuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxZmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9WZXJpZmljYXRpb25Ub2tlbi5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKKworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLio7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlNb2RlbDsKK2ltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaU1vZGVsUHJvcGVydHk7CitpbXBvcnQgbG9tYm9rLkRhdGE7CitpbXBvcnQgbG9tYm9rLk5vQXJnc0NvbnN0cnVjdG9yOworaW1wb3J0IGxvbWJvay5BbGxBcmdzQ29uc3RydWN0b3I7CisKK2ltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKKworQERhdGEKK0BOb0FyZ3NDb25zdHJ1Y3RvcgorQEFsbEFyZ3NDb25zdHJ1Y3RvcgorQFRhYmxlTmFtZSgidmVyaWZpY2F0aW9uX3Rva2VuIikKK0BBcGlNb2RlbCgi6aqM6K+B5Luk54mM5a6e5L2T57G7IikKK3B1YmxpYyBjbGFzcyBWZXJpZmljYXRpb25Ub2tlbiB7CisKKyAgICBAVGFibGVJZCh0eXBlID0gSWRUeXBlLkFVVE8pCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5Luk54mMSUQiKQorICAgIHByaXZhdGUgTG9uZyBpZDsKKworICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS7pOeJjOWtl+espuS4siIpCisgICAgQFRhYmxlRmllbGQoInRva2VuIikKKyAgICBwcml2YXRlIFN0cmluZyB0b2tlbjsKKworICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS7pOeJjOi/h+acn+aXpeacnyIpCisgICAgQFRhYmxlRmllbGQoImV4cGlyeV9kYXRlIikKKyAgICBwcml2YXRlIEluc3RhbnQgZXhwaXJ5RGF0ZTsKKworICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIueUqOaIt+WQjSIpCisgICAgQFRhYmxlRmllbGQoInVzZXJuYW1lIikKKyAgICBwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKKworICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIueUteWtkOmCruS7tuWcsOWdgCIpCisgICAgQFRhYmxlRmllbGQoImVtYWlsIikKKyAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKKworICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuWKoOWvhuWQjueahOWvhueggSIpCisgICAgQFRhYmxlRmllbGQoInBhc3N3b3JkIikKKyAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKKworICAgIHB1YmxpYyBWZXJpZmljYXRpb25Ub2tlbihTdHJpbmcgdG9rZW4sIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIGVtYWlsLCBTdHJpbmcgcGFzc3dvcmQsIEluc3RhbnQgZXhwaXJ5RGF0ZSkgeworICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47CisgICAgICAgIHRoaXMudXNlcm5hbWUgPSB1c2VybmFtZTsKKyAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsOworICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7CisgICAgICAgIHRoaXMuZXhwaXJ5RGF0ZSA9IGV4cGlyeURhdGU7CisgICAgfQorCisgICAgLyoqCisgICAgICog5qOA5p+l5Luk54mM5piv5ZCm6L+H5pyfCisgICAgICogQHJldHVybiB0cnVlIOWmguaenOS7pOeJjOW3sui/h+acnworICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzRXhwaXJlZCgpIHsKKyAgICAgICAgcmV0dXJuIGV4cGlyeURhdGUuaXNCZWZvcmUoSW5zdGFudC5ub3coKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvRmF2b3JpdGVNYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI4MTUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyOworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUubWFwcGVyLkJhc2VNYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5GYXZvcml0ZUVudGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy4qOworCitATWFwcGVyCitwdWJsaWMgaW50ZXJmYWNlIEZhdm9yaXRlTWFwcGVyIGV4dGVuZHMgQmFzZU1hcHBlcjxGYXZvcml0ZUVudGl0eT4geworCisgICBAU2VsZWN0KCJTRUxFQ1QgKiBGUk9NIGZhdm9yaXRlIFdIRVJFIHVzZXJfaWQgPSAje3VzZXJJZH0gQU5EIHNlZWRfaWQgPSAje3NlZWRJZH0gTElNSVQgMSIpCisgICAgRmF2b3JpdGVFbnRpdHkgc2VsZWN0QnlVc2VySWRBbmRTZWVkSWQoQFBhcmFtKCJ1c2VySWQiKSBMb25nIHVzZXJJZCwgQFBhcmFtKCJzZWVkSWQiKSBMb25nIHNlZWRJZCk7CisKKyAgICBARGVsZXRlKCJERUxFVEUgRlJPTSBmYXZvcml0ZSBXSEVSRSB1c2VyX2lkID0gI3t1c2VySWR9IEFORCBzZWVkX2lkID0gI3tzZWVkSWR9IikKKyAgICB2b2lkIGRlbGV0ZUJ5VXNlcklkQW5kU2VlZElkKEBQYXJhbSgidXNlcklkIikgTG9uZyB1c2VySWQsIEBQYXJhbSgic2VlZElkIikgTG9uZyBzZWVkSWQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Qcm9tb3Rpb25NYXBwZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Qcm9tb3Rpb25NYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDc4ODM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlcjsKKworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5jb3JlLm1hcHBlci5CYXNlTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUHJvbW90aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLk1hcHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5QYXJhbTsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5TZWxlY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuVXBkYXRlOworCitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BNYXBwZXIKK3B1YmxpYyBpbnRlcmZhY2UgUHJvbW90aW9uTWFwcGVyIGV4dGVuZHMgQmFzZU1hcHBlcjxQcm9tb3Rpb24+IHsKKworICAgIEBTZWxlY3QoIlNFTEVDVCAqIEZST00gcHJvbW90aW9uIFdIRVJFIGlzX2RlbGV0ZWQgPSBmYWxzZSAiICsKKyAgICAgICAgICAgICJBTkQgc3RhcnRfdGltZSA8PSAje25vd30gQU5EIGVuZF90aW1lID49ICN7bm93fSIpCisgICAgTGlzdDxQcm9tb3Rpb24+IGZpbmRBY3RpdmVQcm9tb3Rpb25zKEBQYXJhbSgibm93IikgTG9jYWxEYXRlVGltZSBub3cpOworCisgICAgLyoqCisgICAgICog5p+l5om+5p+Q5LiqdG9ycmVudElk5piv5ZCm5Zyo5L+D6ZSA5rS75Yqo55qEYXBwbGljYWJsZV90b3JyZW50X2lkc+Wtl+espuS4suS4rQorICAgICAqIOeUqE15U1FM55qERklORF9JTl9TRVTliKTmlq0KKyAgICAgKi8KKyAgICBAU2VsZWN0KCJTRUxFQ1QgcC4qIEZST00gcHJvbW90aW9uIHAgIiArCisgICAgICAgICAgICAiV0hFUkUgcC5pc19kZWxldGVkID0gZmFsc2UgIiArCisgICAgICAgICAgICAiQU5EIHAuc3RhcnRfdGltZSA8PSAje25vd30gQU5EIHAuZW5kX3RpbWUgPj0gI3tub3d9ICIgKworICAgICAgICAgICAgIkFORCBGSU5EX0lOX1NFVCgje3RvcnJlbnRJZH0sIHAuYXBwbGljYWJsZV90b3JyZW50X2lkcykgPiAwIikKKyAgICBMaXN0PFByb21vdGlvbj4gZmluZEFjdGl2ZVByb21vdGlvbnNGb3JUb3JyZW50KAorICAgICAgICAgICAgQFBhcmFtKCJ0b3JyZW50SWQiKSBMb25nIHRvcnJlbnRJZCwKKyAgICAgICAgICAgIEBQYXJhbSgibm93IikgTG9jYWxEYXRlVGltZSBub3cpOworCisgICAgLyoqCisgICAgICog5qCh6aqM56eN5a2QaWTmmK/lkKblrZjlnKjvvIzov5Tlm57orqHmlbDvvIww5Luj6KGo5LiN5a2Y5Zyo77yMPjDku6PooajlrZjlnKgKKyAgICAgKi8KKyAgICBAU2VsZWN0KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB0b3JyZW50IFdIRVJFIGlkID0gI3t0b3JyZW50SWR9IikKKyAgICBpbnQgY2hlY2tUb3JyZW50RXhpc3RzKEBQYXJhbSgidG9ycmVudElkIikgTG9uZyB0b3JyZW50SWQpOworCisgICAgLyoqCisgICAgICog5o+S5YWl5L+D6ZSA5rS75YqoCisgICAgICovCisvLyAgICBpbnQgaW5zZXJ0KFByb21vdGlvbiBwcm9tb3Rpb24pOworCisgICAgLyoqCisgICAgICog5qC55o2uSUTmm7TmlrDkv4PplIDmtLvliqjvvIjkvovlpoLova/liKDpmaTvvIkKKyAgICAgKi8KKyAgICBpbnQgdXBkYXRlQnlJZChQcm9tb3Rpb24gcHJvbW90aW9uKTsKKworICAgIC8qKgorICAgICAqIOagueaNrklE5p+l6K+i5L+D6ZSA5rS75YqoCisgICAgICovCisgICAgUHJvbW90aW9uIHNlbGVjdEJ5SWQoQFBhcmFtKCJpZCIpIExvbmcgaWQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Ub3JyZW50TWFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljZGNkYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Ub3JyZW50TWFwcGVyLmphdmEKQEAgLTAsMCArMSwzMiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyOworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUubWFwcGVyLkJhc2VNYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0by5wYXJhbS5Ub3JyZW50UGFyYW07CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5OworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLk1hcHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5QYXJhbTsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5TZWxlY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuVXBkYXRlOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BNYXBwZXIKK3B1YmxpYyBpbnRlcmZhY2UgVG9ycmVudE1hcHBlciBleHRlbmRzIEJhc2VNYXBwZXI8VG9ycmVudEVudGl0eT4geworCisgICAgQFNlbGVjdCgiU0VMRUNUICogRlJPTSB0b3JyZW50cyBXSEVSRSBpbmZvX2hhc2ggPSAje2luZm9IYXNofSIpCisgICAgVG9ycmVudEVudGl0eSBzZWxlY3RCeUluZm9IYXNoKFN0cmluZyBpbmZvSGFzaCk7CisgICAgCisgICAgQFNlbGVjdCgiU0VMRUNUICogRlJPTSB0b3JyZW50cyBXSEVSRSBzZWVkX2lkID0gI3tzZWVkSWR9IikKKyAgICBUb3JyZW50RW50aXR5IHNlbGVjdEJ5U2VlZElkKExvbmcgc2VlZElkKTsKKyAgICAKKyAgICBMaXN0PFRvcnJlbnRFbnRpdHk+IHNlYXJjaChAUGFyYW0oInBhcmFtIikgVG9ycmVudFBhcmFtIHBhcmFtKTsKKyAgICAKKyAgICBAVXBkYXRlKCJVUERBVEUgdG9ycmVudCBTRVQgZG93bmxvYWRzID0gZG93bmxvYWRzICsgMSBXSEVSRSBpZCA9ICN7dG9ycmVudElkfSIpCisgICAgdm9pZCBpbmNyZWFzZURvd25sb2FkcyhAUGFyYW0oInRvcnJlbnRJZCIpIExvbmcgdG9ycmVudElkKTsKKyAgICAKKyAgICBib29sZWFuIGNoZWNrRmF2b3JpdGUoQFBhcmFtKCJzZWVkSWQiKSBMb25nIHNlZWRJZCwgQFBhcmFtKCJ1c2VySWQiKSBMb25nIHVzZXJJZCk7CisgICAgCisgICAgdm9pZCBhZGRGYXZvcml0ZShAUGFyYW0oInNlZWRJZCIpIExvbmcgc2VlZElkLCBAUGFyYW0oInVzZXJJZCIpIExvbmcgdXNlcklkKTsKKyAgICAKKyAgICB2b2lkIHJlbW92ZUZhdm9yaXRlKEBQYXJhbSgic2VlZElkIikgTG9uZyBzZWVkSWQsIEBQYXJhbSgidXNlcklkIikgTG9uZyB1c2VySWQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjliNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXI7CisKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuY29yZS5tYXBwZXIuQmFzZU1hcHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5NYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuU2VsZWN0OworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLlVwZGF0ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEucmVwb3NpdG9yeS5xdWVyeS5QYXJhbTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitATWFwcGVyCitwdWJsaWMgaW50ZXJmYWNlIFVzZXJNYXBwZXIgZXh0ZW5kcyBCYXNlTWFwcGVyPFVzZXI+IHsKKworCisgICAgVXNlciBzZWxlY3RCeVVzZXJuYW1lKEBQYXJhbSgidXNlcm5hbWUiKSBTdHJpbmcgdXNlcm5hbWUpOworCisgICAgVXNlciBzZWxlY3RCeVVzZXJuYW1lQW5kUGFzc3dvcmQoQFBhcmFtKCJ1c2VybmFtZSIpIFN0cmluZyB1c2VybmFtZSwgQFBhcmFtKCJwYXNzd29yZCIpIFN0cmluZyBwYXNzd29yZCk7CisKKyAgICBVc2VyIHNlbGVjdEJ5RW1haWwoQFBhcmFtKCJlbWFpbCIpIFN0cmluZyBlbWFpbCk7CisKKworICAgIC8vIOagueaNrueUqOaIt+WQjeWMheWQq+afpeaJvueUqOaItworICAgIExpc3Q8VXNlcj4gc2VsZWN0QnlVc2VybmFtZUNvbnRhaW5pbmcoQFBhcmFtKCJuYW1lIikgU3RyaW5nIG5hbWUpOworCisgICAgQFVwZGF0ZSgiVVBEQVRFIHVzZXIgU0VUIGRvd25sb2FkZWQgPSBkb3dubG9hZGVkICsgI3tzaXplfSBXSEVSRSBpZCA9ICN7dXNlcklkfSIpCisgICAgdm9pZCBpbmNyZWFzZURvd25sb2FkZWQoQFBhcmFtKCJ1c2VySWQiKSBMb25nIHVzZXJJZCwgQFBhcmFtKCJzaXplIikgZG91YmxlIHNpemUpOworICAgIAorICAgIGJvb2xlYW4gaGFzUm9sZShAUGFyYW0oInVzZXJJZCIpIExvbmcgdXNlcklkLCBAUGFyYW0oInJvbGUiKSBTdHJpbmcgcm9sZSk7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9WZXJpZmljYXRpb25Ub2tlbk1hcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTI1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXI7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUubWFwcGVyLkJhc2VNYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5WZXJpZmljYXRpb25Ub2tlbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5NYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuU2VsZWN0OworCisKK0BNYXBwZXIKK3B1YmxpYyBpbnRlcmZhY2UgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgZXh0ZW5kcyBCYXNlTWFwcGVyPFZlcmlmaWNhdGlvblRva2VuPiB7CisKKyAgICBWZXJpZmljYXRpb25Ub2tlbiBmaW5kQnlUb2tlbkFuZEVtYWlsKFN0cmluZyB0b2tlbiwgU3RyaW5nIGVtYWlsKTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0NvbGxlY3Rpb25zUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDBmMjMzLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db2xsZWN0aW9uczsKLWltcG9ydCBqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uYWw7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5Lk1vZGlmeWluZzsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuUXVlcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotQFJlcG9zaXRvcnkKLXB1YmxpYyBpbnRlcmZhY2UgQ29sbGVjdGlvbnNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxDb2xsZWN0aW9ucywgTG9uZz4gewotICAgIEBNb2RpZnlpbmcKLSAgICBAVHJhbnNhY3Rpb25hbAotICAgIEBRdWVyeSgiREVMRVRFIEZST00gQ29sbGVjdGlvbnMgbCBXSEVSRSBsLnVzZXJJZCA9IDp1c2VySWQgQU5EIGwucG9zdE5vID0gOnBvc3RObyIpCi0gICAgdm9pZCBkZWxldGVMaWtlQnlVc2VySWRBbmRQb3N0Tm8oTG9uZyB1c2VySWQsIExvbmcgcG9zdE5vKTsKLSAgICBMaXN0PENvbGxlY3Rpb25zPiBmaW5kQnlVc2VySWQoTG9uZyB1c2VySWQpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjY2MzA5Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29tbWVudFJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuQ29tbWVudHM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLQotcHVibGljIGludGVyZmFjZSBDb21tZW50UmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8Q29tbWVudHMsIExvbmc+IHsKLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODZiMWQuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkR5bmFtaWNDb21tZW50OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxEeW5hbWljQ29tbWVudCwgTG9uZz4gewotCi0gICAgTGlzdDxEeW5hbWljQ29tbWVudD4gZmluZEJ5RHluYW1pY0lkKExvbmcgZHluYW1pY0lkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0xpa2VzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZWMwMDMuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5EeW5hbWljTGlrZXM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGludGVyZmFjZSBEeW5hbWljTGlrZXNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxEeW5hbWljTGlrZXMsIExvbmc+IHsKLQotICAgIExpc3Q8RHluYW1pY0xpa2VzPiBmaW5kQnlEeW5hbWljSWQoTG9uZyBkeW5hbWljSWQpOwotICAgIER5bmFtaWNMaWtlcyBmaW5kQnlVc2VySWRBbmREeW5hbWljSWQoTG9uZyB1c2VySWQsIExvbmcgZHluYW1pY0lkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0V4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjkyOGU1Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkV4cGVyaWVuY2VIaXN0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotCi1wdWJsaWMgaW50ZXJmYWNlIEV4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8RXhwZXJpZW5jZUhpc3RvcnksIExvbmc+IHsKLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9GcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmY2Y5NGUuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9GcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkZyaWVuZFJlbGF0aW9uOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxGcmllbmRSZWxhdGlvbiwgTG9uZz4gewotICAgIC8vIOafpeaJvuW9k+WJjeeUqOaIt+eahOaJgOacieWlveWPi0lECi0gICAgTGlzdDxGcmllbmRSZWxhdGlvbj4gZmluZEJ5VXNlcklkKExvbmcgdXNlcklkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdkZjE5OC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwQ29tbWVudHNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cENvbW1lbnRzOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5SZXBvc2l0b3J5OwotCi1AUmVwb3NpdG9yeQotcHVibGljIGludGVyZmFjZSBHcm91cENvbW1lbnRzUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8R3JvdXBDb21tZW50cywgTG9uZz4gewotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwTWVtYmVyc1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDMxNDYyLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuR3JvdXBNZW1iZXJzOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5SZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIEdyb3VwTWVtYmVyc1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PEdyb3VwTWVtYmVycywgTG9uZz4gewotCi0gICAgLy8g5qOA5p+l55So5oi35piv5ZCm5bey57uP5piv6K+l5bCP57uE55qE5oiQ5ZGYCi0gICAgYm9vbGVhbiBleGlzdHNCeUdyb3VwSWRBbmRVc2VySWQoTG9uZyBncm91cElkLCBMb25nIHVzZXJJZCk7Ci0KLSAgICAvLyDliKDpmaTnlKjmiLflkozlsI/nu4TnmoTlhbPogZTorrDlvZUKLSAgICB2b2lkIGRlbGV0ZUJ5R3JvdXBJZEFuZFVzZXJJZChMb25nIGdyb3VwSWQsIExvbmcgdXNlcklkKTsKLQotICAgIC8vIOmAmui/hyBncm91cElkIOiOt+WPluaJgOacieaIkOWRmOeahCB1c2VySWQKLSAgICBMaXN0PEdyb3VwTWVtYmVycz4gZmluZEJ5R3JvdXBJZChMb25nIGdyb3VwSWQpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFBvc3RSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1YTM0OC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwUG9zdDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1AUmVwb3NpdG9yeQotcHVibGljIGludGVyZmFjZSBHcm91cFBvc3RSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxHcm91cFBvc3QsIExvbmc+IHsKLQotICAgIExpc3Q8R3JvdXBQb3N0PiBmaW5kQnlHcm91cElkKExvbmcgZ3JvdXBJZCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjgwZTUwLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmRvbWFpbi5QYWdlYWJsZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuUXVlcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLnJlcG9zaXRvcnkucXVlcnkuUGFyYW07Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIEdyb3VwUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8R3JvdXAsIExvbmc+IHsKLQotICAgIC8vIOaooeeziuaQnOe0ouWwj+e7hOWQjeensOW5tuaMieexu+WIq+etm+mAiQotICAgIEBRdWVyeSgiU0VMRUNUIGcgRlJPTSBHcm91cCBnIFdIRVJFIGcuZ3JvdXBOYW1lIExJS0UgJTpuYW1lJSBBTkQgKDpjYXRlZ29yeSBJUyBOVUxMIE9SIGcuY2F0ZWdvcnkgPSA6Y2F0ZWdvcnkpIikKLSAgICBQYWdlPEdyb3VwPiBzZWFyY2hHcm91cHMoQFBhcmFtKCJuYW1lIikgU3RyaW5nIG5hbWUsIEBQYXJhbSgiY2F0ZWdvcnkiKSBTdHJpbmcgY2F0ZWdvcnksIFBhZ2VhYmxlIHBhZ2VhYmxlKTsKLQotICAgIC8vIOagueaNruexu+WIq+etm+mAieWwj+e7hAotICAgIEBRdWVyeSgiU0VMRUNUIGcgRlJPTSBHcm91cCBnIFdIRVJFICg6Y2F0ZWdvcnkgSVMgTlVMTCBPUiBnLmNhdGVnb3J5ID0gOmNhdGVnb3J5KSIpCi0gICAgUGFnZTxHcm91cD4gc2VhcmNoV2l0aEZpbHRlcnMoQFBhcmFtKCJjYXRlZ29yeSIpIFN0cmluZyBjYXRlZ29yeSwgUGFnZWFibGUgcGFnZWFibGUpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MZXZlbFJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGV2ZWxSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZTgyNjkuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MZXZlbFJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkxldmVsOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5SZXBvc2l0b3J5OwotCi1AUmVwb3NpdG9yeQotcHVibGljIGludGVyZmFjZSBMZXZlbFJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PExldmVsLCBMb25nPiB7Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGlrZXNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xpa2VzUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTE0NmM1Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGlrZXNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MaWtlczsKLWltcG9ydCBqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uYWw7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5Lk1vZGlmeWluZzsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuUXVlcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIExpa2VzUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8TGlrZXMsIExvbmc+IHsKLSAgICBATW9kaWZ5aW5nCi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICBAUXVlcnkoIkRFTEVURSBGUk9NIExpa2VzIGwgV0hFUkUgbC51c2VySWQgPSA6dXNlcklkIEFORCBsLnBvc3RObyA9IDpwb3N0Tm8iKQotICAgIHZvaWQgZGVsZXRlTGlrZUJ5VXNlcklkQW5kUG9zdE5vKExvbmcgdXNlcklkLCBMb25nIHBvc3RObyk7Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZjJjYjcuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Qb3N0UmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUG9zdDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLQotcHVibGljIGludGVyZmFjZSBQb3N0UmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8UG9zdCwgTG9uZz4gewotICAgIC8vIOagueaNriBwb3N0Tm8g5p+l5om+5biW5a2QCi0gICAgT3B0aW9uYWw8UG9zdD4gZmluZEJ5UG9zdE5vKExvbmcgcG9zdE5vKTsKLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9TZWVkQ29tbWVudExpa2VzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9TZWVkQ29tbWVudExpa2VzUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzNkMWJmLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvU2VlZENvbW1lbnRMaWtlc1JlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlNlZWRDb21tZW50TGlrZXM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgU2VlZENvbW1lbnRMaWtlc1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFNlZWRDb21tZW50TGlrZXMsIExvbmc+IHsKLQotICAgIC8vIOagueaNruivhOiuuklE5ZKM55So5oi3SUTmn6Xmib7ngrnotZ7orrDlvZUKLSAgICBPcHRpb25hbDxTZWVkQ29tbWVudExpa2VzPiBmaW5kQnlDb21tZW50SWRBbmRVc2VySWQoTG9uZyBjb21tZW50SWQsIExvbmcgdXNlcklkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvU2VlZENvbW1lbnRSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1NlZWRDb21tZW50UmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODc4MWNmLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvU2VlZENvbW1lbnRSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5TZWVkQ29tbWVudDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1AUmVwb3NpdG9yeQotcHVibGljIGludGVyZmFjZSBTZWVkQ29tbWVudFJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFNlZWRDb21tZW50LCBMb25nPiB7Ci0KLSAgICAvLyDmoLnmja7np43lrZBJROiOt+WPluaJgOacieivhOiuugotICAgIExpc3Q8U2VlZENvbW1lbnQ+IGZpbmRCeVNlZWRJZChpbnQgc2VlZElkKTsKLQotICAgIC8vIOagueaNrueItuivhOiuuklE6I635Y+W5omA5pyJ5Zue5aSNCi0gICAgTGlzdDxTZWVkQ29tbWVudD4gZmluZEJ5Q29tQ29tbWVudElkKGxvbmcgcGFyZW50Q29tbWVudElkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVGFza1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVGFza1JlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVlMWI2Ni4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Rhc2tSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRhc2s7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVGFza1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFRhc2ssIFN0cmluZz4gewotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRHluYW1pY1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NWFlMWYuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRHluYW1pY1JlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJEeW5hbWljOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5SZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIFVzZXJEeW5hbWljUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8VXNlckR5bmFtaWMsIExvbmc+IHsKLQotICAgIExpc3Q8VXNlckR5bmFtaWM+IGZpbmRCeVVzZXJJZChMb25nIHVzZXJJZCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckZvbGxvd1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckZvbGxvd1JlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyZDA3Zi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyRm9sbG93OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5SZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIFVzZXJGb2xsb3dSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxVc2VyRm9sbG93LCBMb25nPiB7Ci0KLSAgICAvLyDmn6Xor6LmmK/lkKblrZjlnKjmn5DkuKrnlKjmiLfnmoTlhbPms6jorrDlvZUKLSAgICBVc2VyRm9sbG93IGZpbmRCeUZvbGxvd2VySWRBbmRGb2xsb3dlZElkKExvbmcgZm9sbG93ZXJJZCwgTG9uZyBmb2xsb3dlZElkKTsKLSAgICBMaXN0PFVzZXJGb2xsb3c+IGZpbmRCeUZvbGxvd2VkSWQoTG9uZyBmb2xsb3dlZElkKTsKLSAgICBMaXN0PFVzZXJGb2xsb3c+IGZpbmRCeUZvbGxvd2VySWQoTG9uZyBmb2xsb3dlcklkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmZhMzkwLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VySW52aXRlQ29kZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLQotcHVibGljIGludGVyZmFjZSBVc2VySW52aXRlQ29kZVJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJJbnZpdGVDb2RlLCBMb25nPiB7Ci0KLSAgICAvLyDmn6Xmib7mn5DkuKrnlKjmiLfnmoTmiYDmnInpgoDor7fnoIEKLSAgICBMaXN0PFVzZXJJbnZpdGVDb2RlPiBmaW5kQnlVc2VySWQoTG9uZyB1c2VySWQpOwotCi0gICAgLy8g5p+l5om+5p+Q5Liq6YKA6K+356CB5piv5ZCm5bey57uP6KKr5L2/55SoCi0gICAgT3B0aW9uYWw8VXNlckludml0ZUNvZGU+IGZpbmRCeUludml0ZUNvZGUoU3RyaW5nIGludml0ZUNvZGUpOwotCi0gICAgLy8g5p+l5om+5p+Q5Liq55So5oi35pyq5L2/55So55qE6YKA6K+356CBCi0gICAgTGlzdDxVc2VySW52aXRlQ29kZT4gZmluZEJ5VXNlcklkQW5kSXNVc2VkRmFsc2UoTG9uZyB1c2VySWQpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFkMzcxNS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJNZXNzYWdlczsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1AUmVwb3NpdG9yeQotcHVibGljIGludGVyZmFjZSBVc2VyTWVzc2FnZXNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxVc2VyTWVzc2FnZXMsIExvbmc+IHsKLQotICAgIC8vIOafpeivouW9k+WJjeeUqOaIt+eahOaJgOaciea2iOaBrwotICAgIExpc3Q8VXNlck1lc3NhZ2VzPiBmaW5kQnlTZW5kZXJJZE9yUmVjZWl2ZXJJZChMb25nIHNlbmRlcklkLCBMb25nIHJlY2VpdmVySWQpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTI3YzVmLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLQotcHVibGljIGludGVyZmFjZSBVc2VyUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8VXNlcnMsIExvbmc+IHsKLSAgICBPcHRpb25hbDxVc2Vycz4gZmluZEJ5RW1haWwoU3RyaW5nIGVtYWlsKTsKLSAgICBPcHRpb25hbDxVc2Vycz4gZmluZEJ5VXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTUzOTQ2Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyVGFza1N0YXR1czsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLQotcHVibGljIGludGVyZmFjZSBVc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJUYXNrU3RhdHVzLCBMb25nPiB7Ci0gICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IGZpbmRCeVVzZXJJZEFuZFRhc2tJZChMb25nIHVzZXJJZCwgU3RyaW5nIHRhc2tJZCk7Ci0gICAgTGlzdDxVc2VyVGFza1N0YXR1cz4gZmluZEJ5VXNlcklkQW5kU3RhdHVzKExvbmcgdXNlcklkLCBTdHJpbmcgc3RhdHVzKTsKLSAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gZmluZEZpcnN0QnlVc2VySWRBbmRTdGF0dXMoTG9uZyB1c2VySWQsIFN0cmluZyBzdGF0dXMpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Db21tZW50U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Db21tZW50U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTAyY2EyLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db21tZW50czsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlBvc3Q7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Db21tZW50UmVwb3NpdG9yeTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Qb3N0UmVwb3NpdG9yeTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwotCi1AU2VydmljZQotcHVibGljIGNsYXNzIENvbW1lbnRTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIENvbW1lbnRSZXBvc2l0b3J5IGNvbW1lbnRSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgUG9zdFJlcG9zaXRvcnkgcG9zdFJlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKLQotICAgIC8vIOa3u+WKoOivhOiuugotICAgIHB1YmxpYyB2b2lkIGFkZENvbW1lbnQoTG9uZyBwb3N0SWQsIENvbW1lbnRzIGNvbW1lbnQpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIOafpeaJvuW4luWtkAotICAgICAgICAgICAgUG9zdCBwb3N0ID0gcG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKS5vckVsc2VUaHJvdygoKSAtPiB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgd2l0aCBJRCAiICsgcG9zdElkICsgIiBub3QgZm91bmQiKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAvLyDmn6Xmib7nlKjmiLcKLSAgICAgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChjb21tZW50LmdldFVzZXJJZCgpKS5vckVsc2VUaHJvdygoKSAtPiB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgd2l0aCBJRCAiICsgY29tbWVudC5nZXRVc2VySWQoKSArICIgbm90IGZvdW5kIik7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgLy8g6K6+572u6K+E6K6655qE55u45YWz5bGe5oCnCi0gICAgICAgICAgICBjb21tZW50LnNldFBvc3QocG9zdCk7Ci0gICAgICAgICAgICBjb21tZW50LnNldFVzZXJJZCh1c2VyLmdldFVzZXJJZCgpKTsKLSAgICAgICAgICAgIGNvbW1lbnQuc2V0Q29tbWVudFRpbWUobmV3IGphdmEudXRpbC5EYXRlKCkpOwotCi0gICAgICAgICAgICBpZiAoY29tbWVudC5nZXRQYXJlbnRDb21tZW50KCkgIT0gbnVsbCAmJiBjb21tZW50LmdldFBhcmVudENvbW1lbnQoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8g5p+l5om+54i26K+E6K66Ci0gICAgICAgICAgICAgICAgQ29tbWVudHMgcGFyZW50Q29tbWVudCA9IGNvbW1lbnRSZXBvc2l0b3J5LmZpbmRCeUlkKGNvbW1lbnQuZ2V0UGFyZW50Q29tbWVudCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQYXJlbnQgY29tbWVudCB3aXRoIElEICIgKyBjb21tZW50LmdldFBhcmVudENvbW1lbnQoKSArICIgbm90IGZvdW5kIikpOwotICAgICAgICAgICAgICAgIGNvbW1lbnQuc2V0UGFyZW50Q29tbWVudChwYXJlbnRDb21tZW50LmdldENvbW1lbnRJZCgpKTsgIC8vIOiuvue9rueItuivhOiuuiBJRAotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb21tZW50LnNldFBhcmVudENvbW1lbnQoMEwpOyAgLy8g6K6+572u5Li6IDDvvIzooajnpLrmsqHmnInniLbor4TorroKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g5L+d5a2Y6K+E6K66Ci0gICAgICAgICAgICBjb21tZW50UmVwb3NpdG9yeS5zYXZlKGNvbW1lbnQpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8g5o2V6I635Lu75L2V5byC5bi45bm25omT5Y2w5aCG5qCI5L+h5oGvCi0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGFkZGluZyB0aGUgY29tbWVudDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIOiOt+WPluaMh+WumuW4luWtkOeahOaJgOacieivhOiuugotICAgIHB1YmxpYyBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldENvbW1lbnRzQnlQb3N0SWQoTG9uZyBwb3N0SWQpIHsKLSAgICAgICAgTGlzdDxDb21tZW50cz4gY29tbWVudHMgPSBjb21tZW50UmVwb3NpdG9yeS5maW5kQWxsKCkKLSAgICAgICAgICAgICAgICAuc3RyZWFtKCkKLSAgICAgICAgICAgICAgICAuZmlsdGVyKGNvbW1lbnQgLT4gY29tbWVudC5nZXRQb3N0KCkuZ2V0UG9zdE5vKCkuZXF1YWxzKHBvc3RJZCkpICAvLyDpgJrov4cgcG9zdCDnmoQgcG9zdE5vIOi/h+a7pOivhOiuugotICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwotCi0gICAgICAgIGlmIChjb21tZW50cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZvciAoQ29tbWVudHMgY29tbWVudCA6IGNvbW1lbnRzKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbW1lbnREYXRhID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJjb21tZW50SWQiLCBjb21tZW50LmdldENvbW1lbnRJZCgpKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgicG9zdF9pZCIsIGNvbW1lbnQuZ2V0UG9zdCgpLmdldFBvc3RObygpKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidXNlcklkIiwgY29tbWVudC5nZXRVc2VySWQoKSk7Ci0KLSAgICAgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChjb21tZW50LmdldFVzZXJJZCgpKS5vckVsc2UobnVsbCk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoIm5pY2tuYW1lIiwgdXNlciAhPSBudWxsID8gdXNlci5nZXRVc2VybmFtZSgpIDogbnVsbCk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImF2YXRhcl91cmwiLCB1c2VyICE9IG51bGwgPyB1c2VyLmdldEF2YXRhclVybCgpIDogbnVsbCk7Ci0KLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgiY29udGVudCIsIGNvbW1lbnQuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgiaXNBbm9ueW1vdXMiLCBjb21tZW50LmdldElzQW5vbnltb3VzKCkpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJsaWtlc0NvdW50IiwgY29tbWVudC5nZXRMaWtlc0NvdW50KCkpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJyZXBseUNvdW50IiwgY29tbWVudC5nZXRSZXBseUNvdW50KCkpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJjb21tZW50VGltZSIsIGNvbW1lbnQuZ2V0Q29tbWVudFRpbWUoKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInBhcmVudENvbW1lbnQiLCBjb21tZW50LmdldFBhcmVudENvbW1lbnQoKSk7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyZW50Q29tbWVudERhdGEgPSBnZXRQYXJlbnRDb21tZW50RGF0YShjb21tZW50LmdldFBhcmVudENvbW1lbnQoKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInBhcmVudENvbW1lbnREYXRhIiwgcGFyZW50Q29tbWVudERhdGEpOwotCi0gICAgICAgICAgICByZXN1bHQuYWRkKGNvbW1lbnREYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8g6YCS5b2S5p+l5om+54i26K+E6K6655qE5YaF5a65Ci0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFBhcmVudENvbW1lbnREYXRhKExvbmcgcGFyZW50Q29tbWVudElkKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyZW50Q29tbWVudERhdGEgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIGlmIChwYXJlbnRDb21tZW50SWQgIT0gbnVsbCAmJiBwYXJlbnRDb21tZW50SWQgIT0gMCkgewotICAgICAgICAgICAgLy8g5p+l5om+54i26K+E6K66Ci0gICAgICAgICAgICBDb21tZW50cyBwYXJlbnRDb21tZW50ID0gY29tbWVudFJlcG9zaXRvcnkuZmluZEJ5SWQocGFyZW50Q29tbWVudElkKS5vckVsc2UobnVsbCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50Q29tbWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcGFyZW50Q29tbWVudERhdGEucHV0KCJjb21tZW50SWQiLCBwYXJlbnRDb21tZW50LmdldENvbW1lbnRJZCgpKTsKLSAgICAgICAgICAgICAgICBwYXJlbnRDb21tZW50RGF0YS5wdXQoImNvbnRlbnQiLCBwYXJlbnRDb21tZW50LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgICAgICAgcGFyZW50Q29tbWVudERhdGEucHV0KCJ1c2VySWQiLCBwYXJlbnRDb21tZW50LmdldFVzZXJJZCgpKTsKLQotICAgICAgICAgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChwYXJlbnRDb21tZW50LmdldFVzZXJJZCgpKS5vckVsc2UobnVsbCk7Ci0gICAgICAgICAgICAgICAgcGFyZW50Q29tbWVudERhdGEucHV0KCJuaWNrbmFtZSIsIHVzZXIgIT0gbnVsbCA/IHVzZXIuZ2V0VXNlcm5hbWUoKSA6IG51bGwpOwotICAgICAgICAgICAgICAgIHBhcmVudENvbW1lbnREYXRhLnB1dCgiYXZhdGFyX3VybCIsIHVzZXIgIT0gbnVsbCA/IHVzZXIuZ2V0QXZhdGFyVXJsKCkgOiBudWxsKTsKLQotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZ3JhbmRQYXJlbnREYXRhID0gZ2V0UGFyZW50Q29tbWVudERhdGEocGFyZW50Q29tbWVudC5nZXRQYXJlbnRDb21tZW50KCkpOwotICAgICAgICAgICAgICAgIHBhcmVudENvbW1lbnREYXRhLnB1dCgicGFyZW50Q29tbWVudERhdGEiLCBncmFuZFBhcmVudERhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJlbnRDb21tZW50RGF0YTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0R5bmFtaWNTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0R5bmFtaWNTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MzYwNGQuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9EeW5hbWljU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lio7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOwotaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLUBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgRHluYW1pY1NlcnZpY2UgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlckR5bmFtaWNSZXBvc2l0b3J5IHVzZXJEeW5hbWljUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5IGR5bmFtaWNDb21tZW50UmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIER5bmFtaWNMaWtlc1JlcG9zaXRvcnkgZHluYW1pY0xpa2VzUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeSBmcmllbmRSZWxhdGlvblJlcG9zaXRvcnk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1BR0VfRElSID0gInVwbG9hZHMvcG9zdC8iOwotCi0gICAgLy8g5Yib5bu65aW95Y+L5Yqo5oCBCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY3JlYXRlRHluYW1pYyhMb25nIHVzZXJJZCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgY29udGVudCwgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgLy8g5p+l5om+55So5oi35L+h5oGvCi0gICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpCi0gICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVc2VyIG5vdCBmb3VuZCIpKTsKLQotICAgICAgICAvLyDliJvlu7rmlrDnmoTliqjmgIEKLSAgICAgICAgVXNlckR5bmFtaWMgdXNlckR5bmFtaWMgPSBuZXcgVXNlckR5bmFtaWMoKTsKLSAgICAgICAgdXNlckR5bmFtaWMuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIHVzZXJEeW5hbWljLnNldFRpdGxlKHRpdGxlICE9IG51bGwgPyB0aXRsZSA6ICLpu5jorqTmoIfpopgiKTsKLSAgICAgICAgdXNlckR5bmFtaWMuc2V0Q29udGVudChjb250ZW50KTsKLSAgICAgICAgdXNlckR5bmFtaWMuc2V0VGltZShuZXcgRGF0ZSgpKTsKLSAgICAgICAgdXNlckR5bmFtaWMuc2V0TGlrZXNDb3VudCgwKTsKLSAgICAgICAgdXNlckR5bmFtaWMuc2V0Q29tbWVudHNDb3VudCgwKTsKLQotICAgICAgICAvLyDlpITnkIblm77niYfkuIrkvKAKLSAgICAgICAgU3RyaW5nQnVpbGRlciBpbWFnZVVybHNCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgaWYgKGltYWdlRmlsZXMgIT0gbnVsbCAmJiBpbWFnZUZpbGVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1hZ2VGaWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VVcmwgPSBzYXZlSW1hZ2UoaW1hZ2VGaWxlc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVXJsc0J1aWxkZXIuYXBwZW5kKGltYWdlVXJsKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbWFnZSB1cGxvYWQgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIOWwhuWkmuS4quWbvueJhyBVUkwg5ou85o6lCi0gICAgICAgIHVzZXJEeW5hbWljLnNldEltYWdlVXJsKGltYWdlVXJsc0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgLy8g5L+d5a2Y5pWw5o2u5bqTCi0gICAgICAgIFVzZXJEeW5hbWljIHNhdmVkVXNlckR5bmFtaWMgPSB1c2VyRHluYW1pY1JlcG9zaXRvcnkuc2F2ZSh1c2VyRHluYW1pYyk7Ci0KLSAgICAgICAgLy8g6L+U5Zue57uT5p6cCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgiZHluYW1pY0lkIiwgc2F2ZWRVc2VyRHluYW1pYy5nZXREeW5hbWljSWQoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLliqjmgIHliJvlu7rmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8vIOS/neWtmOWbvueJh+W5tui/lOWbnuWbvueJh+eahCBVUkwKLSAgICBwdWJsaWMgU3RyaW5nIHNhdmVJbWFnZShNdWx0aXBhcnRGaWxlIGltYWdlRmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gaW1hZ2VGaWxlLmdldE9yaWdpbmFsRmlsZW5hbWUoKTsKLSAgICAgICAgUGF0aCBwYXRoID0gUGF0aHMuZ2V0KElNQUdFX0RJUiArIGZpbGVOYW1lKTsKLSAgICAgICAgRmlsZXMuY3JlYXRlRGlyZWN0b3JpZXMocGF0aC5nZXRQYXJlbnQoKSk7Ci0gICAgICAgIEZpbGVzLndyaXRlKHBhdGgsIGltYWdlRmlsZS5nZXRCeXRlcygpKTsKLSAgICAgICAgcmV0dXJuICIvaW1hZ2VzLyIgKyBmaWxlTmFtZTsKLSAgICB9Ci0KLSAgICAvLyDliKDpmaTliqjmgIEKLSAgICBwdWJsaWMgdm9pZCBkZWxldGVEeW5hbWljKExvbmcgZHluYW1pY0lkKSB7Ci0gICAgICAgIGlmICh1c2VyRHluYW1pY1JlcG9zaXRvcnkuZXhpc3RzQnlJZChkeW5hbWljSWQpKSB7Ci0gICAgICAgICAgICB1c2VyRHluYW1pY1JlcG9zaXRvcnkuZGVsZXRlQnlJZChkeW5hbWljSWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkR5bmFtaWMgd2l0aCBpZCAiICsgZHluYW1pY0lkICsgIiBub3QgZm91bmQiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v5aW95Y+L5Yqo5oCB6K+E6K66Ci0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gYWRkQ29tbWVudChMb25nIHVzZXJJZCwgTG9uZyBkeW5hbWljSWQsIFN0cmluZyBjb21tZW50Q29udGVudCkgewotICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKQotICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciBub3QgZm91bmQiKSk7Ci0KLSAgICAgICAgVXNlckR5bmFtaWMgZHluYW1pYyA9IHVzZXJEeW5hbWljUmVwb3NpdG9yeS5maW5kQnlJZChkeW5hbWljSWQpCi0gICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEeW5hbWljIG5vdCBmb3VuZCIpKTsKLQotICAgICAgICBEeW5hbWljQ29tbWVudCBjb21tZW50ID0gbmV3IER5bmFtaWNDb21tZW50KCk7Ci0gICAgICAgIGNvbW1lbnQuc2V0RHluYW1pY0lkKGR5bmFtaWNJZCk7Ci0gICAgICAgIGNvbW1lbnQuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGNvbW1lbnQuc2V0Q29tbWVudENvbnRlbnQoY29tbWVudENvbnRlbnQpOwotICAgICAgICBjb21tZW50LnNldENvbW1lbnRUaW1lKG5ldyBEYXRlKCkpOwotCi0gICAgICAgIC8vIOS/neWtmOivhOiuugotICAgICAgICBEeW5hbWljQ29tbWVudCBzYXZlZENvbW1lbnQgPSBkeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuc2F2ZShjb21tZW50KTsKLQotICAgICAgICAvLyDov5Tlm57miJDlip/mtojmga8KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJjb21tZW50X2lkIiwgc2F2ZWRDb21tZW50LmdldENvbW1lbnRJZCgpKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuivhOiuuuaIkOWKnyIpOwotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy/ov5Tlm57mn5DkuKrlpb3lj4vnmoTmiYDmnInliqjmgIEKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxVc2VyRHluYW1pY3MoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g5p+l5om+55So5oi355qE5omA5pyJ5Yqo5oCBCi0gICAgICAgIExpc3Q8VXNlckR5bmFtaWM+IHVzZXJEeW5hbWljcyA9IHVzZXJEeW5hbWljUmVwb3NpdG9yeS5maW5kQnlVc2VySWQodXNlcklkKTsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwb3N0RGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBkeW5hbWljTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIC8vIOmBjeWOhuWKqOaAge+8jOiOt+WPlueCuei1nuWSjOivhOiuugotICAgICAgICBmb3IgKFVzZXJEeW5hbWljIGR5bmFtaWMgOiB1c2VyRHluYW1pY3MpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZHluYW1pY0RhdGEgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImR5bmFtaWNfaWQiLCBkeW5hbWljLmdldER5bmFtaWNJZCgpKTsKLSAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgidXNlcl9pZCIsIGR5bmFtaWMuZ2V0VXNlcklkKCkpOwotCi0gICAgICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQoZHluYW1pYy5nZXRVc2VySWQoKSkub3JFbHNlKG51bGwpOwotICAgICAgICAgICAgaWYgKHVzZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgidXNlcm5hbWUiLCB1c2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgiYXZhdGFyX3VybCIsIHVzZXIuZ2V0QXZhdGFyVXJsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInVzZXJuYW1lIiwgIlVua25vd24iKTsKLSAgICAgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImF2YXRhcl91cmwiLCAiaHR0cDovL2V4YW1wbGUuY29tL2RlZmF1bHQtYXZhdGFyLmpwZyIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInRpdGxlIiwgZHluYW1pYy5nZXRUaXRsZSgpKTsKLSAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgiY29udGVudCIsIGR5bmFtaWMuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgiaW1hZ2VzIiwgZHluYW1pYy5nZXRJbWFnZVVybCgpKTsKLSAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgidGltZSIsIGR5bmFtaWMuZ2V0VGltZSgpKTsKLQotICAgICAgICAgICAgLy8g6I635Y+W54K56LWeCi0gICAgICAgICAgICBMaXN0PER5bmFtaWNMaWtlcz4gbGlrZXMgPSBkeW5hbWljTGlrZXNSZXBvc2l0b3J5LmZpbmRCeUR5bmFtaWNJZChkeW5hbWljLmdldER5bmFtaWNJZCgpKTsKLSAgICAgICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gbGlrZUxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgIGZvciAoRHluYW1pY0xpa2VzIGxpa2UgOiBsaWtlcykgewotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbGlrZURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICAgICAgbGlrZURhdGEucHV0KCJ1c2VyX2lkIiwgbGlrZS5nZXRVc2VySWQoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyDojrflj5bngrnotZ7nlKjmiLfnmoTnlKjmiLflkI0KLSAgICAgICAgICAgICAgICBVc2VycyBsaWtlVXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGxpa2UuZ2V0VXNlcklkKCkpLm9yRWxzZShudWxsKTsKLSAgICAgICAgICAgICAgICBpZiAobGlrZVVzZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBsaWtlRGF0YS5wdXQoInVzZXJuYW1lIiwgbGlrZVVzZXIuZ2V0VXNlcm5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbGlrZURhdGEucHV0KCJ1c2VybmFtZSIsICJVbmtub3duIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbGlrZUxpc3QuYWRkKGxpa2VEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgibGlrZXMiLCBsaWtlTGlzdCk7Ci0KLSAgICAgICAgICAgIC8vIOiOt+WPluivhOiuugotICAgICAgICAgICAgTGlzdDxEeW5hbWljQ29tbWVudD4gY29tbWVudHMgPSBkeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuZmluZEJ5RHluYW1pY0lkKGR5bmFtaWMuZ2V0RHluYW1pY0lkKCkpOwotICAgICAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBjb21tZW50TGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgZm9yIChEeW5hbWljQ29tbWVudCBjb21tZW50IDogY29tbWVudHMpIHsKLSAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbW1lbnREYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgiY29tbWVudF9pZCIsIGNvbW1lbnQuZ2V0Q29tbWVudElkKCkpOwotICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidXNlcl9pZCIsIGNvbW1lbnQuZ2V0VXNlcklkKCkpOwotCi0gICAgICAgICAgICAgICAgLy8g6I635Y+W6K+E6K6655So5oi355qE55So5oi35ZCNCi0gICAgICAgICAgICAgICAgVXNlcnMgY29tbWVudFVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChjb21tZW50LmdldFVzZXJJZCgpKS5vckVsc2UobnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRVc2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJ1c2VybmFtZSIsIGNvbW1lbnRVc2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidXNlcm5hbWUiLCAiVW5rbm93biIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgiY29udGVudCIsIGNvbW1lbnQuZ2V0Q29tbWVudENvbnRlbnQoKSk7Ci0gICAgICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJ0aW1lIiwgY29tbWVudC5nZXRDb21tZW50VGltZSgpKTsKLSAgICAgICAgICAgICAgICBjb21tZW50TGlzdC5hZGQoY29tbWVudERhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJjb21tZW50cyIsIGNvbW1lbnRMaXN0KTsKLQotICAgICAgICAgICAgZHluYW1pY0xpc3QuYWRkKGR5bmFtaWNEYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgiZHluYW1pYyIsIGR5bmFtaWNMaXN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8v6I635Y+W5b2T5YmN5omA5pyJ5aW95Y+L55qEaWQKLSAgICBwdWJsaWMgTGlzdDxMb25nPiBnZXRBbGxGcmllbmRJZHMoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgTGlzdDxGcmllbmRSZWxhdGlvbj4gZnJpZW5kUmVsYXRpb25zID0gZnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmZpbmRCeVVzZXJJZCh1c2VySWQpOwotICAgICAgICBMaXN0PExvbmc+IGZyaWVuZElkcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIGZvciAoRnJpZW5kUmVsYXRpb24gcmVsYXRpb24gOiBmcmllbmRSZWxhdGlvbnMpIHsKLSAgICAgICAgICAgIC8vIOa3u+WKoOWlveWPi0lECi0gICAgICAgICAgICBpZiAoIWZyaWVuZElkcy5jb250YWlucyhyZWxhdGlvbi5nZXRGcmllbmRJZCgpKSkgewotICAgICAgICAgICAgICAgIGZyaWVuZElkcy5hZGQocmVsYXRpb24uZ2V0RnJpZW5kSWQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZnJpZW5kSWRzOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3MoTGlzdDxMb25nPiB1c2VySWRzKSB7Ci0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gYWxsRHluYW1pY3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICAvLyDpgY3ljobmiYDmnInnlKjmiLfojrflj5bku5bku6znmoTliqjmgIEKLSAgICAgICAgZm9yIChMb25nIHVzZXJJZCA6IHVzZXJJZHMpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gdXNlckR5bmFtaWNzID0gZ2V0QWxsVXNlckR5bmFtaWNzKHVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAodXNlckR5bmFtaWNzICE9IG51bGwgJiYgIXVzZXJEeW5hbWljcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBhbGxEeW5hbWljcy5hZGRBbGwoKExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4pIHVzZXJEeW5hbWljcy5nZXQoImR5bmFtaWMiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDov5Tlm57miYDmnInliqjmgIHnmoTlkIjpm4YKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJkeW5hbWljIiwgYWxsRHluYW1pY3MpOwotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy/ngrnotZ7liqjmgIEKLSAgICBwdWJsaWMgYm9vbGVhbiBsaWtlRHluYW1pYyhMb25nIHVzZXJJZCwgTG9uZyBkeW5hbWljSWQpIHsKLSAgICAgICAgLy8g5qOA5p+l6K+l55So5oi35piv5ZCm5bey57uP54K56LWe6L+H6K+l5Yqo5oCBCi0gICAgICAgIER5bmFtaWNMaWtlcyBleGlzdGluZ0xpa2UgPSBkeW5hbWljTGlrZXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZER5bmFtaWNJZCh1c2VySWQsIGR5bmFtaWNJZCk7Ci0gICAgICAgIGlmIChleGlzdGluZ0xpa2UgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5paw5aKe54K56LWe6K6w5b2VCi0gICAgICAgIER5bmFtaWNMaWtlcyBuZXdMaWtlID0gbmV3IER5bmFtaWNMaWtlcygpOwotICAgICAgICBuZXdMaWtlLnNldFVzZXJJZCh1c2VySWQpOwotICAgICAgICBuZXdMaWtlLnNldER5bmFtaWNJZChkeW5hbWljSWQpOwotICAgICAgICBuZXdMaWtlLnNldExpa2VUaW1lKG5ldyBqYXZhLnV0aWwuRGF0ZSgpKTsKLSAgICAgICAgZHluYW1pY0xpa2VzUmVwb3NpdG9yeS5zYXZlKG5ld0xpa2UpOwotCi0gICAgICAgIC8vIOabtOaWsOWKqOaAgeihqOeahOeCuei1nuaVsAotICAgICAgICBVc2VyRHluYW1pYyBkeW5hbWljID0gdXNlckR5bmFtaWNSZXBvc2l0b3J5LmZpbmRCeUlkKGR5bmFtaWNJZCkub3JFbHNlKG51bGwpOwotICAgICAgICBpZiAoZHluYW1pYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkeW5hbWljLnNldExpa2VzQ291bnQoZHluYW1pYy5nZXRMaWtlc0NvdW50KCkgKyAxKTsKLSAgICAgICAgICAgIHVzZXJEeW5hbWljUmVwb3NpdG9yeS5zYXZlKGR5bmFtaWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy/lj5bmtojngrnotZ4KLSAgICBwdWJsaWMgYm9vbGVhbiB1bmxpa2VEeW5hbWljKExvbmcgdXNlcklkLCBMb25nIGR5bmFtaWNJZCkgewotICAgICAgICAvLyDmn6Xmib7or6XnlKjmiLfnmoTngrnotZ7orrDlvZUKLSAgICAgICAgRHluYW1pY0xpa2VzIGV4aXN0aW5nTGlrZSA9IGR5bmFtaWNMaWtlc1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkQW5kRHluYW1pY0lkKHVzZXJJZCwgZHluYW1pY0lkKTsKLSAgICAgICAgaWYgKGV4aXN0aW5nTGlrZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDliKDpmaTngrnotZ7orrDlvZUKLSAgICAgICAgZHluYW1pY0xpa2VzUmVwb3NpdG9yeS5kZWxldGUoZXhpc3RpbmdMaWtlKTsKLQotICAgICAgICAvLyDmm7TmlrDliqjmgIHooajnmoTngrnotZ7mlbAKLSAgICAgICAgVXNlckR5bmFtaWMgZHluYW1pYyA9IHVzZXJEeW5hbWljUmVwb3NpdG9yeS5maW5kQnlJZChkeW5hbWljSWQpLm9yRWxzZShudWxsKTsKLSAgICAgICAgaWYgKGR5bmFtaWMgIT0gbnVsbCkgewotICAgICAgICAgICAgZHluYW1pYy5zZXRMaWtlc0NvdW50KGR5bmFtaWMuZ2V0TGlrZXNDb3VudCgpIC0gMSk7Ci0gICAgICAgICAgICB1c2VyRHluYW1pY1JlcG9zaXRvcnkuc2F2ZShkeW5hbWljKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9FbWFpbFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRW1haWxTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjYzhjNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRW1haWxTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyMCBAQAorCitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOworcHVibGljIGludGVyZmFjZSBFbWFpbFNlcnZpY2UgeworICAgIC8qKgorICAgICAqIOWPkemAgemCruS7tue7meaMh+WumueahOmCrueuseOAggorICAgICAqCisgICAgICogQHBhcmFtIHRvIOaUtuS7tuS6uumCrueuseWcsOWdgAorICAgICAqIEBwYXJhbSBzdWJqZWN0IOmCruS7tuS4u+mimAorICAgICAqIEBwYXJhbSB0ZXh0IOmCruS7tuWGheWuuQorICAgICAqIEByZXR1cm4g5Y+R6YCB5piv5ZCm5oiQ5YqfCisgICAgICovCisgICAgYm9vbGVhbiBzZW5kRW1haWwoU3RyaW5nIHRvLCBTdHJpbmcgc3ViamVjdCwgU3RyaW5nIHRleHQpOworICAgIC8qKgorICAgICAqIOeUn+aIkOW5tuWPkemAgemqjOivgemCruS7tgorICAgICAqCisgICAgICogQHBhcmFtIGVtYWlsIOaUtuS7tuS6uumCrueusQorICAgICAqIEBwYXJhbSB0b2tlbgorICAgICAqLworICAgIHZvaWQgc2VuZFZlcmlmaWNhdGlvbkVtYWlsKFN0cmluZyBlbWFpbCwgU3RyaW5nIHRva2VuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0dyb3VwU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTZkN2UwLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODIgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuKjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5Lio7Ci1pbXBvcnQgamFrYXJ0YS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbmFsOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmRvbWFpbi5QYWdlUmVxdWVzdDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2VhYmxlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5kb21haW4uU29ydDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1AU2VydmljZQotcHVibGljIGNsYXNzIEdyb3VwU2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBHcm91cFJlcG9zaXRvcnkgZ3JvdXBSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgR3JvdXBNZW1iZXJzUmVwb3NpdG9yeSBncm91cE1lbWJlcnNSZXBvc2l0b3J5OwotCi0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEdyb3VwUG9zdFJlcG9zaXRvcnkgZ3JvdXBQb3N0UmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEdyb3VwQ29tbWVudHNSZXBvc2l0b3J5IGdyb3VwQ29tbWVudHNSZXBvc2l0b3J5OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX0RJUiA9ICJ1cGxvYWRzL2dyb3VwUG9zdC8iOwotCi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICAvLyDliJvlu7rlsI/nu4TnmoTmlrnms5UKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlR3JvdXAoR3JvdXAgZ3JvdXBSZXF1ZXN0KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyDliJvlu7rmlrDnmoTlsI/nu4Tlr7nosaEKLSAgICAgICAgICAgIEdyb3VwIG5ld0dyb3VwID0gbmV3IEdyb3VwKCk7Ci0gICAgICAgICAgICBuZXdHcm91cC5zZXRHcm91cE5hbWUoZ3JvdXBSZXF1ZXN0LmdldEdyb3VwTmFtZSgpKTsKLSAgICAgICAgICAgIG5ld0dyb3VwLnNldERlc2NyaXB0aW9uKGdyb3VwUmVxdWVzdC5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIG5ld0dyb3VwLnNldENyZWF0ZVRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgICAgICBuZXdHcm91cC5zZXRVc2VySWQoZ3JvdXBSZXF1ZXN0LmdldFVzZXJJZCgpKTsKLSAgICAgICAgICAgIG5ld0dyb3VwLnNldE1lbWJlckNvdW50KDEpOwotICAgICAgICAgICAgbmV3R3JvdXAuc2V0Q2F0ZWdvcnkoZ3JvdXBSZXF1ZXN0LmdldENhdGVnb3J5KCkpOwotICAgICAgICAgICAgbmV3R3JvdXAuc2V0Q292ZXJJbWFnZShncm91cFJlcXVlc3QuZ2V0Q292ZXJJbWFnZSgpKTsKLSAgICAgICAgICAgIEdyb3VwIGNyZWF0ZWRHcm91cCA9IGdyb3VwUmVwb3NpdG9yeS5zYXZlKG5ld0dyb3VwKTsKLQotICAgICAgICAgICAgLy8g6L+U5Zue5oiQ5Yqf5ZON5bqUCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJncm91cF9pZCIsIGNyZWF0ZWRHcm91cC5nZXRHcm91cElkKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8g6L+U5Zue5aSx6LSl5ZON5bqUCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlsI/nu4TliJvlu7rlpLHotKUiKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJncm91cF9pZCIsIG51bGwpOwotCi0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keShlcnJvclJlc3BvbnNlKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLy8g5Yqg5YWl5bCP57uECi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gam9pbkdyb3VwKExvbmcgZ3JvdXBJZCwgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g5p+l5om+5bCP57uECi0gICAgICAgIE9wdGlvbmFsPEdyb3VwPiBncm91cE9wdGlvbmFsID0gZ3JvdXBSZXBvc2l0b3J5LmZpbmRCeUlkKGdyb3VwSWQpOwotICAgICAgICBpZiAoIWdyb3VwT3B0aW9uYWwuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoNDAwKS5ib2R5KAotICAgICAgICAgICAgICAgICAgICBNYXAub2YoInN0YXR1cyIsICJmYWlsdXJlIiwgIm1lc3NhZ2UiLCAi5bCP57uE5LiN5a2Y5ZyoIikKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLQotICAgICAgICBHcm91cCBncm91cCA9IGdyb3VwT3B0aW9uYWwuZ2V0KCk7Ci0KLSAgICAgICAgLy8g5qOA5p+l55So5oi35piv5ZCm5bey57uP5piv6K+l5bCP57uE5oiQ5ZGYCi0gICAgICAgIGlmIChncm91cE1lbWJlcnNSZXBvc2l0b3J5LmV4aXN0c0J5R3JvdXBJZEFuZFVzZXJJZChncm91cElkLCB1c2VySWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keSgKLSAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAiZmFpbHVyZSIsICJtZXNzYWdlIiwgIueUqOaIt+W3sue7j+aYr+ivpeWwj+e7hOeahOaIkOWRmCIpCi0gICAgICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5o+S5YWl55So5oi35ZKM5bCP57uE55qE5YWz6IGU6K6w5b2VCi0gICAgICAgIEdyb3VwTWVtYmVycyBncm91cE1lbWJlcnMgPSBuZXcgR3JvdXBNZW1iZXJzKCk7Ci0gICAgICAgIGdyb3VwTWVtYmVycy5zZXRHcm91cElkKGdyb3VwSWQpOwotICAgICAgICBncm91cE1lbWJlcnMuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuc2F2ZShncm91cE1lbWJlcnMpOwotCi0gICAgICAgIC8vIOabtOaWsOWwj+e7hOeahOaIkOWRmOaVsAotICAgICAgICBncm91cC5zZXRNZW1iZXJDb3VudChncm91cC5nZXRNZW1iZXJDb3VudCgpICsgMSk7Ci0gICAgICAgIGdyb3VwUmVwb3NpdG9yeS5zYXZlKGdyb3VwKTsKLQotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2soKS5ib2R5KAotICAgICAgICAgICAgICAgIE1hcC5vZigic3RhdHVzIiwgInN1Y2Nlc3MiLCAibWVzc2FnZSIsICLmiJDlip/liqDlhaXlsI/nu4QiKQotICAgICAgICApOwotICAgIH0KLQotICAgIC8vIOmAgOWHuuWwj+e7hAotICAgIEBUcmFuc2FjdGlvbmFsCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxlYXZlR3JvdXAoTG9uZyBncm91cElkLCBMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7lsI/nu4QKLSAgICAgICAgT3B0aW9uYWw8R3JvdXA+IGdyb3VwT3B0aW9uYWwgPSBncm91cFJlcG9zaXRvcnkuZmluZEJ5SWQoZ3JvdXBJZCk7Ci0gICAgICAgIGlmICghZ3JvdXBPcHRpb25hbC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LnN0YXR1cyg0MDApLmJvZHkoCi0gICAgICAgICAgICAgICAgICAgIE1hcC5vZigic3RhdHVzIiwgImZhaWx1cmUiLCAibWVzc2FnZSIsICLlsI/nu4TkuI3lrZjlnKgiKQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwIGdyb3VwID0gZ3JvdXBPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAvLyDmo4Dmn6XnlKjmiLfmmK/lkKbmmK/or6XlsI/nu4TmiJDlkZgKLSAgICAgICAgaWYgKCFncm91cE1lbWJlcnNSZXBvc2l0b3J5LmV4aXN0c0J5R3JvdXBJZEFuZFVzZXJJZChncm91cElkLCB1c2VySWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keSgKLSAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAiZmFpbHVyZSIsICJtZXNzYWdlIiwgIueUqOaIt+S4jeaYr+ivpeWwj+e7hOeahOaIkOWRmCIpCi0gICAgICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5Yig6Zmk55So5oi35ZKM5bCP57uE55qE5YWz6IGU6K6w5b2VCi0gICAgICAgIGdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuZGVsZXRlQnlHcm91cElkQW5kVXNlcklkKGdyb3VwSWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5pu05paw5bCP57uE55qE5oiQ5ZGY5pWwCi0gICAgICAgIGdyb3VwLnNldE1lbWJlckNvdW50KGdyb3VwLmdldE1lbWJlckNvdW50KCkgLSAxKTsKLSAgICAgICAgZ3JvdXBSZXBvc2l0b3J5LnNhdmUoZ3JvdXApOwotCi0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygpLmJvZHkoCi0gICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAic3VjY2VzcyIsICJtZXNzYWdlIiwgIuaIkOWKn+mAgOWHuuWwj+e7hCIpCi0gICAgICAgICk7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5omA5pyJ5oiQ5ZGYCi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0R3JvdXBNZW1iZXJzKExvbmcgZ3JvdXBJZCkgewotICAgICAgICAvLyDmn6Xmib7lsI/nu4QKLSAgICAgICAgT3B0aW9uYWw8R3JvdXA+IGdyb3VwT3B0aW9uYWwgPSBncm91cFJlcG9zaXRvcnkuZmluZEJ5SWQoZ3JvdXBJZCk7Ci0gICAgICAgIGlmICghZ3JvdXBPcHRpb25hbC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LnN0YXR1cyg0MDApLmJvZHkoCi0gICAgICAgICAgICAgICAgICAgIE1hcC5vZigic3RhdHVzIiwgImZhaWx1cmUiLCAibWVzc2FnZSIsICLlsI/nu4TkuI3lrZjlnKgiKQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwIGdyb3VwID0gZ3JvdXBPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAvLyDojrflj5bmiYDmnInlsI/nu4TmiJDlkZgKLSAgICAgICAgTGlzdDxHcm91cE1lbWJlcnM+IGdyb3VwTWVtYmVyc0xpc3QgPSBncm91cE1lbWJlcnNSZXBvc2l0b3J5LmZpbmRCeUdyb3VwSWQoZ3JvdXBJZCk7Ci0KLSAgICAgICAgLy8g5Yib5bu65oiQ5ZGY6L+U5Zue5YiX6KGoCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gbWVtYmVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmb3IgKEdyb3VwTWVtYmVycyBncm91cE1lbWJlciA6IGdyb3VwTWVtYmVyc0xpc3QpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0aW9uYWwgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChncm91cE1lbWJlci5nZXRVc2VySWQoKSk7Ci0gICAgICAgICAgICBpZiAodXNlck9wdGlvbmFsLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHRpb25hbC5nZXQoKTsKLSAgICAgICAgICAgICAgICBtZW1iZXJzLmFkZChNYXAub2YoCi0gICAgICAgICAgICAgICAgICAgICAgICAidXNlcl9pZCIsIHVzZXIuZ2V0VXNlcklkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAidXNlcm5hbWUiLCB1c2VyLmdldFVzZXJuYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAiYXZhdGFyX3VybCIsIHVzZXIuZ2V0QXZhdGFyVXJsKCkKLSAgICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygpLmJvZHkoCi0gICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAic3VjY2VzcyIsICJtZW1iZXJzIiwgbWVtYmVycykKLSAgICAgICAgKTsKLSAgICB9Ci0KLQotICAgIC8v5Y+R5biD5biW5a2QCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY3JlYXRlUG9zdChMb25nIGdyb3VwSWQsIExvbmcgdXNlcklkLCBTdHJpbmcgcG9zdENvbnRlbnQsIFN0cmluZyB0aXRsZSwgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgLy8g5Yib5bu65LiA5Liq5paw55qE5biW5a2Q5a+56LGhCi0gICAgICAgIEdyb3VwUG9zdCBwb3N0ID0gbmV3IEdyb3VwUG9zdCgpOwotICAgICAgICBwb3N0LnNldEdyb3VwSWQoZ3JvdXBJZCk7Ci0gICAgICAgIHBvc3Quc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIHBvc3Quc2V0Q29udGVudChwb3N0Q29udGVudCk7Ci0gICAgICAgIHBvc3Quc2V0VGl0bGUodGl0bGUpOwotICAgICAgICBwb3N0LnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIHBvc3Quc2V0TGlrZUNvdW50KDApOwotICAgICAgICBwb3N0LnNldENvbW1lbnRDb3VudCgwKTsKLQotICAgICAgICAvLyDlpITnkIblm77niYfkuIrkvKDvvIzlpoLmnpzmsqHmnInlm77niYfvvIzov5Tlm57nqbrlrZfnrKbkuLIKLSAgICAgICAgU3RyaW5nIGltYWdlVXJscyA9IGhhbmRsZUltYWdlcyhpbWFnZUZpbGVzKTsKLSAgICAgICAgcG9zdC5zZXRJbWFnZShpbWFnZVVybHMpOwotCi0gICAgICAgIC8vIOS/neWtmOW4luWtkOWIsOaVsOaNruW6kwotICAgICAgICBHcm91cFBvc3Qgc2F2ZWRQb3N0ID0gZ3JvdXBQb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotCi0gICAgICAgIC8vIOi/lOWbnue7k+aenAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoInBvc3RfaWQiLCBzYXZlZFBvc3QuZ2V0R3JvdXBQb3N0SWQoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLluJblrZDliJvlu7rmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8vIOWkhOeQhuWbvueJh+S4iuS8oOeahOaWueazle+8jOi/lOWbnuWbvueJh+eahCBVUkwg5a2X56ym5LiyCi0gICAgcHJpdmF0ZSBTdHJpbmcgaGFuZGxlSW1hZ2VzKE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7Ci0gICAgICAgIGlmIChpbWFnZUZpbGVzID09IG51bGwgfHwgaW1hZ2VGaWxlcy5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBpbWFnZVVybHNCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltYWdlRmlsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgICAgIGltYWdlVXJsc0J1aWxkZXIuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFN0cmluZyBpbWFnZVVybCA9IHNhdmVJbWFnZShpbWFnZUZpbGVzW2ldKTsKLSAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZChpbWFnZVVybCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuWbvueJh+S4iuS8oOWksei0pTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW1hZ2VVcmxzQnVpbGRlci50b1N0cmluZygpOwotICAgIH0KLQotICAgIC8vIOS/neWtmOWbvueJh+W5tui/lOWbnuWbvueJh+eahCBVUkwKLSAgICBwcml2YXRlIFN0cmluZyBzYXZlSW1hZ2UoTXVsdGlwYXJ0RmlsZSBpbWFnZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChpbWFnZUZpbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCLlm77niYfmlofku7bkuLrnqboiKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGltYWdlRmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7Ci0gICAgICAgIFBhdGggcGF0aCA9IFBhdGgub2YoSU1BR0VfRElSICsgZmlsZU5hbWUpOwotICAgICAgICBGaWxlcy5jcmVhdGVEaXJlY3RvcmllcyhwYXRoLmdldFBhcmVudCgpKTsKLSAgICAgICAgRmlsZXMud3JpdGUocGF0aCwgaW1hZ2VGaWxlLmdldEJ5dGVzKCkpOwotICAgICAgICByZXR1cm4gIi9pbWFnZXMvIiArIGZpbGVOYW1lOwotICAgIH0KLQotICAgIC8vIOiOt+WPluWwj+e7hOWGheeahOaJgOacieW4luWtkAotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEFsbFBvc3RzKExvbmcgZ3JvdXBJZCkgewotICAgICAgICBMaXN0PEdyb3VwUG9zdD4gcG9zdHMgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUdyb3VwSWQoZ3JvdXBJZCk7Ci0KLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBwb3N0TGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIGZvciAoR3JvdXBQb3N0IHBvc3QgOiBwb3N0cykgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwb3N0RGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChwb3N0LmdldFVzZXJJZCgpKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciBub3QgZm91bmQiKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoImdyb3VwX3Bvc3RfaWQiLCBwb3N0LmdldEdyb3VwUG9zdElkKCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ1c2VyX2lkIiwgcG9zdC5nZXRVc2VySWQoKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoInVzZXJuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidGl0bGUiLCBwb3N0LmdldFRpdGxlKCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJjb250ZW50IiwgcG9zdC5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ0aW1lIiwgcG9zdC5nZXRUaW1lKCkpOwotCi0gICAgICAgICAgICBwb3N0TGlzdC5hZGQocG9zdERhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g6L+U5Zue5ZON5bqU5pWw5o2uCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJwb3N0cyIsIHBvc3RMaXN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotCi0gICAgLy8g6I635Y+W5bCP57uE5YiX6KGo5o6l5Y+jCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gc2VhcmNoR3JvdXBzKE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1zKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgcGFyYW1zLmdldCgibmFtZSIpOwotICAgICAgICBTdHJpbmcgY2F0ZWdvcnkgPSAoU3RyaW5nKSBwYXJhbXMuZ2V0KCJjYXRlZ29yeSIpOwotICAgICAgICBJbnRlZ2VyIHBhZ2UgPSAoSW50ZWdlcikgcGFyYW1zLmdldE9yRGVmYXVsdCgicGFnZSIsIDEpOwotICAgICAgICBJbnRlZ2VyIHNpemUgPSAoSW50ZWdlcikgcGFyYW1zLmdldE9yRGVmYXVsdCgic2l6ZSIsIDEwKTsKLSAgICAgICAgU3RyaW5nIHNvcnRCeSA9IChTdHJpbmcpIHBhcmFtcy5nZXRPckRlZmF1bHQoInNvcnRfYnkiLCAibWVtYmVyQ291bnQiKTsKLQotICAgICAgICAvLyDmnoTlu7rliIbpobXlr7nosaEKLSAgICAgICAgUGFnZWFibGUgcGFnZWFibGU7Ci0KLSAgICAgICAgLy8g5qC55o2uIGBzb3J0QnlgIOWIpOaWreaOkuW6j+aWueW8jwotICAgICAgICBpZiAoImNyZWF0ZVRpbWUiLmVxdWFscyhzb3J0QnkpKSB7Ci0gICAgICAgICAgICBwYWdlYWJsZSA9IFBhZ2VSZXF1ZXN0Lm9mKHBhZ2UgLSAxLCBzaXplLCBTb3J0LmJ5KFNvcnQuT3JkZXIuYXNjKCJjcmVhdGVUaW1lIikpKTsKLSAgICAgICAgfSBlbHNlIGlmICgiZ3JvdXBOYW1lIi5lcXVhbHMoc29ydEJ5KSkgewotICAgICAgICAgICAgcGFnZWFibGUgPSBQYWdlUmVxdWVzdC5vZihwYWdlIC0gMSwgc2l6ZSwgU29ydC5ieShTb3J0Lk9yZGVyLmFzYygiZ3JvdXBOYW1lIikpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhZ2VhYmxlID0gUGFnZVJlcXVlc3Qub2YocGFnZSAtIDEsIHNpemUsIFNvcnQuYnkoU29ydC5PcmRlci5kZXNjKCJtZW1iZXJDb3VudCIpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBQYWdlPEdyb3VwPiBncm91cHM7Ci0gICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyDlsI/nu4TlkI3np7DmqKHns4rmn6Xor6IKLSAgICAgICAgICAgIGdyb3VwcyA9IGdyb3VwUmVwb3NpdG9yeS5zZWFyY2hHcm91cHMobmFtZSwgY2F0ZWdvcnksIHBhZ2VhYmxlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdyb3VwcyA9IGdyb3VwUmVwb3NpdG9yeS5zZWFyY2hXaXRoRmlsdGVycyhjYXRlZ29yeSwgcGFnZWFibGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1aWxkUmVzcG9uc2UoZ3JvdXBzKTsKLSAgICB9Ci0KLSAgICAvLyDmnoTlu7rov5Tlm57nmoTlk43lupTmlbDmja4KLSAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE9iamVjdD4gYnVpbGRSZXNwb25zZShQYWdlPEdyb3VwPiBncm91cHMpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoInRvdGFsIiwgZ3JvdXBzLmdldFRvdGFsRWxlbWVudHMoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWxfcGFnZXMiLCBncm91cHMuZ2V0VG90YWxQYWdlcygpKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X3BhZ2UiLCBncm91cHMuZ2V0TnVtYmVyKCkgKyAxKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJpdGVtcyIsIGdyb3Vwcy5nZXRDb250ZW50KCkpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvLyDngrnotZ7luJblrZAKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBsaWtlUG9zdChMb25nIEdyb3VwUG9zdElkKSB7Ci0gICAgICAgIC8vIOafpeaJvuW4luWtkAotICAgICAgICBPcHRpb25hbDxHcm91cFBvc3Q+IHBvc3RPcHQgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKEdyb3VwUG9zdElkKTsKLSAgICAgICAgaWYgKCFwb3N0T3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwUG9zdCBwb3N0ID0gcG9zdE9wdC5nZXQoKTsKLQotICAgICAgICAvLyDmm7TmlrDngrnotZ7mlbAKLSAgICAgICAgcG9zdC5zZXRMaWtlQ291bnQocG9zdC5nZXRMaWtlQ291bnQoKSArIDEpOwotICAgICAgICBncm91cFBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7Ci0KLSAgICAgICAgLy8g6L+U5Zue5oiQ5Yqf5L+h5oGvCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueCuei1nuaIkOWKnyIpOwotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy8g5Y+W5raI54K56LWeCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdW5saWtlUG9zdChMb25nIEdyb3VwUG9zdElkKSB7Ci0gICAgICAgIC8vIOafpeaJvuW4luWtkAotICAgICAgICBPcHRpb25hbDxHcm91cFBvc3Q+IHBvc3RPcHQgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKEdyb3VwUG9zdElkKTsKLSAgICAgICAgaWYgKCFwb3N0T3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwUG9zdCBwb3N0ID0gcG9zdE9wdC5nZXQoKTsKLQotICAgICAgICAvLyDmm7TmlrDngrnotZ7mlbAKLSAgICAgICAgaWYgKHBvc3QuZ2V0TGlrZUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICBwb3N0LnNldExpa2VDb3VudChwb3N0LmdldExpa2VDb3VudCgpIC0gMSk7Ci0gICAgICAgICAgICBncm91cFBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7Ci0KLSAgICAgICAgICAgIC8vIOi/lOWbnuaIkOWKn+S/oeaBrwotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlj5bmtojngrnotZ7miJDlip8iKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIOWmguaenOeCuei1nuaVsOW3sue7j+aYrzDvvIzliJnov5Tlm57nm7jlupTmtojmga8KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5peg5rOV5Y+W5raI54K56LWe77yM54K56LWe5pWw5bey57uP5Li6MCIpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g5re75Yqg6K+E6K665bm25pu05paw5biW5a2Q55qE6K+E6K665pWwCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gYWRkQ29tbWVudChMb25nIHBvc3RJZCwgR3JvdXBDb21tZW50cyBjb21tZW50KSB7Ci0gICAgICAgIC8vIOafpeaJvuW4luWtkAotICAgICAgICBPcHRpb25hbDxHcm91cFBvc3Q+IHBvc3RPcHQgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCk7Ci0gICAgICAgIGlmICghcG9zdE9wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIik7Ci0gICAgICAgIH0KLQotICAgICAgICBHcm91cFBvc3QgcG9zdCA9IHBvc3RPcHQuZ2V0KCk7Ci0KLSAgICAgICAgY29tbWVudC5zZXRHcm91cFBvc3RJZChwb3N0SWQpOwotICAgICAgICBjb21tZW50LnNldFRpbWUobmV3IGphdmEudXRpbC5EYXRlKCkpOwotICAgICAgICBncm91cENvbW1lbnRzUmVwb3NpdG9yeS5zYXZlKGNvbW1lbnQpOwotICAgICAgICBwb3N0LnNldENvbW1lbnRDb3VudChwb3N0LmdldENvbW1lbnRDb3VudCgpICsgMSk7Ci0gICAgICAgIGdyb3VwUG9zdFJlcG9zaXRvcnkuc2F2ZShwb3N0KTsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6K+E6K665oiQ5YqfIik7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvTGV2ZWxTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjUwZWQuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5FeHBlcmllbmNlSGlzdG9yeTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuTGV2ZWw7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LkxldmVsUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLUBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgTGV2ZWxTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgTGV2ZWxSZXBvc2l0b3J5IGxldmVsUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEV4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeSBleHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnk7Ci0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFVzZXJFeHBlcmllbmNlKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S/oeaBrwotICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciBub3QgZm91bmQiKSk7Ci0KLSAgICAgICAgLy8g6I635Y+W5b2T5YmN562J57qnCi0gICAgICAgIExldmVsIGN1cnJlbnRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VyLmdldExldmVsKCkpLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJMZXZlbCBub3QgZm91bmQiKSk7Ci0KLSAgICAgICAgLy8g6I635Y+W5LiL5LiA5Liq562J57qn55qE57uP6aqM6ZyA5rGCCi0gICAgICAgIExldmVsIG5leHRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZChjdXJyZW50TGV2ZWwuZ2V0TGV2ZWxJZCgpICsgMSkub3JFbHNlKG51bGwpOwotCi0gICAgICAgIC8vIOaehOW7uuWTjeW6lOaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibGV2ZWwiLCBjdXJyZW50TGV2ZWwuZ2V0TGV2ZWxOYW1lKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoIm5leHRfbGV2ZWxfZXhwZXJpZW5jZSIsIG5leHRMZXZlbCAhPSBudWxsID8gbmV4dExldmVsLmdldFJlcXVpcmVkRXhwZXJpZW5jZSgpIDogMCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZUV4cGVyaWVuY2UoTG9uZyB1c2VySWQsIEludGVnZXIgZXhwZXJpZW5jZSwgU3RyaW5nIHNvdXJjZSkgewotICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIueUqOaIt+S4jeWtmOWcqCIpKTsKLQotICAgICAgICAvLyDmm7TmlrDnlKjmiLfnmoTnu4/pqozlgLwKLSAgICAgICAgdXNlci5zZXRDdXJyZW50RXhwZXJpZW5jZSh1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkgKyBleHBlcmllbmNlKTsKLQotICAgICAgICAvLyDkv53lrZjmm7TmlrDlkI7nmoTnlKjmiLfkv6Hmga8KLSAgICAgICAgdXNlclJlcG9zaXRvcnkuc2F2ZSh1c2VyKTsKLQotICAgICAgICAvLyDliJvlu7rnu4/pqozmm7TmlrDljoblj7LorrDlvZUKLSAgICAgICAgRXhwZXJpZW5jZUhpc3RvcnkgZXhwZXJpZW5jZUhpc3RvcnkgPSBuZXcgRXhwZXJpZW5jZUhpc3RvcnkoKTsKLSAgICAgICAgZXhwZXJpZW5jZUhpc3Rvcnkuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGV4cGVyaWVuY2VIaXN0b3J5LnNldEV4cGVyaWVuY2VDaGFuZ2UoZXhwZXJpZW5jZSk7Ci0gICAgICAgIGV4cGVyaWVuY2VIaXN0b3J5LnNldFNvdXJjZShzb3VyY2UpOwotICAgICAgICBleHBlcmllbmNlSGlzdG9yeS5zZXRVcGRhdGVUaW1lKG5ldyBEYXRlKCkpOwotCi0gICAgICAgIC8vIOS/neWtmOabtOaWsOWOhuWPsgotICAgICAgICBleHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuc2F2ZShleHBlcmllbmNlSGlzdG9yeSk7Ci0KLSAgICAgICAgLy8g6L+U5Zue5pu05paw5ZCO55qE57uP6aqM5YC85ZKM5raI5oGvCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIue7j+mqjOabtOaWsOaIkOWKnyIpOwotICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSk7ICAvLyDov5Tlm57mm7TmlrDlkI7nmoTnu4/pqozlgLwKLQotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY2hlY2tVcGdyYWRlKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S/oeaBrwotICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigi55So5oi35LiN5a2Y5ZyoIikpOwotCi0gICAgICAgIC8vIOiOt+WPluW9k+WJjeetiee6pwotICAgICAgICBMZXZlbCBjdXJyZW50TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQodXNlci5nZXRMZXZlbCgpKQotICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigi55So5oi3562J57qn5L+h5oGv5LiN5a2Y5ZyoIikpOwotCi0gICAgICAgIC8vIOiOt+WPluS4i+S4gOS4quetiee6p+eahOe7j+mqjOmcgOaxggotICAgICAgICBMZXZlbCBuZXh0TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQoY3VycmVudExldmVsLmdldExldmVsSWQoKSArIDEpLm9yRWxzZShudWxsKTsKLQotICAgICAgICAvLyDmnoTlu7rlk43lupTmlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLQotICAgICAgICAvLyDliKTmlq3nlKjmiLfmmK/lkKblj6/ku6XljYfnuqcKLSAgICAgICAgYm9vbGVhbiBjYW5VcGdyYWRlID0gdXNlci5nZXRDdXJyZW50RXhwZXJpZW5jZSgpID49IChuZXh0TGV2ZWwgIT0gbnVsbCA/IG5leHRMZXZlbC5nZXRSZXF1aXJlZEV4cGVyaWVuY2UoKSA6IDApOwotICAgICAgICByZXNwb25zZS5wdXQoImNhbl91cGdyYWRlIiwgY2FuVXBncmFkZSk7Ci0gICAgICAgIC8vIOaehOW7uuWTjeW6lOaVsOaNrgotCi0gICAgICAgIHJlc3BvbnNlLnB1dCgibmV4dF9sZXZlbF9leHBlcmllbmNlIiwgbmV4dExldmVsICE9IG51bGwgPyBuZXh0TGV2ZWwuZ2V0UmVxdWlyZWRFeHBlcmllbmNlKCkgOiAwKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCB1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkpOwotCi0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZ3JhZGVVc2VyTGV2ZWwoTG9uZyB1c2VySWQsIEJvb2xlYW4gY2FuVXBncmFkZSkgewotICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOwotCi0gICAgICAgIC8vIOWIm+W7uuWTjeW6lOWvueixoQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotCi0gICAgICAgIGlmIChjYW5VcGdyYWRlKSB7Ci0gICAgICAgICAgICAvLyDojrflj5blvZPliY3nrYnnuqcKLSAgICAgICAgICAgIExldmVsIGN1cnJlbnRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VyLmdldExldmVsKCkpCi0gICAgICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiTGV2ZWwgbm90IGZvdW5kIikpOwotCi0gICAgICAgICAgICAvLyDojrflj5bkuIvkuIDkuKrnrYnnuqfnmoTnu4/pqozpnIDmsYIKLSAgICAgICAgICAgIExldmVsIG5leHRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZChjdXJyZW50TGV2ZWwuZ2V0TGV2ZWxJZCgpICsgMSkub3JFbHNlKG51bGwpOwotCi0gICAgICAgICAgICBpZiAobmV4dExldmVsICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB1c2VyLnNldExldmVsKHVzZXIuZ2V0TGV2ZWwoKSArIDEpOwotICAgICAgICAgICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7Ci0gICAgICAgICAgICAgICAgTGV2ZWwgbmV3TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQodXNlci5nZXRMZXZlbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJMZXZlbCBub3QgZm91bmQiKSk7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWNh+e6p+aIkOWKnyIpOwotICAgICAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgICAgICAgICByZXNwb25zZS5wdXQoIm5ld19sZXZlbCIsIG5ld0xldmVsLmdldExldmVsTmFtZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueUqOaIt+W3sui+vuWIsOacgOmrmOetiee6pyIpOwotICAgICAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi55So5oi35LiN5ruh6Laz5Y2H57qn5p2h5Lu2Iik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJlcnJvciIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qb3N0U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qb3N0U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTVkZTc4Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MaWtlczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlBvc3Q7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Db2xsZWN0aW9uc1JlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuTGlrZXNSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlBvc3RSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotQFNlcnZpY2UKLXB1YmxpYyBjbGFzcyBQb3N0U2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBQb3N0UmVwb3NpdG9yeSBwb3N0UmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIExpa2VzUmVwb3NpdG9yeSBsaWtlc1JlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBDb2xsZWN0aW9uc1JlcG9zaXRvcnkgY29sbGVjdGlvbnNSZXBvc2l0b3J5OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX0RJUiA9ICJ1cGxvYWRzL3Bvc3QvIjsKLQotCi0gICAgLy/liJvlu7rluJblrZAKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjcmVhdGVQb3N0KExvbmcgdXNlcklkLCBTdHJpbmcgcG9zdENvbnRlbnQsIFN0cmluZyB0aXRsZSwgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgLy8g5p+l5om+55So5oi35L+h5oGvCi0gICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChMb25nLnZhbHVlT2YodXNlcklkKSkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOwotICAgICAgICBQb3N0IHBvc3QgPSBuZXcgUG9zdCgpOwotICAgICAgICBwb3N0LnNldFVzZXJfaWQodXNlci5nZXRVc2VySWQoKSk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdExpa2VOdW0oMCk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdENvbGxlY3ROdW0oMCk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdENvbnRlbnQocG9zdENvbnRlbnQpOwotICAgICAgICBwb3N0LnNldFRpdGxlKHRpdGxlKTsKLQotICAgICAgICAvLyDlpITnkIblpJrlvKDlm77niYfnmoTkuIrkvKAKLSAgICAgICAgU3RyaW5nQnVpbGRlciBpbWFnZVVybHNCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgaWYgKGltYWdlRmlsZXMgIT0gbnVsbCAmJiBpbWFnZUZpbGVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1hZ2VGaWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VVcmwgPSBzYXZlSW1hZ2UoaW1hZ2VGaWxlc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVXJsc0J1aWxkZXIuYXBwZW5kKGltYWdlVXJsKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbWFnZSB1cGxvYWQgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwb3N0LnNldEltYWdlVXJsKGltYWdlVXJsc0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIFBvc3Qgc2F2ZWRQb3N0ID0gcG9zdFJlcG9zaXRvcnkuc2F2ZShwb3N0KTsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJwb3N0Tm8iLCBzYXZlZFBvc3QuZ2V0UG9zdE5vKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5biW5a2Q5Yib5bu65oiQ5YqfIik7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvLyDkv53lrZjlm77niYflubbov5Tlm57lm77niYfnmoQgVVJMCi0gICAgcHVibGljIFN0cmluZyBzYXZlSW1hZ2UoTXVsdGlwYXJ0RmlsZSBpbWFnZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGltYWdlRmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7Ci0gICAgICAgIFBhdGggcGF0aCA9IFBhdGhzLmdldChJTUFHRV9ESVIgKyBmaWxlTmFtZSk7Ci0gICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHBhdGguZ2V0UGFyZW50KCkpOwotICAgICAgICBGaWxlcy53cml0ZShwYXRoLCBpbWFnZUZpbGUuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIHJldHVybiAiL2ltYWdlcy8iICsgZmlsZU5hbWU7Ci0gICAgfQotCi0KLSAgICAvL+e8lui+keW4luWtkAotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVBvc3QoTG9uZyBwb3N0SWQsIFBvc3QgcG9zdCkgewotICAgICAgICBQb3N0IGV4aXN0aW5nUG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotICAgICAgICBpZiAocG9zdC5nZXRUaXRsZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGV4aXN0aW5nUG9zdC5zZXRUaXRsZShwb3N0LmdldFRpdGxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3N0LmdldFBvc3RDb250ZW50KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgZXhpc3RpbmdQb3N0LnNldFBvc3RDb250ZW50KHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvc3QuZ2V0SW1hZ2VVcmwoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBleGlzdGluZ1Bvc3Quc2V0SW1hZ2VVcmwocG9zdC5nZXRJbWFnZVVybCgpKTsKLSAgICAgICAgfQotICAgICAgICBleGlzdGluZ1Bvc3Quc2V0UG9zdFRpbWUocG9zdC5nZXRQb3N0VGltZSgpKTsKLSAgICAgICAgLy8g5L+d5a2Y5pu05paw5ZCO55qE5biW5a2QCi0gICAgICAgIHBvc3RSZXBvc2l0b3J5LnNhdmUoZXhpc3RpbmdQb3N0KTsKLSAgICB9Ci0KLSAgICAvL+WIoOmZpOW4luWtkAotICAgIHB1YmxpYyB2b2lkIGRlbGV0ZVBvc3QoTG9uZyBwb3N0SWQpIHsKLSAgICAgICAgLy8g5p+l5om+5oyH5a6aIElEIOeahOW4luWtkO+8jOWmguaenOS4jeWtmOWcqOWImeaKm+WHuuW8guW4uAotICAgICAgICBpZiAoIXBvc3RSZXBvc2l0b3J5LmV4aXN0c0J5SWQocG9zdElkKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIik7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g5Yig6Zmk6K+l5biW5a2QCi0gICAgICAgIHBvc3RSZXBvc2l0b3J5LmRlbGV0ZUJ5SWQocG9zdElkKTsKLSAgICB9Ci0KLSAgICAvL+eCuei1nuW4luWtkO+8iOW3suWujOaIkO+8iQotICAgIHB1YmxpYyB2b2lkIGxpa2VQb3N0KExvbmcgcG9zdElkLCBMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7mjIflrpogSUQg55qE5biW5a2QCi0gICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotICAgICAgICBwb3N0LnNldFBvc3RMaWtlTnVtKHBvc3QuZ2V0UG9zdExpa2VOdW0oKSArIDEpOwotCi0gICAgICAgIC8vIOS/neWtmOW4luWtkAotICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotICAgICAgICBMaWtlcyBsaWtlID0gbmV3IExpa2VzKCk7Ci0gICAgICAgIGxpa2Uuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGxpa2Uuc2V0UG9zdE5vKHBvc3RJZCk7Ci0gICAgICAgIC8vIOS/neWtmOeCuei1nuiusOW9lQotICAgICAgICBsaWtlc1JlcG9zaXRvcnkuc2F2ZShsaWtlKTsKLSAgICB9Ci0KLSAgICAvLyDlj5bmtojngrnotZ7luJblrZDvvIjlt7LlrozmiJDvvIkKLSAgICBwdWJsaWMgdm9pZCB1bmxpa2VQb3N0KExvbmcgcG9zdElkLCBMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7mjIflrpogSUQg55qE5biW5a2QCi0gICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotCi0gICAgICAgIC8vIOWmguaenOeCuei1nuaVsOWkp+S6jiAw77yM5YiZ5YeP5bCR54K56LWe5pWwCi0gICAgICAgIGlmIChwb3N0LmdldFBvc3RMaWtlTnVtKCkgPiAwKSB7Ci0gICAgICAgICAgICBwb3N0LnNldFBvc3RMaWtlTnVtKHBvc3QuZ2V0UG9zdExpa2VOdW0oKSAtIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5Yig6Zmk54K56LWe6KGo5Lit5a+55bqU55qE6K6w5b2VCi0gICAgICAgIGxpa2VzUmVwb3NpdG9yeS5kZWxldGVMaWtlQnlVc2VySWRBbmRQb3N0Tm8odXNlcklkLCBwb3N0SWQpOwotCi0gICAgICAgIC8vIOS/neWtmOabtOaWsOWQjueahOW4luWtkAotICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotICAgIH0KLQotCi0gICAgLy8g6I635Y+W5biW5a2Q5YiX6KGo77yI5bey5a6M5oiQ77yJCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsUG9zdHMoKSB7Ci0gICAgICAgIExpc3Q8UG9zdD4gcG9zdHMgPSBwb3N0UmVwb3NpdG9yeS5maW5kQWxsKCk7Ci0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcG9zdExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICBmb3IgKFBvc3QgcG9zdCA6IHBvc3RzKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBvc3RNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgicG9zdE5vIiwgcG9zdC5nZXRQb3N0Tm8oKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgidXNlcl9pZCIsIHBvc3QuZ2V0VXNlcl9pZCgpKTsKLSAgICAgICAgICAgIHBvc3RNYXAucHV0KCJwb3N0Q29udGVudCIsIHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgiaW1nVXJsIiwgcG9zdC5nZXRJbWFnZVVybCgpKTsKLSAgICAgICAgICAgIHBvc3RNYXAucHV0KCJ0aXRsZSIsIHBvc3QuZ2V0VGl0bGUoKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgiY3JlYXRlZEF0IiwgcG9zdC5nZXRQb3N0VGltZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgcG9zdE1hcC5wdXQoImxpa2VDb3VudCIsIHBvc3QuZ2V0UG9zdExpa2VOdW0oKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgiY29sbGVjdENvdW50IiwgcG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpKTsKLQotICAgICAgICAgICAgcG9zdExpc3QuYWRkKHBvc3RNYXApOwotICAgICAgICB9Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgLy8g57uf6K6h5biW5a2Q5pWw6YePCi0gICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWwiLCBwb3N0TGlzdC5zaXplKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoInBvc3RzIiwgcG9zdExpc3QpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQb3N0QnlJZChMb25nIHBvc3RJZCkgewotICAgICAgICAvLyDojrflj5bluJblrZAKLSAgICAgICAgT3B0aW9uYWw8UG9zdD4gcG9zdE9wdGlvbmFsID0gcG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKTsKLQotICAgICAgICAvLyDlpoLmnpzluJblrZDlrZjlnKgKLSAgICAgICAgaWYgKHBvc3RPcHRpb25hbC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgUG9zdCBwb3N0ID0gcG9zdE9wdGlvbmFsLmdldCgpOwotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwb3N0RGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgicG9zdE5vIiwgcG9zdC5nZXRQb3N0Tm8oKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoInVzZXJfaWQiLCBwb3N0LmdldFVzZXJfaWQoKSk7Ci0gICAgICAgICAgICBMb25nIHVzZXJJZCA9IHBvc3QuZ2V0VXNlcl9pZCgpOwotICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlKG51bGwpOwotCi0gICAgICAgICAgICBpZiAodXNlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcG9zdERhdGEucHV0KCJhdmF0YXJfdXJsIiwgdXNlci5nZXRBdmF0YXJVcmwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidXNlcm5hbWUiLCBudWxsKTsKLSAgICAgICAgICAgICAgICBwb3N0RGF0YS5wdXQoImF2YXRhcl91cmwiLCBudWxsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJwb3N0Q29udGVudCIsIHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoImltYWdlVXJsIiwgcG9zdC5nZXRJbWFnZVVybCgpKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgicG9zdFRpbWUiLCBwb3N0LmdldFBvc3RUaW1lKCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJwb3N0TGlrZU51bSIsIHBvc3QuZ2V0UG9zdExpa2VOdW0oKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoInBvc3RDb2xsZWN0TnVtIiwgcG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidGl0bGUiLCBwb3N0LmdldFRpdGxlKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gcG9zdERhdGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQgd2l0aCBpZDogIiArIHBvc3RJZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8v5pS26JePCi0gICAgcHVibGljIHZvaWQgY29sbGVjdFBvc3QoTG9uZyBwb3N0SWQsIExvbmcgdXNlcklkKSB7Ci0gICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotICAgICAgICBwb3N0LnNldFBvc3RDb2xsZWN0TnVtKHBvc3QuZ2V0UG9zdENvbGxlY3ROdW0oKSArIDEpOwotICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotCi0gICAgICAgIC8vIOa3u+WKoOWIsOaUtuiXj+ihqAotICAgICAgICBDb2xsZWN0aW9ucyBjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb25zKCk7Ci0gICAgICAgIGNvbGxlY3Rpb24uc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGNvbGxlY3Rpb24uc2V0UG9zdE5vKHBvc3RJZCk7Ci0gICAgICAgIGNvbGxlY3Rpb25zUmVwb3NpdG9yeS5zYXZlKGNvbGxlY3Rpb24pOwotICAgIH0KLQotICAgIC8v5Y+W5raI5pS26JePCi0gICAgcHVibGljIHZvaWQgdW5jb2xsZWN0UG9zdChMb25nIHBvc3RJZCwgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgUG9zdCBwb3N0ID0gcG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKSk7Ci0gICAgICAgIC8vIOWHj+WwkeW4luWtkOaUtuiXj+aVsAotICAgICAgICBpZiAocG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpID4gMCkgewotICAgICAgICAgICAgcG9zdC5zZXRQb3N0Q29sbGVjdE51bShwb3N0LmdldFBvc3RDb2xsZWN0TnVtKCkgLSAxKTsKLSAgICAgICAgICAgIHBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDku47mlLbol4/ooajkuK3liKDpmaTlr7nlupTorrDlvZUKLSAgICAgICAgY29sbGVjdGlvbnNSZXBvc2l0b3J5LmRlbGV0ZUxpa2VCeVVzZXJJZEFuZFBvc3RObyh1c2VySWQsIHBvc3RJZCk7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W55So5oi35pS26JeP55qE5omA5pyJ5biW5a2QCi0gICAgcHVibGljIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsQ29sbGVjdGlvbnMoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g6I635Y+W55So5oi35pS26JeP55qE5biW5a2QSUQKLSAgICAgICAgTGlzdDxDb2xsZWN0aW9ucz4gY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uc1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5aaC5p6c5rKh5pyJ5pS26JeP55qE5biW5a2Q77yM6L+U5Zue56m65YiX6KGoCi0gICAgICAgIGlmIChjb2xsZWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZm9yIChDb2xsZWN0aW9ucyBjb2xsZWN0aW9uIDogY29sbGVjdGlvbnMpIHsKLSAgICAgICAgICAgIC8vIOagueaNriBwb3N0Tm8g5p+l6K+i5biW5a2QCi0gICAgICAgICAgICBPcHRpb25hbDxQb3N0PiBwb3N0T3B0aW9uYWwgPSBwb3N0UmVwb3NpdG9yeS5maW5kQnlJZChjb2xsZWN0aW9uLmdldFBvc3RObygpKTsKLSAgICAgICAgICAgIGlmIChwb3N0T3B0aW9uYWwuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICBQb3N0IHBvc3QgPSBwb3N0T3B0aW9uYWwuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyDojrflj5bluJblrZDkvZzogIXnmoTkv6Hmga8KLSAgICAgICAgICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdGlvbmFsID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdC5nZXRVc2VyX2lkKCkpOwotICAgICAgICAgICAgICAgIGlmICh1c2VyT3B0aW9uYWwuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyDlsIbluJblrZDmlbDmja7lkoznlKjmiLfkv6Hmga/lsIHoo4XliLAgTWFwIOS4rQotICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBvc3RJbmZvID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgICAgICBwb3N0SW5mby5wdXQoInBvc3RObyIsIHBvc3QuZ2V0UG9zdE5vKCkpOwotICAgICAgICAgICAgICAgICAgICBwb3N0SW5mby5wdXQoInRpdGxlIiwgcG9zdC5nZXRUaXRsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcG9zdEluZm8ucHV0KCJwb3N0Q29udGVudCIsIHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBvc3RJbmZvLnB1dCgiaW1hZ2VVcmwiLCBwb3N0LmdldEltYWdlVXJsKCkpOwotICAgICAgICAgICAgICAgICAgICBwb3N0SW5mby5wdXQoInVzZXJJZCIsIHBvc3QuZ2V0VXNlcl9pZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcG9zdEluZm8ucHV0KCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSk7ICAvLyDluJblrZDkvZzogIXnlKjmiLflkI0KLSAgICAgICAgICAgICAgICAgICAgcG9zdEluZm8ucHV0KCJhdmF0YXJVcmwiLCB1c2VyLmdldEF2YXRhclVybCgpKTsgIC8vIOW4luWtkOS9nOiAheWktOWDjwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFkZChwb3N0SW5mbyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qcm9tb3Rpb25TZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1Byb21vdGlvblNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdjMTNiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qcm9tb3Rpb25TZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUHJvbW90aW9uOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8uUHJvbW90aW9uQ3JlYXRlRFRPOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgaW50ZXJmYWNlIFByb21vdGlvblNlcnZpY2UgeworICAgIFByb21vdGlvbiBjcmVhdGVQcm9tb3Rpb24oUHJvbW90aW9uQ3JlYXRlRFRPIHByb21vdGlvbkRUTyk7CisgICAgCisgICAgTGlzdDxQcm9tb3Rpb24+IGdldEFsbEFjdGl2ZVByb21vdGlvbnMoKTsKKyAgICAKKyAgICBQcm9tb3Rpb24gZ2V0UHJvbW90aW9uQnlJZChMb25nIHByb21vdGlvbklkKTsKKyAgICAKKyAgICB2b2lkIGRlbGV0ZVByb21vdGlvbihMb25nIHByb21vdGlvbklkKTsKKyAgICAKKyAgICBkb3VibGUgZ2V0Q3VycmVudERpc2NvdW50KExvbmcgdG9ycmVudElkKTsKK30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9TZWVkQ29tbWVudFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvU2VlZENvbW1lbnRTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMGIxNjQuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9TZWVkQ29tbWVudFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5TZWVkQ29tbWVudDsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlNlZWRDb21tZW50TGlrZXM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuU2VlZENvbW1lbnRMaWtlc1JlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuU2VlZENvbW1lbnRSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1AU2VydmljZQotcHVibGljIGNsYXNzIFNlZWRDb21tZW50U2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBTZWVkQ29tbWVudFJlcG9zaXRvcnkgc2VlZENvbW1lbnRSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgU2VlZENvbW1lbnRMaWtlc1JlcG9zaXRvcnkgc2VlZENvbW1lbnRMaWtlc1JlcG9zaXRvcnk7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHB1Ymxpc2hDb21tZW50KGludCBzZWVkSWQsIFNlZWRDb21tZW50IHNlZWRDb21tZW50KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyDlpoLmnpzmmK/lm57lpI3or4TorrrvvIzmo4Dmn6XniLbor4TorrrmmK/lkKblrZjlnKgKLSAgICAgICAgICAgIGlmIChzZWVkQ29tbWVudC5nZXRDb21Db21tZW50SWQoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8g5p+l5om+54i26K+E6K665piv5ZCm5a2Y5ZyoCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBwYXJlbnRFeGlzdHMgPSBzZWVkQ29tbWVudFJlcG9zaXRvcnkuZXhpc3RzQnlJZChzZWVkQ29tbWVudC5nZXRDb21Db21tZW50SWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFeGlzdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ7IFwic3RhdHVzXCI6IFwiZXJyb3JcIiwgXCJtZXNzYWdlXCI6IFwi54i26K+E6K665LiN5a2Y5ZyoXCIgfSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyDorr7nva7or4TorrrnmoTnp43lrZBJRAotICAgICAgICAgICAgc2VlZENvbW1lbnQuc2V0U2VlZElkKHNlZWRJZCk7Ci0gICAgICAgICAgICBzZWVkQ29tbWVudC5zZXRDb21tZW50VGltZShuZXcgRGF0ZSgpKTsKLSAgICAgICAgICAgIHNlZWRDb21tZW50LnNldExpa2VzQ291bnQoMCk7ICAvLyDpu5jorqTngrnotZ7mlbDkuLowCi0gICAgICAgICAgICBzZWVkQ29tbWVudC5zZXRSZXBseUNvdW50KDApOyAgLy8g6buY6K6k5Zue5aSN5pWw5Li6MAotCi0gICAgICAgICAgICAvLyDlpoLmnpzmsqHmnInniLbor4TorrrvvIxjb21fY29tbWVudF9pZCDpu5jorqTkuLowCi0gICAgICAgICAgICBpZiAoc2VlZENvbW1lbnQuZ2V0Q29tQ29tbWVudElkKCkgPT0gMCkgewotICAgICAgICAgICAgICAgIHNlZWRDb21tZW50LnNldENvbUNvbW1lbnRJZCgwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g5L+d5a2Y6K+E6K665Yiw5pWw5o2u5bqTCi0gICAgICAgICAgICBzZWVkQ29tbWVudFJlcG9zaXRvcnkuc2F2ZShzZWVkQ29tbWVudCk7Ci0KLSAgICAgICAgICAgIC8vIOi/lOWbnuaIkOWKn+S/oeaBrwotICAgICAgICAgICAgcmV0dXJuICJ7IFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiLCBcIm1lc3NhZ2VcIjogXCLor4Torrrlj5HluIPmiJDlip9cIiB9IjsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIOWkhOeQhuW8guW4uO+8jOi/lOWbnuWksei0peS/oeaBrwotICAgICAgICAgICAgcmV0dXJuICJ7IFwic3RhdHVzXCI6IFwiZXJyb3JcIiwgXCJtZXNzYWdlXCI6IFwi6K+E6K665Y+R5biD5aSx6LSlXCIgfSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxDb21tZW50c0ZvclNlZWQoaW50IHNlZWRJZCkgewotICAgICAgICAvLyDojrflj5bor6Xnp43lrZDnmoTmiYDmnInor4TorrrvvIjpobbnuqfor4TorrrvvIkKLSAgICAgICAgTGlzdDxTZWVkQ29tbWVudD4gYWxsQ29tbWVudHMgPSBzZWVkQ29tbWVudFJlcG9zaXRvcnkuZmluZEJ5U2VlZElkKHNlZWRJZCk7Ci0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2VDb21tZW50cyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIGZvciAoU2VlZENvbW1lbnQgY29tbWVudCA6IGFsbENvbW1lbnRzKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbW1lbnREYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJjb21tZW50X2lkIiwgY29tbWVudC5nZXRDb21tZW50SWQoKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJfaWQiLCBjb21tZW50LmdldFVzZXJJZCgpKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidXNlcm5hbWUiLCAiVXNlciIgKyBjb21tZW50LmdldFVzZXJJZCgpKTsgIC8vIOmAmui/h+eUqOaIt0lE5p+l6K+i55So5oi35ZCNCi0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbnRlbnQiLCBjb21tZW50LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInBhcmVudF9jb21tZW50X2lkIiwgY29tbWVudC5nZXRDb21Db21tZW50SWQoKSk7Ci0KLSAgICAgICAgICAgIC8vIOiOt+WPluivpeivhOiuuueahOaJgOacieWbnuWkjQotICAgICAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXBsaWVzID0gZ2V0UmVwbGllc0ZvckNvbW1lbnQoY29tbWVudC5nZXRDb21tZW50SWQoKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInJlcGxpZXMiLCByZXBsaWVzKTsKLQotICAgICAgICAgICAgcmVzcG9uc2VDb21tZW50cy5hZGQoY29tbWVudERhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g6L+U5Zue5pyA57uI57uT5p6cCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICByZXN1bHQucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXN1bHQucHV0KCJjb21tZW50cyIsIHJlc3BvbnNlQ29tbWVudHMpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W54m55a6a6K+E6K6655qE5omA5pyJ5Zue5aSNCi0gICAgcHJpdmF0ZSBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldFJlcGxpZXNGb3JDb21tZW50KGxvbmcgcGFyZW50Q29tbWVudElkKSB7Ci0gICAgICAgIExpc3Q8U2VlZENvbW1lbnQ+IHJlcGxpZXMgPSBzZWVkQ29tbWVudFJlcG9zaXRvcnkuZmluZEJ5Q29tQ29tbWVudElkKHBhcmVudENvbW1lbnRJZCk7Ci0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVwbHlSZXNwb25zZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICBmb3IgKFNlZWRDb21tZW50IHJlcGx5IDogcmVwbGllcykgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXBseURhdGEgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXBseURhdGEucHV0KCJjb21tZW50X2lkIiwgcmVwbHkuZ2V0Q29tbWVudElkKCkpOwotICAgICAgICAgICAgcmVwbHlEYXRhLnB1dCgidXNlcl9pZCIsIHJlcGx5LmdldFVzZXJJZCgpKTsKLSAgICAgICAgICAgIHJlcGx5RGF0YS5wdXQoInVzZXJuYW1lIiwgIlVzZXIiICsgcmVwbHkuZ2V0VXNlcklkKCkpOyAgLy8g6YCa6L+H55So5oi3SUTmn6Xor6LnlKjmiLflkI0KLSAgICAgICAgICAgIHJlcGx5RGF0YS5wdXQoImNvbnRlbnQiLCByZXBseS5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAgcmVwbHlEYXRhLnB1dCgicGFyZW50X2NvbW1lbnRfaWQiLCByZXBseS5nZXRDb21Db21tZW50SWQoKSk7Ci0gICAgICAgICAgICByZXBseVJlc3BvbnNlcy5hZGQocmVwbHlEYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXBseVJlc3BvbnNlczsKLSAgICB9Ci0KLSAgICAvLyDngrnotZ7liIfmjaLpgLvovpEKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB0b2dnbGVMaWtlKExvbmcgY29tbWVudElkLCBMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7mmK/lkKbmnInor6Xor4TorroKLSAgICAgICAgT3B0aW9uYWw8U2VlZENvbW1lbnQ+IHNlZWRDb21tZW50T3B0aW9uYWwgPSBzZWVkQ29tbWVudFJlcG9zaXRvcnkuZmluZEJ5SWQoY29tbWVudElkKTsKLSAgICAgICAgaWYgKCFzZWVkQ29tbWVudE9wdGlvbmFsLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gTWFwLm9mKCJzdGF0dXMiLCAiZXJyb3IiLCAibWVzc2FnZSIsICLor4TorrrkuI3lrZjlnKgiKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNlZWRDb21tZW50IHNlZWRDb21tZW50ID0gc2VlZENvbW1lbnRPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAvLyDmn6Xmib7or6XnlKjmiLfmmK/lkKblt7LngrnotZ4KLSAgICAgICAgT3B0aW9uYWw8U2VlZENvbW1lbnRMaWtlcz4gY29tbWVudExpa2VPcHRpb25hbCA9IHNlZWRDb21tZW50TGlrZXNSZXBvc2l0b3J5LmZpbmRCeUNvbW1lbnRJZEFuZFVzZXJJZChjb21tZW50SWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5aaC5p6c55So5oi35pyq54K56LWe77yM5re75Yqg5paw55qE54K56LWe6K6w5b2VCi0gICAgICAgIGlmIChjb21tZW50TGlrZU9wdGlvbmFsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgU2VlZENvbW1lbnRMaWtlcyBuZXdMaWtlID0gbmV3IFNlZWRDb21tZW50TGlrZXMoKTsKLSAgICAgICAgICAgIG5ld0xpa2Uuc2V0Q29tbWVudElkKGNvbW1lbnRJZCk7Ci0gICAgICAgICAgICBuZXdMaWtlLnNldFVzZXJJZCh1c2VySWQpOwotICAgICAgICAgICAgbmV3TGlrZS5zZXRJc0xpa2VkKHRydWUpOwotCi0gICAgICAgICAgICAvLyDmm7TmlrAgU2VlZENvbW1lbnQg6KGo5Lit55qE54K56LWe5pWwCi0gICAgICAgICAgICBzZWVkQ29tbWVudC5zZXRMaWtlc0NvdW50KHNlZWRDb21tZW50LmdldExpa2VzQ291bnQoKSArIDEpOwotICAgICAgICAgICAgc2VlZENvbW1lbnRSZXBvc2l0b3J5LnNhdmUoc2VlZENvbW1lbnQpOwotCi0gICAgICAgICAgICAvLyDkv53lrZjngrnotZ7orrDlvZUKLSAgICAgICAgICAgIHNlZWRDb21tZW50TGlrZXNSZXBvc2l0b3J5LnNhdmUobmV3TGlrZSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBNYXAub2YoInN0YXR1cyIsICJzdWNjZXNzIiwgIm1lc3NhZ2UiLCAi5pON5L2c5oiQ5YqfIiwgImxpa2VkIiwgInRydWUiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNlZWRDb21tZW50TGlrZXMgY29tbWVudExpa2UgPSBjb21tZW50TGlrZU9wdGlvbmFsLmdldCgpOwotCi0gICAgICAgICAgICAvLyDlpoLmnpzlt7Lnu4/ngrnotZ7vvIzlj5bmtojngrnotZ4KLSAgICAgICAgICAgIGlmIChjb21tZW50TGlrZS5nZXRJc0xpa2VkKCkpIHsKLSAgICAgICAgICAgICAgICBjb21tZW50TGlrZS5zZXRJc0xpa2VkKGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIC8vIOabtOaWsCBTZWVkQ29tbWVudCDooajkuK3nmoTngrnotZ7mlbAKLSAgICAgICAgICAgICAgICBzZWVkQ29tbWVudC5zZXRMaWtlc0NvdW50KHNlZWRDb21tZW50LmdldExpa2VzQ291bnQoKSAtIDEpOwotICAgICAgICAgICAgICAgIHNlZWRDb21tZW50UmVwb3NpdG9yeS5zYXZlKHNlZWRDb21tZW50KTsKLQotICAgICAgICAgICAgICAgIC8vIOabtOaWsOeCuei1nuiusOW9lQotICAgICAgICAgICAgICAgIHNlZWRDb21tZW50TGlrZXNSZXBvc2l0b3J5LnNhdmUoY29tbWVudExpa2UpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1hcC5vZigic3RhdHVzIiwgInN1Y2Nlc3MiLCAibWVzc2FnZSIsICLmk43kvZzmiJDlip8iLCAibGlrZWQiLCAiZmFsc2UiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g5aaC5p6c5pyq54K56LWe77yM6L+b6KGM54K56LWeCi0gICAgICAgICAgICAgICAgY29tbWVudExpa2Uuc2V0SXNMaWtlZCh0cnVlKTsKLQotICAgICAgICAgICAgICAgIC8vIOabtOaWsCBTZWVkQ29tbWVudCDooajkuK3nmoTngrnotZ7mlbAKLSAgICAgICAgICAgICAgICBzZWVkQ29tbWVudC5zZXRMaWtlc0NvdW50KHNlZWRDb21tZW50LmdldExpa2VzQ291bnQoKSArIDEpOwotICAgICAgICAgICAgICAgIHNlZWRDb21tZW50UmVwb3NpdG9yeS5zYXZlKHNlZWRDb21tZW50KTsKLQotICAgICAgICAgICAgICAgIC8vIOabtOaWsOeCuei1nuiusOW9lQotICAgICAgICAgICAgICAgIHNlZWRDb21tZW50TGlrZXNSZXBvc2l0b3J5LnNhdmUoY29tbWVudExpa2UpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1hcC5vZigic3RhdHVzIiwgInN1Y2Nlc3MiLCAibWVzc2FnZSIsICLmk43kvZzmiJDlip8iLCAibGlrZWQiLCAidHJ1ZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA0NjYxLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVGFza1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MZXZlbDsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRhc2s7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyVGFza1N0YXR1czsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5MZXZlbFJlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVGFza1JlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLUBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgVGFza1NlcnZpY2UgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVGFza1JlcG9zaXRvcnkgdGFza1JlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkgdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlclJlcG9zaXRvcnkgdXNlclJlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBMZXZlbFJlcG9zaXRvcnkgbGV2ZWxSZXBvc2l0b3J5OwotCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsVGFza3NGb3JVc2VyKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPluaJgOacieS7u+WKoQotICAgICAgICBMaXN0PFRhc2s+IHRhc2tzID0gdGFza1JlcG9zaXRvcnkuZmluZEFsbCgpOwotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHRhc2tMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICAgICAgZm9yIChUYXNrIHRhc2sgOiB0YXNrcykgewotICAgICAgICAgICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IHVzZXJUYXNrU3RhdHVzID0gdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5Ci0gICAgICAgICAgICAgICAgICAgIC5maW5kQnlVc2VySWRBbmRUYXNrSWQodXNlcklkLCB0YXNrLmdldFRhc2tJZCgpKTsKLQotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiB0YXNrRGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgidGFza19pZCIsIHRhc2suZ2V0VGFza0lkKCkpOwotICAgICAgICAgICAgdGFza0RhdGEucHV0KCJ0aXRsZSIsIHRhc2suZ2V0VGl0bGUoKSk7Ci0gICAgICAgICAgICB0YXNrRGF0YS5wdXQoImRlc2NyaXB0aW9uIiwgdGFzay5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgic3RhdHVzIiwgdXNlclRhc2tTdGF0dXMuaXNQcmVzZW50KCkgPyB1c2VyVGFza1N0YXR1cy5nZXQoKS5nZXRTdGF0dXMoKSA6ICJwZW5kaW5nIik7Ci0gICAgICAgICAgICB0YXNrRGF0YS5wdXQoInByb2dyZXNzIiwgdXNlclRhc2tTdGF0dXMuaXNQcmVzZW50KCkgPyB1c2VyVGFza1N0YXR1cy5nZXQoKS5nZXRDdXJyZW50UHJvZ3Jlc3MoKSA6IDApOwotCi0gICAgICAgICAgICAvLyDlpZblirEKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IHJld2FyZCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJld2FyZC5wdXQoImV4cGVyaWVuY2UiLCB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7Ci0gICAgICAgICAgICByZXdhcmQucHV0KCJwb2ludHMiLCB0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLSAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgicmV3YXJkIiwgcmV3YXJkKTsKLQotICAgICAgICAgICAgdGFza0xpc3QuYWRkKHRhc2tEYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidGFza3MiLCB0YXNrTGlzdCk7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1cGRhdGVUYXNrU3RhdHVzKExvbmcgdXNlcklkLCBTdHJpbmcgdGFza0lkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S7u+WKoeeKtuaAgQotICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXNPcHQgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkQW5kVGFza0lkKHVzZXJJZCwgdGFza0lkKTsKLSAgICAgICAgVXNlclRhc2tTdGF0dXMgdXNlclRhc2tTdGF0dXMgPSB1c2VyVGFza1N0YXR1c09wdC5nZXQoKTsKLQotICAgICAgICAvLyDmo4Dmn6Xku7vliqHov5vluqYKLSAgICAgICAgaWYgKHVzZXJUYXNrU3RhdHVzLmdldEN1cnJlbnRQcm9ncmVzcygpID09IDEwMGYpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFRhc2s+IHRhc2tPcHQgPSB0YXNrUmVwb3NpdG9yeS5maW5kQnlJZCh0YXNrSWQpOwotICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLQotICAgICAgICAgICAgLy8g5pu05paw5Lu75Yqh54q25oCB5Li65bey5a6M5oiQCi0gICAgICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRTdGF0dXMoImNvbXBsZXRlZCIpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudEV4cGVyaWVuY2UodGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCkpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudFBvaW50cyh0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLQotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LnNhdmUodXNlclRhc2tTdGF0dXMpOwotCi0gICAgICAgICAgICAvLyDmnoTlu7rov5Tlm57mlbDmja4KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh54q25oCB5bey5pu05pawIik7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IGN1cnJlbnRSZXdhcmQgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBjdXJyZW50UmV3YXJkLnB1dCgiY3VycmVudF9leHBlcmllbmNlIiwgdGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCkpOwotICAgICAgICAgICAgY3VycmVudFJld2FyZC5wdXQoImN1cnJlbnRfcG9pbnRzIiwgdGFzay5nZXRSZXdhcmRQb2ludHMoKSk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfcmV3YXJkIiwgY3VycmVudFJld2FyZCk7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh5pyq5a6M5oiQ77yM5peg5rOV5pu05paw54q25oCBIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFVzZXJFeHBlcmllbmNlKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S/oeaBrwotICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCk7Ci0gICAgICAgIGlmICghdXNlck9wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnlKjmiLfkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHQuZ2V0KCk7Ci0gICAgICAgIEludGVnZXIgY3VycmVudEV4cGVyaWVuY2UgPSB1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCk7Ci0gICAgICAgIE9wdGlvbmFsPExldmVsPiBsZXZlbE9wdCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VyLmdldExldmVsKCkpOwotICAgICAgICBTdHJpbmcgbGV2ZWxOYW1lID0gbGV2ZWxPcHQuaXNQcmVzZW50KCkgPyBsZXZlbE9wdC5nZXQoKS5nZXRMZXZlbE5hbWUoKSA6ICLmnKrnn6XnrYnnuqciOwotCi0gICAgICAgIExpc3Q8VXNlclRhc2tTdGF0dXM+IGNvbXBsZXRlZFRhc2tzID0gdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZFN0YXR1cyh1c2VySWQsICJjb21wbGV0ZWQiKTsKLQotICAgICAgICBpbnQgdG90YWxFeHBlcmllbmNlID0gMDsKLSAgICAgICAgaW50IHRvdGFsUG9pbnRzID0gMDsKLSAgICAgICAgZm9yIChVc2VyVGFza1N0YXR1cyB0YXNrU3RhdHVzIDogY29tcGxldGVkVGFza3MpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFRhc2s+IHRhc2tPcHQgPSB0YXNrUmVwb3NpdG9yeS5maW5kQnlJZCh0YXNrU3RhdHVzLmdldFRhc2tJZCgpKTsKLSAgICAgICAgICAgIGlmICh0YXNrT3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLSAgICAgICAgICAgICAgICB0b3RhbEV4cGVyaWVuY2UgKz0gdGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG90YWxQb2ludHMgKz0gdGFzay5nZXRSZXdhcmRQb2ludHMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIOaehOW7uui/lOWbnuaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIGN1cnJlbnRFeHBlcmllbmNlKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJsZXZlbCIsIGxldmVsTmFtZSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidGFza3NfY29tcGxldGVkIiwgY29tcGxldGVkVGFza3Muc2l6ZSgpKTsKLQotICAgICAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiByZXdhcmQgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJld2FyZC5wdXQoImV4cGVyaWVuY2UiLCB0b3RhbEV4cGVyaWVuY2UpOwotICAgICAgICByZXdhcmQucHV0KCJwb2ludHMiLCB0b3RhbFBvaW50cyk7Ci0KLSAgICAgICAgcmVzcG9uc2UucHV0KCJyZXdhcmQiLCByZXdhcmQpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXROZXdTdGVwKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+eahOesrOS4gOS4quacquWujOaIkOS7u+WKoQotICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXNPcHQgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEZpcnN0QnlVc2VySWRBbmRTdGF0dXModXNlcklkLCAicGVuZGluZyIpOwotCi0gICAgICAgIGlmICghdXNlclRhc2tTdGF0dXNPcHQuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi55So5oi35b2T5YmN5rKh5pyJ5pyq5a6M5oiQ55qE5Lu75YqhIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgfQotCi0gICAgICAgIFVzZXJUYXNrU3RhdHVzIHVzZXJUYXNrU3RhdHVzID0gdXNlclRhc2tTdGF0dXNPcHQuZ2V0KCk7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSB1c2VyVGFza1N0YXR1cy5nZXRUYXNrSWQoKTsKLQotICAgICAgICAvLyDojrflj5bor6Xku7vliqHnmoTmj4/ov7AKLSAgICAgICAgT3B0aW9uYWw8VGFzaz4gdGFza09wdCA9IHRhc2tSZXBvc2l0b3J5LmZpbmRCeUlkKHRhc2tJZCk7Ci0gICAgICAgIGlmICghdGFza09wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLQotICAgICAgICAvLyDojrflj5bmgLvku7vliqHmlbAKLSAgICAgICAgbG9uZyB0b3RhbFRhc2tzID0gdGFza1JlcG9zaXRvcnkuY291bnQoKTsKLQotICAgICAgICAvLyDmnoTlu7rov5Tlm57mlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X3N0ZXAiLCB0YXNrSWQpOwotICAgICAgICByZXNwb25zZS5wdXQoInRvdGFsX3N0ZXBzIiwgdG90YWxUYXNrcyk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RlcF9kZXNjcmlwdGlvbiIsIHRhc2suZ2V0RGVzY3JpcHRpb24oKSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZVRhc2tQcm9ncmVzcyhMb25nIHVzZXJJZCwgU3RyaW5nIHRhc2tJZCwgSW50ZWdlciBwcm9ncmVzcykgewotICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXNPcHQgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkQW5kVGFza0lkKHVzZXJJZCwgdGFza0lkKTsKLQotICAgICAgICBpZiAoIXVzZXJUYXNrU3RhdHVzT3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeS4jeWtmOWcqOaIluivpeS7u+WKoeS4jeWxnuS6jueUqOaItyIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBVc2VyVGFza1N0YXR1cyB1c2VyVGFza1N0YXR1cyA9IHVzZXJUYXNrU3RhdHVzT3B0LmdldCgpOwotICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRDdXJyZW50UHJvZ3Jlc3MoRmxvYXQudmFsdWVPZihwcm9ncmVzcykpOwotICAgICAgICB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuc2F2ZSh1c2VyVGFza1N0YXR1cyk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIui/m+W6puW3suabtOaWsCIpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjbGFpbVJld2FyZChMb25nIHVzZXJJZCwgU3RyaW5nIHRhc2tJZCkgewotICAgICAgICAvLyDojrflj5bnlKjmiLfku7vliqHnirbmgIEKLSAgICAgICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IHVzZXJUYXNrU3RhdHVzT3B0ID0gdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZFRhc2tJZCh1c2VySWQsIHRhc2tJZCk7Ci0KLSAgICAgICAgaWYgKCF1c2VyVGFza1N0YXR1c09wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHnirbmgIHkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgVXNlclRhc2tTdGF0dXMgdXNlclRhc2tTdGF0dXMgPSB1c2VyVGFza1N0YXR1c09wdC5nZXQoKTsKLQotICAgICAgICBpZiAodXNlclRhc2tTdGF0dXMuZ2V0Q3VycmVudFByb2dyZXNzKCkgPT0gMTAwZikgewotICAgICAgICAgICAgaWYgKHVzZXJUYXNrU3RhdHVzLmdldElzUmV3YXJkQ2xhaW1lZCgpKSB7Ci0gICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWlluWKseW3sue7j+mihuWPlui/h+S6hiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBPcHRpb25hbDxUYXNrPiB0YXNrT3B0ID0gdGFza1JlcG9zaXRvcnkuZmluZEJ5SWQodGFza0lkKTsKLSAgICAgICAgICAgIGlmICghdGFza09wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKLSAgICAgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLQotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0SXNSZXdhcmRDbGFpbWVkKHRydWUpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudEV4cGVyaWVuY2UodGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCkpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudFBvaW50cyh0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLQotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LnNhdmUodXNlclRhc2tTdGF0dXMpOwotCi0gICAgICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoIXVzZXJPcHQuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi55So5oi35LiN5a2Y5ZyoIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyT3B0LmdldCgpOwotCi0gICAgICAgICAgICAvLyDlsIbku7vliqHlpZblirHliqDliLDnlKjmiLfnmoTnp6/liIblkoznu4/pqowKLSAgICAgICAgICAgIHVzZXIuc2V0VXNlclBvaW50cyh1c2VyLmdldFVzZXJQb2ludHMoKSArIHRhc2suZ2V0UmV3YXJkUG9pbnRzKCkpOwotICAgICAgICAgICAgdXNlci5zZXRDdXJyZW50RXhwZXJpZW5jZSh1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkgKyB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7Ci0KLSAgICAgICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5aWW5Yqx5bey6aKG5Y+WIik7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IHJld2FyZCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJld2FyZC5wdXQoImV4cGVyaWVuY2UiLCB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7Ci0gICAgICAgICAgICByZXdhcmQucHV0KCJwb2ludHMiLCB0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgicmV3YXJkIiwgcmV3YXJkKTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHmnKrlrozmiJDvvIzml6Dms5Xpooblj5blpZblirEiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY2hlY2tSZXdhcmRTdGF0dXMoTG9uZyB1c2VySWQsIFN0cmluZyB0YXNrSWQpIHsKLSAgICAgICAgLy8g6I635Y+W55So5oi35Lu75Yqh54q25oCBCi0gICAgICAgIE9wdGlvbmFsPFVzZXJUYXNrU3RhdHVzPiB1c2VyVGFza1N0YXR1c09wdCA9IHVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5maW5kQnlVc2VySWRBbmRUYXNrSWQodXNlcklkLCB0YXNrSWQpOwotCi0gICAgICAgIGlmICghdXNlclRhc2tTdGF0dXNPcHQuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh54q25oCB5LiN5a2Y5ZyoIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgfQotCi0gICAgICAgIFVzZXJUYXNrU3RhdHVzIHVzZXJUYXNrU3RhdHVzID0gdXNlclRhc2tTdGF0dXNPcHQuZ2V0KCk7Ci0KLSAgICAgICAgLy8g5qOA5p+l5aWW5Yqx5piv5ZCm5bey6aKG5Y+WCi0gICAgICAgIGlmICh1c2VyVGFza1N0YXR1cy5nZXRJc1Jld2FyZENsYWltZWQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInJld2FyZF9pc3N1ZWQiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHlpZblirHlt7Looqvpooblj5YiKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInJld2FyZF9ub3RfaXNzdWVkIik7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHlpZblirHmnKrooqvpooblj5YiKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVG9ycmVudFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVG9ycmVudFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDE4MDRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Ub3JyZW50U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuUmVzdWx0OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVG9ycmVudEVudGl0eTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRVcGxvYWRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLlRvcnJlbnRVcGRhdGVEVE87CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgaW50ZXJmYWNlIFRvcnJlbnRTZXJ2aWNlIHsKKyAgICBMaXN0PFRvcnJlbnRFbnRpdHk+IHNlYXJjaChUb3JyZW50UGFyYW0gcGFyYW0pOworICAgIAorICAgIFRvcnJlbnRFbnRpdHkgc2VsZWN0QnlTZWVkSWQoTG9uZyBzZWVkSWQpOworICAgIAorICAgIHZvaWQgdXBsb2FkVG9ycmVudChNdWx0aXBhcnRGaWxlIGZpbGUsIFRvcnJlbnRVcGxvYWRQYXJhbSBwYXJhbSkgdGhyb3dzIElPRXhjZXB0aW9uOworICAgIAorICAgIGJ5dGVbXSBmZXRjaChMb25nIHNlZWRJZCwgU3RyaW5nIHBhc3NrZXkpIHRocm93cyBJT0V4Y2VwdGlvbjsKKyAgICAKKyAgICBSZXN1bHQgZmF2b3JpdGUoTG9uZyBzZWVkSWQsIExvbmcgdXNlcklkKTsKKyAgICAKKyAgICB2b2lkIGRlbGV0ZVRvcnJlbnQoTG9uZyBzZWVkSWQpOworICAgIAorICAgIHZvaWQgdXBkYXRlVG9ycmVudChMb25nIHNlZWRJZCwgVG9ycmVudFVwZGF0ZURUTyB1cGRhdGVEVE8pOworICAgIAorICAgIGJvb2xlYW4gY2FuVXNlckRlbGV0ZVRvcnJlbnQoTG9uZyBzZWVkSWQsIExvbmcgdXNlcklkKTsKKyAgICAKKyAgICBib29sZWFuIGNhblVzZXJVcGRhdGVUb3JyZW50KExvbmcgc2VlZElkLCBMb25nIHVzZXJJZCk7CisgICAgCisgICAgYm9vbGVhbiBjaGVja1VzZXJVcGxvYWRSYXRpbyhMb25nIHVzZXJJZCk7CisgICAgCisgICAgZG91YmxlIGNhbGN1bGF0ZURvd25sb2FkU2l6ZShMb25nIHRvcnJlbnRJZCwgTG9uZyB1c2VySWQpOworICAgIAorICAgIHZvaWQgcmVjb3JkRG93bmxvYWQoTG9uZyB0b3JyZW50SWQsIExvbmcgdXNlcklkLCBkb3VibGUgZG93bmxvYWRTaXplKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckRldGFpbHNTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJEZXRhaWxzU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDRkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJEZXRhaWxzU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKKworcHVibGljIGNsYXNzIFVzZXJEZXRhaWxzU2VydmljZSB7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJGb2xsb3dTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJGb2xsb3dTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjJiNDguLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyRm9sbG93U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckZvbGxvdzsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyRm9sbG93UmVwb3NpdG9yeTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotQFNlcnZpY2UKLXB1YmxpYyBjbGFzcyBVc2VyRm9sbG93U2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyRm9sbG93UmVwb3NpdG9yeSB1c2VyRm9sbG93UmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCi0gICAgLy8g55So5oi35YWz5rOo5pON5L2cCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZm9sbG93KExvbmcgZm9sbG93ZXJJZCwgTG9uZyBmb2xsb3dlZElkKSB7Ci0gICAgICAgIGlmIChmb2xsb3dlcklkLmVxdWFscyhmb2xsb3dlZElkKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5LiN6IO95YWz5rOo6Ieq5bexIik7Ci0gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7LlhbPms6jor6XnlKjmiLcKLSAgICAgICAgVXNlckZvbGxvdyBleGlzdGluZ0ZvbGxvdyA9IHVzZXJGb2xsb3dSZXBvc2l0b3J5LmZpbmRCeUZvbGxvd2VySWRBbmRGb2xsb3dlZElkKGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpOwotICAgICAgICBpZiAoZXhpc3RpbmdGb2xsb3cgPT0gbnVsbCkgewotICAgICAgICAgICAgLy8g5Yib5bu65paw55qE5YWz5rOo6K6w5b2VCi0gICAgICAgICAgICBVc2VyRm9sbG93IHVzZXJGb2xsb3cgPSBuZXcgVXNlckZvbGxvdygpOwotICAgICAgICAgICAgdXNlckZvbGxvdy5zZXRGb2xsb3dlcklkKGZvbGxvd2VySWQpOwotICAgICAgICAgICAgdXNlckZvbGxvdy5zZXRGb2xsb3dlZElkKGZvbGxvd2VkSWQpOwotICAgICAgICAgICAgdXNlckZvbGxvdy5zZXRGb2xsb3dUaW1lKG5ldyBqYXZhLnV0aWwuRGF0ZSgpKTsKLQotICAgICAgICAgICAgdXNlckZvbGxvd1JlcG9zaXRvcnkuc2F2ZSh1c2VyRm9sbG93KTsKLQotICAgICAgICAgICAgLy8g6L+U5Zue5YWz5rOo5oiQ5Yqf5ZON5bqUCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWFs+azqOaIkOWKnyIpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5bey57uP5YWz5rOo6K+l55So5oi3Iik7Ci0gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyDlj5bmtojlhbPms6jmk43kvZwKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1bmZvbGxvdyhMb25nIGZvbGxvd2VySWQsIExvbmcgZm9sbG93ZWRJZCkgewotICAgICAgICBVc2VyRm9sbG93IHVzZXJGb2xsb3cgPSB1c2VyRm9sbG93UmVwb3NpdG9yeS5maW5kQnlGb2xsb3dlcklkQW5kRm9sbG93ZWRJZChmb2xsb3dlcklkLCBmb2xsb3dlZElkKTsKLQotICAgICAgICBpZiAodXNlckZvbGxvdyAhPSBudWxsKSB7Ci0gICAgICAgICAgICB1c2VyRm9sbG93UmVwb3NpdG9yeS5kZWxldGUodXNlckZvbGxvdyk7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Y+W5raI5YWz5rOo5oiQ5YqfIik7Ci0gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmnKrmib7liLDlhbPms6jlhbPns7siKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIOiOt+WPluafkOS4queUqOaIt+eahOaJgOacieeyieS4nQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEZvbGxvd2VycyhMb25nIHVzZXJJZCkgewotICAgICAgICBMaXN0PFVzZXJGb2xsb3c+IGZvbGxvd2VycyA9IHVzZXJGb2xsb3dSZXBvc2l0b3J5LmZpbmRCeUZvbGxvd2VkSWQodXNlcklkKTsKLQotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGZvbGxvd2Vyc0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZm9yIChVc2VyRm9sbG93IGZvbGxvdyA6IGZvbGxvd2VycykgewotICAgICAgICAgICAgLy8g6I635Y+W57KJ5Lid55qE55So5oi35L+h5oGvCi0gICAgICAgICAgICBVc2VycyBmb2xsb3dlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGZvbGxvdy5nZXRGb2xsb3dlcklkKCkpLm9yRWxzZShudWxsKTsKLSAgICAgICAgICAgIGlmIChmb2xsb3dlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBmb2xsb3dlckluZm8gPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICAgICAgZm9sbG93ZXJJbmZvLnB1dCgidXNlcl9pZCIsIGZvbGxvd2VyLmdldFVzZXJJZCgpKTsKLSAgICAgICAgICAgICAgICBmb2xsb3dlckluZm8ucHV0KCJ1c2VybmFtZSIsIGZvbGxvd2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICAgICAgICAgIGZvbGxvd2VySW5mby5wdXQoImF2YXRhcl91cmwiLCBmb2xsb3dlci5nZXRBdmF0YXJVcmwoKSk7Ci0gICAgICAgICAgICAgICAgZm9sbG93ZXJzTGlzdC5hZGQoZm9sbG93ZXJJbmZvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIOi/lOWbnuWTjeW6lOaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWwiLCBmb2xsb3dlcnNMaXN0LnNpemUoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgiZm9sbG93ZXJzIiwgZm9sbG93ZXJzTGlzdCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8vIOiOt+WPluafkOS4queUqOaIt+eahOaJgOacieWFs+azqOeUqOaItwotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEZvbGxvd2luZyhMb25nIHVzZXJJZCkgewotICAgICAgICBMaXN0PFVzZXJGb2xsb3c+IGZvbGxvd2luZyA9IHVzZXJGb2xsb3dSZXBvc2l0b3J5LmZpbmRCeUZvbGxvd2VySWQodXNlcklkKTsKLQotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGZvbGxvd2luZ0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZm9yIChVc2VyRm9sbG93IGZvbGxvdyA6IGZvbGxvd2luZykgewotICAgICAgICAgICAgLy8g6I635Y+W6KKr5YWz5rOo55qE55So5oi35L+h5oGvCi0gICAgICAgICAgICBVc2VycyBmb2xsb3dlZFVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChmb2xsb3cuZ2V0Rm9sbG93ZWRJZCgpKS5vckVsc2UobnVsbCk7Ci0gICAgICAgICAgICBpZiAoZm9sbG93ZWRVc2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGZvbGxvd2luZ0luZm8gPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICAgICAgZm9sbG93aW5nSW5mby5wdXQoInVzZXJfaWQiLCBmb2xsb3dlZFVzZXIuZ2V0VXNlcklkKCkpOwotICAgICAgICAgICAgICAgIGZvbGxvd2luZ0luZm8ucHV0KCJ1c2VybmFtZSIsIGZvbGxvd2VkVXNlci5nZXRVc2VybmFtZSgpKTsKLSAgICAgICAgICAgICAgICBmb2xsb3dpbmdJbmZvLnB1dCgiYXZhdGFyX3VybCIsIGZvbGxvd2VkVXNlci5nZXRBdmF0YXJVcmwoKSk7Ci0gICAgICAgICAgICAgICAgZm9sbG93aW5nTGlzdC5hZGQoZm9sbG93aW5nSW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoInRvdGFsIiwgZm9sbG93aW5nTGlzdC5zaXplKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoImZvbGxvd2luZyIsIGZvbGxvd2luZ0xpc3QpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJNZXNzYWdlU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmNjJlNy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJNZXNzYWdlU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJNZXNzYWdlczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyTWVzc2FnZXNSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7Ci0KLUBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgVXNlck1lc3NhZ2VTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJNZXNzYWdlc1JlcG9zaXRvcnkgdXNlck1lc3NhZ2VzUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCi0gICAgLy8g5Y+R6YCB56eB5L+hCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gc2VuZE1lc3NhZ2UoTG9uZyBzZW5kZXJJZCwgTG9uZyByZWNlaXZlcklkLCBTdHJpbmcgY29udGVudCkgewotICAgICAgICBVc2VyTWVzc2FnZXMgbWVzc2FnZSA9IG5ldyBVc2VyTWVzc2FnZXMoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRTZW5kZXJJZChzZW5kZXJJZCk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0UmVjZWl2ZXJJZChyZWNlaXZlcklkKTsKLSAgICAgICAgbWVzc2FnZS5zZXRDb250ZW50KGNvbnRlbnQpOwotICAgICAgICBtZXNzYWdlLnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIFVzZXJNZXNzYWdlcyBzYXZlZE1lc3NhZ2UgPSB1c2VyTWVzc2FnZXNSZXBvc2l0b3J5LnNhdmUobWVzc2FnZSk7Ci0KLSAgICAgICAgLy8g6L+U5Zue5ZON5bqUCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuengeS/oeWPkemAgeaIkOWKnyIpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2VfaWQiLCBzYXZlZE1lc3NhZ2UuZ2V0TWVzc2FnZUlkKCkpOwotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5b2T5YmN55So5oi355qE5omA5pyJ5raI5oGvCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0VXNlck1lc3NhZ2VzKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOafpeivouW9k+WJjeeUqOaIt+WPkemAgeWSjOaOpeaUtueahOaJgOaciea2iOaBrwotICAgICAgICBMaXN0PFVzZXJNZXNzYWdlcz4gbWVzc2FnZXMgPSB1c2VyTWVzc2FnZXNSZXBvc2l0b3J5LmZpbmRCeVNlbmRlcklkT3JSZWNlaXZlcklkKHVzZXJJZCwgdXNlcklkKTsKLQotICAgICAgICAvLyDojrflj5blj5HpgIHogIXlkozmjqXmlLbogIXnmoTnlKjmiLflkI0KLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBtZXNzYWdlRGV0YWlscyA9IG1lc3NhZ2VzLnN0cmVhbSgpCi0gICAgICAgICAgICAgICAgLm1hcChtZXNzYWdlIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtZXNzYWdlTWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgibWVzc2FnZV9pZCIsIG1lc3NhZ2UuZ2V0TWVzc2FnZUlkKCkpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgic2VuZGVyX2lkIiwgbWVzc2FnZS5nZXRTZW5kZXJJZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZU1hcC5wdXQoInJlY2VpdmVyX2lkIiwgbWVzc2FnZS5nZXRSZWNlaXZlcklkKCkpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgiY29udGVudCIsIG1lc3NhZ2UuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZU1hcC5wdXQoInRpbWVzdGFtcCIsIG1lc3NhZ2UuZ2V0VGltZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNlbmRlclVzZXJuYW1lID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZS5nZXRTZW5kZXJJZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAodXNlciAtPiB1c2VyLmdldFVzZXJuYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9yRWxzZSgiVW5rbm93biIpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgic2VuZGVyX3VzZXJuYW1lIiwgc2VuZGVyVXNlcm5hbWUpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVjZWl2ZXJVc2VybmFtZSA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKG1lc3NhZ2UuZ2V0UmVjZWl2ZXJJZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAodXNlciAtPiB1c2VyLmdldFVzZXJuYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9yRWxzZSgiVW5rbm93biIpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgicmVjZWl2ZXJfdXNlcm5hbWUiLCByZWNlaXZlclVzZXJuYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZU1hcDsKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlcyIsIG1lc3NhZ2VEZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8vIOiOt+WPluWNleadoea2iOaBr+eahOivpuaDhQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldE1lc3NhZ2UoTG9uZyBtZXNzYWdlSWQpIHsKLSAgICAgICAgT3B0aW9uYWw8VXNlck1lc3NhZ2VzPiBvcHRpb25hbE1lc3NhZ2UgPSB1c2VyTWVzc2FnZXNSZXBvc2l0b3J5LmZpbmRCeUlkKG1lc3NhZ2VJZCk7Ci0KLSAgICAgICAgaWYgKG9wdGlvbmFsTWVzc2FnZS5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgVXNlck1lc3NhZ2VzIG1lc3NhZ2UgPSBvcHRpb25hbE1lc3NhZ2UuZ2V0KCk7Ci0KLSAgICAgICAgICAgIC8vIOiOt+WPluWPkemAgeiAheWSjOaOpeaUtuiAheeahOeUqOaIt+WQjQotICAgICAgICAgICAgU3RyaW5nIHNlbmRlclVzZXJuYW1lID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZS5nZXRTZW5kZXJJZCgpKQotICAgICAgICAgICAgICAgICAgICAubWFwKHVzZXIgLT4gdXNlci5nZXRVc2VybmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAub3JFbHNlKCJVbmtub3duIik7Ci0gICAgICAgICAgICBTdHJpbmcgcmVjZWl2ZXJVc2VybmFtZSA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKG1lc3NhZ2UuZ2V0UmVjZWl2ZXJJZCgpKQotICAgICAgICAgICAgICAgICAgICAubWFwKHVzZXIgLT4gdXNlci5nZXRVc2VybmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAub3JFbHNlKCJVbmtub3duIik7Ci0KLSAgICAgICAgICAgIC8vIOaehOW7uuWTjeW6lOaVsOaNrgotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbWVzc2FnZURldGFpbHMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBtZXNzYWdlRGV0YWlscy5wdXQoIm1lc3NhZ2VfaWQiLCBtZXNzYWdlLmdldE1lc3NhZ2VJZCgpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzLnB1dCgic2VuZGVyX2lkIiwgbWVzc2FnZS5nZXRTZW5kZXJJZCgpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzLnB1dCgic2VuZGVyX3VzZXJuYW1lIiwgc2VuZGVyVXNlcm5hbWUpOwotICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJyZWNlaXZlcl9pZCIsIG1lc3NhZ2UuZ2V0UmVjZWl2ZXJJZCgpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzLnB1dCgicmVjZWl2ZXJfdXNlcm5hbWUiLCByZWNlaXZlclVzZXJuYW1lKTsKLSAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzLnB1dCgiY29udGVudCIsIG1lc3NhZ2UuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzLnB1dCgidGltZXN0YW1wIiwgbWVzc2FnZS5nZXRUaW1lKCkpOwotCi0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCBtZXNzYWdlRGV0YWlscyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICJNZXNzYWdlIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5qYXZhCmluZGV4IDBkMzc4NTQuLjcxNDM1YzcgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEKQEAgLTEsMjY5ICsxLDI1IEBACiBwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwogCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJJbnZpdGVDb2RlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotQFNlcnZpY2UKLXB1YmxpYyBjbGFzcyBVc2VyU2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeSB1c2VySW52aXRlQ29kZVJlcG9zaXRvcnk7Ci0KLSAgICAvLyDnlJ/miJDpgoDor7fnoIEKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZW5lcmF0ZUludml0ZUNvZGUoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g6I635Y+W55So5oi35L+h5oGvCi0gICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpLm9yRWxzZShudWxsKTsKLQotICAgICAgICAvLyDlpoLmnpznlKjmiLfkuI3lrZjlnKjvvIzov5Tlm57plJnor68KLSAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnlKjmiLfkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5qOA5p+l55So5oi355qE6YKA6K+35pWw6YePCi0gICAgICAgIGlmICh1c2VyLmdldEludml0ZUNvdW50KCkgPD0gMCkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmsqHmnInliankvZnnmoTpgoDor7fnoIEiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g55Sf5oiQ5ZSv5LiA55qE6YKA6K+356CBCi0gICAgICAgIFN0cmluZyBpbnZpdGVDb2RlID0gZ2VuZXJhdGVVbmlxdWVJbnZpdGVDb2RlKCk7Ci0KLSAgICAgICAgLy8g5bCG6YKA6K+356CB5L+d5a2Y5YiwIGB1c2VyX2ludml0ZV9jb2RlYCDooagKLSAgICAgICAgVXNlckludml0ZUNvZGUgdXNlckludml0ZUNvZGUgPSBuZXcgVXNlckludml0ZUNvZGUoKTsKLSAgICAgICAgdXNlckludml0ZUNvZGUuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIHVzZXJJbnZpdGVDb2RlLnNldEludml0ZUNvZGUoaW52aXRlQ29kZSk7Ci0gICAgICAgIHVzZXJJbnZpdGVDb2RlLnNldENyZWF0ZWRBdChqYXZhLnRpbWUuTG9jYWxEYXRlVGltZS5ub3coKSk7Ci0KLSAgICAgICAgdXNlckludml0ZUNvZGVSZXBvc2l0b3J5LnNhdmUodXNlckludml0ZUNvZGUpOwotCi0gICAgICAgIC8vIOabtOaWsOeUqOaIt+eahCBgaW52aXRlX2NvdW50YO+8jOWHj+WwkTEKLSAgICAgICAgdXNlci5zZXRJbnZpdGVDb3VudCh1c2VyLmdldEludml0ZUNvdW50KCkgLSAxKTsKLSAgICAgICAgdXNlclJlcG9zaXRvcnkuc2F2ZSh1c2VyKTsKLQotICAgICAgICAvLyDov5Tlm57miJDlip/kv6Hmga8KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6YKA6K+356CB55Sf5oiQ5oiQ5YqfIik7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgiaW52aXRlX2NvZGUiLCBpbnZpdGVDb2RlKTsKLQotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy8g55Sf5oiQ5ZSv5LiA55qE6YKA6K+356CB77yM5L2/55SoMjbkuKrlrZfmr43vvIjlpKflsI/lhpnvvIkKLSAgICBwcml2YXRlIFN0cmluZyBnZW5lcmF0ZVVuaXF1ZUludml0ZUNvZGUoKSB7Ci0gICAgICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwotICAgICAgICBTdHJpbmdCdWlsZGVyIGludml0ZUNvZGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCi0gICAgICAgIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgICAgICAgICAgaW52aXRlQ29kZS5hcHBlbmQoY2hhcmFjdGVycy5jaGFyQXQocmFuZG9tLm5leHRJbnQoY2hhcmFjdGVycy5sZW5ndGgoKSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpbnZpdGVDb2RlLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyByZWdpc3RlclVzZXIoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgZW1haWwsIFN0cmluZyBwYXNzd29yZCwgU3RyaW5nIHJvbGUsIFN0cmluZyBpbnZpdGVDb2RlKSB7Ci0gICAgICAgIC8vIOajgOafpemCrueuseaYr+WQpuW3sue7j+azqOWGjAotICAgICAgICBPcHRpb25hbDxVc2Vycz4gZXhpc3RpbmdFbWFpbFVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlFbWFpbChlbWFpbCk7Ci0gICAgICAgIGlmIChleGlzdGluZ0VtYWlsVXNlci5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgcmV0dXJuICLor6Xpgq7nrrHlt7Looqvms6jlhowiOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5qOA5p+l55So5oi35ZCN5piv5ZCm5bey57uP5a2Y5ZyoCi0gICAgICAgIE9wdGlvbmFsPFVzZXJzPiBleGlzdGluZ1VzZXJuYW1lVXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeVVzZXJuYW1lKHVzZXJuYW1lKTsgLy8g6ZyA6KaB5qC55o2u55So5oi35ZCN5p+l6K+iCi0gICAgICAgIGlmIChleGlzdGluZ1VzZXJuYW1lVXNlci5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgcmV0dXJuICLor6XnlKjmiLflkI3lt7Looqvms6jlhowiOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5qOA5p+l6YKA6K+356CB5piv5ZCm5pyJ5pWICi0gICAgICAgIGlmIChpbnZpdGVDb2RlID09IG51bGwgfHwgaW52aXRlQ29kZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJldHVybiAi6YKA6K+356CB5LiN6IO95Li656m6IjsKLSAgICAgICAgfQotCi0gICAgICAgIE9wdGlvbmFsPFVzZXJJbnZpdGVDb2RlPiBpbnZpdGUgPSB1c2VySW52aXRlQ29kZVJlcG9zaXRvcnkuZmluZEJ5SW52aXRlQ29kZShpbnZpdGVDb2RlKTsKLSAgICAgICAgaWYgKGludml0ZS5pc0VtcHR5KCkgfHwgaW52aXRlLmdldCgpLmdldElzVXNlZCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIumCgOivt+eggeaXoOaViOaIluW3suiiq+S9v+eUqCI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDorr7nva7pu5jorqTnrYnnuqfkuLoy77yI55Sx5LqO6YKA6K+356CB5pyJ5pWI77yJCi0gICAgICAgIExvbmcgbGV2ZWwgPSAyTDsKLQotICAgICAgICAvLyDorr7nva7pu5jorqTlpLTlg48gVVJMCi0gICAgICAgIFN0cmluZyBhdmF0YXJVcmwgPSAiaHR0cHM6Ly9leGFtcGxlLmNvbS9kZWZhdWx0LWF2YXRhci5qcGciOyAgLy8g6buY6K6k5aS05YOPCi0KLSAgICAgICAgLy8g6I635Y+W6YKA6K+356CB5a+55bqU55qE55So5oi3SUQKLSAgICAgICAgVXNlckludml0ZUNvZGUgaW52aXRlRW50aXR5ID0gaW52aXRlLmdldCgpOwotICAgICAgICBMb25nIGludml0ZVVzZXJJZCA9IGludml0ZUVudGl0eS5nZXRVc2VySWQoKTsKLQotICAgICAgICAvLyDliJvlu7rmlrDnlKjmiLcKLSAgICAgICAgVXNlcnMgbmV3VXNlciA9IG5ldyBVc2VycygpOwotICAgICAgICBuZXdVc2VyLnNldFVzZXJuYW1lKHVzZXJuYW1lKTsKLSAgICAgICAgbmV3VXNlci5zZXRFbWFpbChlbWFpbCk7Ci0gICAgICAgIG5ld1VzZXIuc2V0UGFzc3dvcmQocGFzc3dvcmQpOwotICAgICAgICBuZXdVc2VyLnNldFJvbGUocm9sZSk7Ci0gICAgICAgIG5ld1VzZXIuc2V0SW52aXRlQ291bnQoMCk7ICAvLyDliJ3lp4vpgoDor7fnoIHmlbDph4/kuLogMAotICAgICAgICBuZXdVc2VyLnNldExldmVsKGxldmVsKTsKLSAgICAgICAgbmV3VXNlci5zZXRBdmF0YXJVcmwoYXZhdGFyVXJsKTsgIC8vIOiuvue9rum7mOiupOWktOWDjwotICAgICAgICBuZXdVc2VyLnNldFJlZ2lzdHJhdGlvbkRhdGUobmV3IGphdmEudXRpbC5EYXRlKCkpOyAgLy8g6K6+572u5rOo5YaM5pel5pyfCi0gICAgICAgIG5ld1VzZXIuc2V0Q3VycmVudEV4cGVyaWVuY2UoMCk7ICAvLyDpu5jorqTnu4/pqozkuLogMAotICAgICAgICBuZXdVc2VyLnNldEN1cnJlbnRTZWVkaW5nSG91cnMoMGYpOyAgLy8g6buY6K6k5YGa56eN5pe26ZW/5Li6IDAKLSAgICAgICAgbmV3VXNlci5zZXRSZWdpc3RyYXRpb25UaW1lKG5ldyBqYXZhLnV0aWwuRGF0ZSgpKTsgIC8vIOiuvue9ruazqOWGjOaXtumXtOS4uuW9k+WJjeaXtumXtAotCi0gICAgICAgIC8vIOS/neWtmOeUqOaIt+S/oeaBrwotICAgICAgICB1c2VyUmVwb3NpdG9yeS5zYXZlKG5ld1VzZXIpOwotCi0gICAgICAgIC8vIOabtOaWsOmCgOivt+eggeeahOS9v+eUqOeKtuaAgQotICAgICAgICBpbnZpdGVFbnRpdHkuc2V0SXNVc2VkKHRydWUpOwotICAgICAgICB1c2VySW52aXRlQ29kZVJlcG9zaXRvcnkuc2F2ZShpbnZpdGVFbnRpdHkpOwotCi0gICAgICAgIHJldHVybiAi55So5oi35rOo5YaM5oiQ5YqfIjsKLSAgICB9CiAKIAotICAgIHB1YmxpYyBTdHJpbmcgbG9naW5Vc2VyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIC8vIOajgOafpeeUqOaIt+aYr+WQpuWtmOWcqAotICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdGlvbmFsID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5VXNlcm5hbWUodXNlcm5hbWUpOwotICAgICAgICBpZiAodXNlck9wdGlvbmFsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmV0dXJuICLnlKjmiLflkI3kuI3lrZjlnKgiOwotICAgICAgICB9CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmV4dGVuc2lvbi5zZXJ2aWNlLklTZXJ2aWNlOwogCi0gICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyT3B0aW9uYWwuZ2V0KCk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOwogCi0gICAgICAgIC8vIOajgOafpeWvhueggeaYr+WQpuato+ehrgotICAgICAgICBpZiAoIXVzZXIuZ2V0UGFzc3dvcmQoKS5lcXVhbHMocGFzc3dvcmQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIuWvhueggemUmeivryI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDnmbvlvZXmiJDlip8KLSAgICAgICAgcmV0dXJuICLnmbvlvZXmiJDlip8iOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgY2hhbmdlUGFzc3dvcmQoTG9uZyB1c2VySWQsIFN0cmluZyBvbGRQYXNzd29yZCwgU3RyaW5nIG5ld1Bhc3N3b3JkLCBTdHJpbmcgY29uZmlybVBhc3N3b3JkKSB7Ci0gICAgICAgIC8vIOafpeaJvueUqOaItwotICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKS5vckVsc2UobnVsbCk7Ci0KLSAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuICLnlKjmiLfkuI3lrZjlnKgiOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5qOA5p+l5pen5a+G56CB5piv5ZCm5q2j56GuCi0gICAgICAgIGlmICghdXNlci5nZXRQYXNzd29yZCgpLmVxdWFscyhvbGRQYXNzd29yZCkpIHsKLSAgICAgICAgICAgIHJldHVybiAi5pen5a+G56CB6ZSZ6K+vIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOajgOafpeaWsOWvhueggeWSjOehruiupOWvhueggeaYr+WQpuS4gOiHtAotICAgICAgICBpZiAoIW5ld1Bhc3N3b3JkLmVxdWFscyhjb25maXJtUGFzc3dvcmQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIuaWsOWvhueggeS4juehruiupOWvhueggeS4jeS4gOiHtCI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDmm7TmlrDlr4bnoIEKLSAgICAgICAgdXNlci5zZXRQYXNzd29yZChuZXdQYXNzd29yZCk7Ci0gICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7Ci0KLSAgICAgICAgcmV0dXJuICLlr4bnoIHkv67mlLnmiJDlip8iOwotICAgIH0KLQotICAgIC8vIOiOt+WPlueUqOaIt+S4quS6uui1hOaWmQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFByb2ZpbGUoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgT3B0aW9uYWw8VXNlcnM+IHVzZXJPcHRpb25hbCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM6L+U5ZuebnVsbOaIluiAheWPr+S7peaKm+WHuuW8guW4uAotICAgICAgICBpZiAodXNlck9wdGlvbmFsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIOWPr+S7pei/lOWbniBudWxsIOaIluiAheagueaNrumcgOimgei/lOWbnumUmeivr+S/oeaBrwotICAgICAgICB9Ci0KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAvLyDlsIbpnIDopoHnmoTlrZfmrrXmlL7lhaUgTWFwIOS4rQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHByb2ZpbGUgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHByb2ZpbGUucHV0KCJhdmF0YXJVcmwiLCB1c2VyLmdldEF2YXRhclVybCgpKTsKLSAgICAgICAgcHJvZmlsZS5wdXQoInVzZXJuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpKTsKLSAgICAgICAgcHJvZmlsZS5wdXQoImVtYWlsIiwgdXNlci5nZXRFbWFpbCgpKTsKLSAgICAgICAgcHJvZmlsZS5wdXQoImdlbmRlciIsIHVzZXIuZ2V0R2VuZGVyKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgiZGVzY3JpcHRpb24iLCB1c2VyLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgiaG9iYmllcyIsIHVzZXIuZ2V0SG9iYmllcygpKTsKLSAgICAgICAgcHJvZmlsZS5wdXQoImxldmVsIiwgdXNlci5nZXRMZXZlbCgpKTsKLSAgICAgICAgcHJvZmlsZS5wdXQoIkV4cGVyaWVuY2UiLCB1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgidXBsb2FkQ291bnQiLCB1c2VyLmdldFVwbG9hZENvdW50KCkpOwotICAgICAgICBwcm9maWxlLnB1dCgiZG93bmxvYWRDb3VudCIsIHVzZXIuZ2V0RG93bmxvYWRDb3VudCgpKTsKLSAgICAgICAgcHJvZmlsZS5wdXQoInNoYXJlUmF0ZSIsIHVzZXIuZ2V0U2hhcmVSYXRlKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgicmVnaXN0cmF0aW9uVGltZSIsIHVzZXIuZ2V0UmVnaXN0cmF0aW9uVGltZSgpKTsKLQotICAgICAgICByZXR1cm4gcHJvZmlsZTsKLSAgICB9Ci0KLSAgICAvLyDkv67mlLnnlKjmiLfkuKrkurrotYTmlpkKLSAgICBwdWJsaWMgYm9vbGVhbiBlZGl0UHJvZmlsZShMb25nIHVzZXJJZCwgU3RyaW5nIGF2YXRhclVybCwgU3RyaW5nIG5pY2tuYW1lLCBTdHJpbmcgZ2VuZGVyLCBTdHJpbmcgZGVzY3JpcHRpb24sIFN0cmluZyBob2JiaWVzKSB7Ci0gICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0aW9uYWwgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpOwotCi0gICAgICAgIC8vIOWmguaenOeUqOaIt+S4jeWtmOWcqO+8jOi/lOWbnmZhbHNlCi0gICAgICAgIGlmICh1c2VyT3B0aW9uYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIOeUqOaIt+S4jeWtmOWcqAotICAgICAgICB9Ci0KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAvLyDmm7TmlrDnlKjmiLfotYTmlpnvvIzlj6rmnInkvKDlhaXlgLzmiY3kvJrmm7TmlrDlr7nlupTlrZfmrrUKLSAgICAgICAgaWYgKGF2YXRhclVybCAhPSBudWxsKSB7Ci0gICAgICAgICAgICB1c2VyLnNldEF2YXRhclVybChhdmF0YXJVcmwpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuaWNrbmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB1c2VyLnNldFVzZXJuYW1lKG5pY2tuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZ2VuZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHVzZXIuc2V0R2VuZGVyKGdlbmRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIHVzZXIuc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChob2JiaWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHVzZXIuc2V0SG9iYmllcyhob2JiaWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOS/neWtmOabtOaWsOWQjueahOeUqOaIt+S/oeaBrwotICAgICAgICB1c2VyUmVwb3NpdG9yeS5zYXZlKHVzZXIpOwotCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyDmm7TmlrDmiJDlip8KLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjYWxjdWxhdGVTaGFyZVJhdGUoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g5p+l5om+55So5oi3Ci0gICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpLm9yRWxzZShudWxsKTsKLSAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIE1hcC5vZigic3RhdHVzIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAi55So5oi35LiN5a2Y5ZyoIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDojrflj5bkuIrkvKDph4/lkozkuIvovb3ph48KLSAgICAgICAgRmxvYXQgdXBsb2FkQ291bnQgPSB1c2VyLmdldFVwbG9hZENvdW50KCk7Ci0gICAgICAgIEZsb2F0IGRvd25sb2FkQ291bnQgPSB1c2VyLmdldERvd25sb2FkQ291bnQoKTsKLQotICAgICAgICAvLyDorqHnrpfliIbkuqvnjocKLSAgICAgICAgRmxvYXQgc2hhcmVSYXRlID0gMGY7ICAvLyDpu5jorqTliIbkuqvnjofkuLowCi0gICAgICAgIGlmIChkb3dubG9hZENvdW50ICE9IDApIHsKLSAgICAgICAgICAgIHNoYXJlUmF0ZSA9IHVwbG9hZENvdW50IC8gZG93bmxvYWRDb3VudDsgIC8vIOWIhuS6q+eOhyA9IOS4iuS8oOmHjyAvIOS4i+i9vemHjwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5pu05paw55So5oi355qE5YiG5Lqr546HCi0gICAgICAgIHVzZXIuc2V0U2hhcmVSYXRlKHNoYXJlUmF0ZSk7Ci0gICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7Ci0KLSAgICAgICAgLy8g6L+U5Zue57uT5p6cCi0gICAgICAgIHJldHVybiBNYXAub2YoInN0YXR1cyIsICJzdWNjZXNzIiwgIm1lc3NhZ2UiLCAi5YiG5Lqr546H6K6h566X5oiQ5YqfIiwgInNoYXJlUmF0ZSIsIHNoYXJlUmF0ZSk7Ci0gICAgfQorcHVibGljIGludGVyZmFjZSBVc2VyU2VydmljZSBleHRlbmRzIElTZXJ2aWNlPFVzZXI+IHsKKyAgICBVc2VyIGxvZ2luU2VydmljZShTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCk7CiAKIAotfQorICAgIGJvb2xlYW4gcHJlUmVnaXN0ZXJVc2VyKFVzZXIgdXNlcik7CisKKworICAgIGJvb2xlYW4gdmVyaWZ5RW1haWwoU3RyaW5nIGVtYWlsLCBTdHJpbmcgdG9rZW4pOworCisKKyAgICBib29sZWFuIGNoZWNrRW1haWxFeGlzdHMoU3RyaW5nIGVtYWlsKTsKKworICAgIGJvb2xlYW4gY2hlY2tQYXNzd29yZChMb25nIHVzZXJJZCwgU3RyaW5nIHJhd1Bhc3N3b3JkKTsKKworCisvLyAgICBJbnRlZ2VyIGdldFVzZXJJZCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvRW1haWxTZXJ2aWNlSW1wbC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9FbWFpbFNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1MDBlYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvRW1haWxTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKworcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5zZXJ2aWNlSW1wbDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlZlcmlmaWNhdGlvblRva2VuTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVmVyaWZpY2F0aW9uVG9rZW47CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRW1haWxTZXJ2aWNlOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLlZhbHVlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsubWFpbC5qYXZhbWFpbC5KYXZhTWFpbFNlbmRlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLm1haWwuamF2YW1haWwuTWltZU1lc3NhZ2VIZWxwZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CitpbXBvcnQgamF2YXgubWFpbC5NZXNzYWdpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YXgubWFpbC5pbnRlcm5ldC5NaW1lTWVzc2FnZTsKK2ltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgRW1haWxTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEVtYWlsU2VydmljZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEVtYWlsU2VydmljZUltcGwuY2xhc3MpOworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIEphdmFNYWlsU2VuZGVyIG1haWxTZW5kZXI7CisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7CisgICAgQFZhbHVlKCIke3NwcmluZy5tYWlsLnVzZXJuYW1lfSIpICAvLyDku47phY3nva7mlofku7bkuK3ms6jlhaXlj5Hku7bkurrpgq7nrrHlnLDlnYAKKyAgICBwcml2YXRlIFN0cmluZyBmcm9tRW1haWw7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gc2VuZEVtYWlsKFN0cmluZyB0bywgU3RyaW5nIHN1YmplY3QsIFN0cmluZyB0ZXh0KSB7CisgICAgICAgIGxvZy5kZWJ1Zygi5byA5aeL5Y+R6YCB6aqM6K+B6YKu5Lu25Yiw77yae33vvIzkuLvpopjvvJp7fSIsIHRvLCBzdWJqZWN0KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE1pbWVNZXNzYWdlIG1lc3NhZ2UgPSBtYWlsU2VuZGVyLmNyZWF0ZU1pbWVNZXNzYWdlKCk7CisgICAgICAgICAgICBNaW1lTWVzc2FnZUhlbHBlciBoZWxwZXIgPSBuZXcgTWltZU1lc3NhZ2VIZWxwZXIobWVzc2FnZSwgdHJ1ZSk7CisgICAgICAgICAgICBoZWxwZXIuc2V0RnJvbShmcm9tRW1haWwpOworICAgICAgICAgICAgaGVscGVyLnNldFRvKHRvKTsKKyAgICAgICAgICAgIGhlbHBlci5zZXRTdWJqZWN0KHN1YmplY3QpOworICAgICAgICAgICAgaGVscGVyLnNldFRleHQodGV4dCwgdHJ1ZSk7CisgICAgICAgICAgICBtYWlsU2VuZGVyLnNlbmQobWVzc2FnZSk7CisgICAgICAgICAgICBsb2cuaW5mbygi6YKu5Lu25oiQ5Yqf5Y+R6YCB5Yiw77yae30iLCB0byk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoTWVzc2FnaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZy5lcnJvcigi5Y+R6YCB6YKu5Lu25aSx6LSl77yM5pS25Lu25Lq677yae33vvIzplJnor6/kv6Hmga/vvJp7fSIsIHRvLCBlLmdldE1lc3NhZ2UoKSwgZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2VuZFZlcmlmaWNhdGlvbkVtYWlsKFN0cmluZyBlbWFpbCwgU3RyaW5nIHRva2VuKXsKKyAgICAgICAgLy8g5Y+R6YCB6YKu5Lu2CisgICAgICAgIFN0cmluZyBtZXNzYWdlID0gIjxoMT5FbWFpbCBWZXJpZmljYXRpb248L2gxPiIgKworICAgICAgICAgICAgICAgICI8cD5Zb3VyIHZlcmlmaWNhdGlvbiBjb2RlIGlzOiA8Yj4iICsgdG9rZW4gKyAiPC9iPjwvcD4iICsKKyAgICAgICAgICAgICAgICAiPHA+VGhpcyBjb2RlIHdpbGwgZXhwaXJlIGluIDEgaG91ci48L3A+IjsKKyAgICAgICAgc2VuZEVtYWlsKGVtYWlsLCAiVmVyaWZ5IFlvdXIgRW1haWwiLCBtZXNzYWdlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1Byb21vdGlvblNlcnZpY2VJbXBsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1Byb21vdGlvblNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzNGNiYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvUHJvbW90aW9uU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDExNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5zZXJ2aWNlSW1wbDsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUHJvbW90aW9uOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuUHJvbW90aW9uTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlByb21vdGlvblNlcnZpY2U7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0by5Qcm9tb3Rpb25DcmVhdGVEVE87CisKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50cmFuc2FjdGlvbi5hbm5vdGF0aW9uLlRyYW5zYWN0aW9uYWw7CisKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CisKK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgUHJvbW90aW9uU2VydmljZUltcGwgaW1wbGVtZW50cyBQcm9tb3Rpb25TZXJ2aWNlIHsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFByb21vdGlvbk1hcHBlciBwcm9tb3Rpb25NYXBwZXI7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBAVHJhbnNhY3Rpb25hbAorICAgIHB1YmxpYyBQcm9tb3Rpb24gY3JlYXRlUHJvbW90aW9uKFByb21vdGlvbkNyZWF0ZURUTyBwcm9tb3Rpb25EVE8pIHsKKyAgICAgICAgLy8g6aqM6K+B5pe26Ze0CisgICAgICAgIExvY2FsRGF0ZVRpbWUgbm93ID0gTG9jYWxEYXRlVGltZS5ub3coKTsKKyAgICAgICAgaWYgKHByb21vdGlvbkRUTy5nZXRFbmRUaW1lKCkuaXNCZWZvcmUobm93KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIue7k+adn+aXtumXtOS4jeiDveaXqeS6juW9k+WJjeaXtumXtCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g6aqM6K+B56eN5a2QSUTmmK/lkKblrZjlnKgKKyAgICAgICAgdmFsaWRhdGVUb3JyZW50SWRzKHByb21vdGlvbkRUTy5nZXRBcHBsaWNhYmxlVG9ycmVudElkcygpKTsKKworICAgICAgICAvLyDliJvlu7rkv4PplIDmtLvliqgKKyAgICAgICAgUHJvbW90aW9uIHByb21vdGlvbiA9IG5ldyBQcm9tb3Rpb24oKTsKKyAgICAgICAgcHJvbW90aW9uLnNldE5hbWUocHJvbW90aW9uRFRPLmdldE5hbWUoKSk7CisgICAgICAgIHByb21vdGlvbi5zZXREZXNjcmlwdGlvbihwcm9tb3Rpb25EVE8uZ2V0RGVzY3JpcHRpb24oKSk7CisgICAgICAgIHByb21vdGlvbi5zZXRTdGFydFRpbWUocHJvbW90aW9uRFRPLmdldFN0YXJ0VGltZSgpKTsKKyAgICAgICAgcHJvbW90aW9uLnNldEVuZFRpbWUocHJvbW90aW9uRFRPLmdldEVuZFRpbWUoKSk7CisgICAgICAgIHByb21vdGlvbi5zZXREaXNjb3VudFBlcmNlbnRhZ2UocHJvbW90aW9uRFRPLmdldERpc2NvdW50UGVyY2VudGFnZSgpKTsKKworICAgICAgICAvLyDmiopMaXN0PExvbmc+6L2s5o2i5oiQ6YCX5Y+35YiG6ZqU5a2X56ym5LiyCisgICAgICAgIFN0cmluZyBhcHBsaWNhYmxlVG9ycmVudElkc1N0ciA9IHByb21vdGlvbkRUTy5nZXRBcHBsaWNhYmxlVG9ycmVudElkcygpLnN0cmVhbSgpCisgICAgICAgICAgICAgICAgLm1hcChTdHJpbmc6OnZhbHVlT2YpCisgICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy5qb2luaW5nKCIsIikpOworICAgICAgICBwcm9tb3Rpb24uc2V0QXBwbGljYWJsZVRvcnJlbnRJZHMoYXBwbGljYWJsZVRvcnJlbnRJZHNTdHIpOworCisgICAgICAgIHByb21vdGlvbi5zZXRDcmVhdGVUaW1lKG5vdyk7CisgICAgICAgIHByb21vdGlvbi5zZXRVcGRhdGVUaW1lKG5vdyk7CisgICAgICAgIHByb21vdGlvbi5zZXRJc0RlbGV0ZWQoZmFsc2UpOworCisgICAgICAgIHByb21vdGlvbk1hcHBlci5pbnNlcnQocHJvbW90aW9uKTsKKyAgICAgICAgcmV0dXJuIHByb21vdGlvbjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTGlzdDxQcm9tb3Rpb24+IGdldEFsbEFjdGl2ZVByb21vdGlvbnMoKSB7CisgICAgICAgIExvY2FsRGF0ZVRpbWUgbm93ID0gTG9jYWxEYXRlVGltZS5ub3coKTsKKyAgICAgICAgcmV0dXJuIHByb21vdGlvbk1hcHBlci5maW5kQWN0aXZlUHJvbW90aW9ucyhub3cpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBQcm9tb3Rpb24gZ2V0UHJvbW90aW9uQnlJZChMb25nIHByb21vdGlvbklkKSB7CisgICAgICAgIFByb21vdGlvbiBwcm9tb3Rpb24gPSBwcm9tb3Rpb25NYXBwZXIuc2VsZWN0QnlJZChwcm9tb3Rpb25JZCk7CisgICAgICAgIGlmIChwcm9tb3Rpb24gPT0gbnVsbCB8fCBwcm9tb3Rpb24uZ2V0SXNEZWxldGVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9tb3Rpb247CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVQcm9tb3Rpb24oTG9uZyBwcm9tb3Rpb25JZCkgeworICAgICAgICBQcm9tb3Rpb24gcHJvbW90aW9uID0gZ2V0UHJvbW90aW9uQnlJZChwcm9tb3Rpb25JZCk7CisgICAgICAgIGlmIChwcm9tb3Rpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuS/g+mUgOa0u+WKqOS4jeWtmOWcqCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g6L2v5Yig6ZmkCisgICAgICAgIHByb21vdGlvbi5zZXRJc0RlbGV0ZWQodHJ1ZSk7CisgICAgICAgIHByb21vdGlvbi5zZXRVcGRhdGVUaW1lKExvY2FsRGF0ZVRpbWUubm93KCkpOworICAgICAgICBwcm9tb3Rpb25NYXBwZXIudXBkYXRlQnlJZChwcm9tb3Rpb24pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBkb3VibGUgZ2V0Q3VycmVudERpc2NvdW50KExvbmcgdG9ycmVudElkKSB7CisgICAgICAgIExvY2FsRGF0ZVRpbWUgbm93ID0gTG9jYWxEYXRlVGltZS5ub3coKTsKKyAgICAgICAgTGlzdDxQcm9tb3Rpb24+IGFjdGl2ZVByb21vdGlvbnMgPSBwcm9tb3Rpb25NYXBwZXIuZmluZEFjdGl2ZVByb21vdGlvbnNGb3JUb3JyZW50KHRvcnJlbnRJZCwgbm93KTsKKworICAgICAgICAvLyDlpoLmnpzmnInlpJrkuKrkv4PplIDmtLvliqjvvIzlj5bmipjmiaPmnIDlpKfnmoQKKyAgICAgICAgcmV0dXJuIGFjdGl2ZVByb21vdGlvbnMuc3RyZWFtKCkKKyAgICAgICAgICAgICAgICAubWFwVG9Eb3VibGUoUHJvbW90aW9uOjpnZXREaXNjb3VudFBlcmNlbnRhZ2UpCisgICAgICAgICAgICAgICAgLm1heCgpCisgICAgICAgICAgICAgICAgLm9yRWxzZSgwLjApOworICAgIH0KKworICAgIC8qKgorICAgICAqIOmqjOivgeenjeWtkElE5piv5ZCm5a2Y5ZyoCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlVG9ycmVudElkcyhMaXN0PExvbmc+IHRvcnJlbnRJZHMpIHsKKyAgICAgICAgaWYgKHRvcnJlbnRJZHMgPT0gbnVsbCB8fCB0b3JyZW50SWRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIumAgueUqOenjeWtkOWIl+ihqOS4jeiDveS4uuepuiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g5qOA5p+l5omA5pyJ56eN5a2QSUTmmK/lkKbpg73lrZjlnKgKKyAgICAgICAgTGlzdDxMb25nPiBpbnZhbGlkSWRzID0gdG9ycmVudElkcy5zdHJlYW0oKQorICAgICAgICAgICAgICAgIC5maWx0ZXIoaWQgLT4gcHJvbW90aW9uTWFwcGVyLmNoZWNrVG9ycmVudEV4aXN0cyhpZCkgPT0gMCkgIC8vIOaUueaIkCA9PSAwCisgICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisKKyAgICAgICAgaWYgKCFpbnZhbGlkSWRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuS7peS4i+enjeWtkElE5LiN5a2Y5ZyoOiAiICsgaW52YWxpZElkcyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1RvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRjNjVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDI5NiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5zZXJ2aWNlSW1wbDsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVG9ycmVudEVudGl0eTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Ub3JyZW50TWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Ub3JyZW50U2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Qcm9tb3Rpb25TZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8ucGFyYW0uVG9ycmVudFBhcmFtOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8ucGFyYW0uVG9ycmVudFVwbG9hZFBhcmFtOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8uVG9ycmVudFVwZGF0ZURUTzsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5iY29kZWMuQkRlY29kZXI7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuYmNvZGVjLkJFVmFsdWU7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuYmNvZGVjLkJFbmNvZGVyOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNsaWVudC5TaW1wbGVDbGllbnQ7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuY29tbW9uLmNyZWF0aW9uLk1ldGFkYXRhQnVpbGRlcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC50cmFja2VyLlRyYWNrZXI7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQudHJhY2tlci5UcmFja2VkVG9ycmVudDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuUmVzdWx0OworCitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQudHJhY2tlci5UcmFja2VkVG9ycmVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuYmluYXJ5LkhleDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50cmFuc2FjdGlvbi5hbm5vdGF0aW9uLlRyYW5zYWN0aW9uYWw7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkQ29weU9wdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CitpbXBvcnQgamF2YS50aW1lLkxvY2FsVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7CisKK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgVG9ycmVudFNlcnZpY2VJbXBsIGltcGxlbWVudHMgVG9ycmVudFNlcnZpY2UgeworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFRyYWNrZXIgdHJhY2tlcjsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFRvcnJlbnRNYXBwZXIgdG9ycmVudE1hcHBlcjsKKworICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgVHJhY2tlZFRvcnJlbnQ+IHRvcnJlbnRSZWdpc3RyeSA9IG5ldyBIYXNoTWFwPD4oKTsKKworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlck1hcHBlciB1c2VyTWFwcGVyOworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgUHJvbW90aW9uU2VydmljZSBwcm9tb3Rpb25TZXJ2aWNlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE1JTl9VUExPQURfUkFUSU8gPSAwLjU7IC8vIOacgOWwj+S4iuS8oOavlOS+i+imgeaxggorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIExpc3Q8VG9ycmVudEVudGl0eT4gc2VhcmNoKFRvcnJlbnRQYXJhbSBwYXJhbSkgeworICAgICAgICByZXR1cm4gdG9ycmVudE1hcHBlci5zZWFyY2gocGFyYW0pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBUb3JyZW50RW50aXR5IHNlbGVjdEJ5U2VlZElkKExvbmcgc2VlZElkKSB7CisgICAgICAgIHJldHVybiB0b3JyZW50TWFwcGVyLnNlbGVjdEJ5SWQoc2VlZElkKTsKKyAgICB9CisgICAgcHJpdmF0ZSBmaW5hbCBFeGVjdXRvclNlcnZpY2Ugc2VlZGVyRXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3Q2FjaGVkVGhyZWFkUG9vbCgpOworCisgICAgQE92ZXJyaWRlCisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBwdWJsaWMgdm9pZCB1cGxvYWRUb3JyZW50KE11bHRpcGFydEZpbGUgZmlsZSwgVG9ycmVudFVwbG9hZFBhcmFtIHBhcmFtKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyDpqozor4HnlKjmiLfmnYPpmZAKKyAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RCeUlkKHBhcmFtLmdldFVwbG9hZGVyKCkpOworICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigi55So5oi35LiN5a2Y5ZyoIik7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHdvcmtpbmdEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIik7CisgICAgICAgIFBhdGggb3JpZ2luYWxEaXIgPSBQYXRocy5nZXQod29ya2luZ0RpciwgImRhdGEiLCAiZmlsZXMiKTsKKyAgICAgICAgRmlsZXMuY3JlYXRlRGlyZWN0b3JpZXMob3JpZ2luYWxEaXIpOworICAgICAgICBQYXRoIG9yaWdpbmFsRmlsZVBhdGggPSBvcmlnaW5hbERpci5yZXNvbHZlKGZpbGUuZ2V0T3JpZ2luYWxGaWxlbmFtZSgpKTsKKyAgICAgICAgRmlsZXMuY29weShmaWxlLmdldElucHV0U3RyZWFtKCksIG9yaWdpbmFsRmlsZVBhdGgsIFN0YW5kYXJkQ29weU9wdGlvbi5SRVBMQUNFX0VYSVNUSU5HKTsKKworICAgICAgICBNZXRhZGF0YUJ1aWxkZXIgYnVpbGRlciA9IG5ldyBNZXRhZGF0YUJ1aWxkZXIoKQorICAgICAgICAgICAgICAgIC5hZGRGaWxlKG9yaWdpbmFsRmlsZVBhdGgudG9GaWxlKCksIGZpbGUuZ2V0T3JpZ2luYWxGaWxlbmFtZSgpKSAvLyDmt7vliqDljp/lp4vmlofku7YKKyAgICAgICAgICAgICAgICAuc2V0VHJhY2tlcigiICIpIC8vIOiuvue9rlRyYWNrZXLlnLDlnYAKKyAgICAgICAgICAgICAgICAuc2V0UGllY2VMZW5ndGgoNTEyICogMTAyNCkgLy8g5YiG54mH5aSn5bCPNTEyS0IKKyAgICAgICAgICAgICAgICAuc2V0Q29tbWVudCgiR2VuZXJhdGVkIGJ5IFBU56uZIikKKyAgICAgICAgICAgICAgICAuc2V0Q3JlYXRlZEJ5KCJQVC1TZXJ2ZXIiKTsKKworICAgICAgICAvLyDlpITnkIbnp43lrZDmlofku7YKKyAgICAgICAgYnl0ZVtdIHRvcnJlbnRCeXRlcyA9IGZpbGUuZ2V0Qnl0ZXMoKTsKKyAgICAgICAgU3RyaW5nIGluZm9IYXNoID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluZm9IYXNoID0gY2FsY3VsYXRlSW5mb0hhc2godG9ycmVudEJ5dGVzKTsKKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisKKyAgICAgICAgLy8g5L+d5a2Y56eN5a2Q5paH5Lu25YiwZGF0YS90b3JyZW50c+ebruW9lQorICAgICAgICBQYXRoIHRvcnJlbnREaXIgPSBQYXRocy5nZXQod29ya2luZ0RpciwgImRhdGEiLCAidG9ycmVudHMiKTsKKyAgICAgICAgRmlsZXMuY3JlYXRlRGlyZWN0b3JpZXModG9ycmVudERpcik7CisgICAgICAgIFBhdGggdG9ycmVudFBhdGggPSB0b3JyZW50RGlyLnJlc29sdmUoaW5mb0hhc2ggKyAiLnRvcnJlbnQiKTsKKyAgICAgICAgRmlsZXMuY29weShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0odG9ycmVudEJ5dGVzKSwgdG9ycmVudFBhdGgsIFN0YW5kYXJkQ29weU9wdGlvbi5SRVBMQUNFX0VYSVNUSU5HKTsKKworICAgICAgICAvLyDms6jlhozliLBUcmFja2VyCisgICAgICAgIFRyYWNrZWRUb3JyZW50IHRvcnJlbnQgPSBUcmFja2VkVG9ycmVudC5sb2FkKHRvcnJlbnRQYXRoLnRvRmlsZSgpKTsKKyAgICAgICAgdHJhY2tlci5hbm5vdW5jZSh0b3JyZW50KTsKKworCisgICAgICAgIC8vIOW8guatpeWQr+WKqOWBmuenjeWuouaIt+errworICAgICAgICBzZWVkZXJFeGVjdXRvci5zdWJtaXQoKCkgLT4geworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGFydFNlZWRpbmcodG9ycmVudFBhdGgsIG9yaWdpbmFsRGlyKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgUmVzdWx0LmVycm9yKCLlgZrnp43lpLHotKU6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisKKworCisgICAgICAgIC8vIOS/neWtmOenjeWtkOS/oeaBrworICAgICAgICBUb3JyZW50RW50aXR5IGVudGl0eT0gbmV3IFRvcnJlbnRFbnRpdHkoKTsKKyAgICAgICAgZW50aXR5LnNldFVwbG9hZGVyKHBhcmFtLmdldFVwbG9hZGVyKCkpOworICAgICAgICBlbnRpdHkuc2V0RmlsZU5hbWUoZmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCkpOworICAgICAgICBlbnRpdHkuc2V0U2l6ZShmaWxlLmdldFNpemUoKSk7CisgICAgICAgIGVudGl0eS5zZXRDYXRlZ29yeShwYXJhbS5nZXRDYXRlZ29yeSgpKTsKKyAgICAgICAgZW50aXR5LnNldFRhZ3MocGFyYW0uZ2V0VGFncygpKTsKKyAgICAgICAgZW50aXR5LnNldFRpdGxlKHBhcmFtLmdldFRpdGxlKCkpOworICAgICAgICBlbnRpdHkuc2V0SW1hZ2VVcmwocGFyYW0uZ2V0SW1hZ2VVcmwoKSk7CisgICAgICAgIGVudGl0eS5zZXRUb3JyZW50RmlsZSh0b3JyZW50Qnl0ZXMpOworICAgICAgICBlbnRpdHkuc2V0SW5mb0hhc2goaW5mb0hhc2gpOworCisgICAgICAgIHRvcnJlbnRNYXBwZXIuaW5zZXJ0KGVudGl0eSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJ5dGVbXSBmZXRjaChMb25nIHNlZWRJZCwgU3RyaW5nIHBhc3NrZXkpIHsKKyAgICAgICAgVG9ycmVudEVudGl0eSB0b3JyZW50ID0gc2VsZWN0QnlTZWVkSWQoc2VlZElkKTsKKyAgICAgICAgaWYgKHRvcnJlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuenjeWtkOS4jeWtmOWcqCIpOworICAgICAgICB9CisKKyAgICAgICAgYnl0ZVtdIHRvcnJlbnRCeXRlcyA9IHRvcnJlbnQuZ2V0VG9ycmVudEZpbGUoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gMS4g6Kej56CBIC50b3JyZW50IOaWh+S7tuS4uiBNYXAKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJFVmFsdWU+IGRlY29kZWQgPSBCRGVjb2Rlci5iZGVjb2RlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSh0b3JyZW50Qnl0ZXMpKS5nZXRNYXAoKTsKKworICAgICAgICAgICAgLy8gMi4g6I635Y+W5Y6f5aeLIGFubm91bmNlIOWtl+autQorICAgICAgICAgICAgU3RyaW5nIGFubm91bmNlID0gZGVjb2RlZC5nZXQoImFubm91bmNlIikuZ2V0U3RyaW5nKCk7CisKKyAgICAgICAgICAgIC8vIDMuIOazqOWFpSBwYXNza2V5IOWIsCBhbm5vdW5jZSBVUkwKKyAgICAgICAgICAgIGlmICghYW5ub3VuY2UuY29udGFpbnMoInBhc3NrZXk9IikpIHsKKyAgICAgICAgICAgICAgICBhbm5vdW5jZSA9IGFubm91bmNlICsgIj9wYXNza2V5PSIgKyBwYXNza2V5OworICAgICAgICAgICAgICAgIGRlY29kZWQucHV0KCJhbm5vdW5jZSIsIG5ldyBCRVZhbHVlKGFubm91bmNlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIDQuIOe8lueggeaIkOaWsOeahCAudG9ycmVudCDmlofku7blrZfoioLmlbDnu4QKKyAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgICAgICBCRW5jb2Rlci5iZW5jb2RlKGRlY29kZWQsIG91dCk7CisgICAgICAgICAgICByZXR1cm4gb3V0LnRvQnl0ZUFycmF5KCk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLlpITnkIYgdG9ycmVudCDmlofku7blpLHotKUiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIFJlc3VsdCBmYXZvcml0ZShMb25nIHNlZWRJZCwgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJvb2xlYW4gZXhpc3RzID0gdG9ycmVudE1hcHBlci5jaGVja0Zhdm9yaXRlKHNlZWRJZCwgdXNlcklkKTsKKyAgICAgICAgICAgIGlmIChleGlzdHMpIHsKKyAgICAgICAgICAgICAgICB0b3JyZW50TWFwcGVyLnJlbW92ZUZhdm9yaXRlKHNlZWRJZCwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoIuWPlua2iOaUtuiXj+aIkOWKnyIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0b3JyZW50TWFwcGVyLmFkZEZhdm9yaXRlKHNlZWRJZCwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoIuaUtuiXj+aIkOWKnyIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVUb3JyZW50KExvbmcgc2VlZElkKSB7CisgICAgICAgIHRvcnJlbnRNYXBwZXIuZGVsZXRlQnlJZChzZWVkSWQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIHZvaWQgdXBkYXRlVG9ycmVudChMb25nIHNlZWRJZCwgVG9ycmVudFVwZGF0ZURUTyB1cGRhdGVEVE8pIHsKKyAgICAgICAgVG9ycmVudEVudGl0eSB0b3JyZW50ID0gc2VsZWN0QnlTZWVkSWQoc2VlZElkKTsKKyAgICAgICAgaWYgKHRvcnJlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuenjeWtkOS4jeWtmOWcqCIpOworICAgICAgICB9CisKKworICAgICAgICB0b3JyZW50LnNldERlc2NyaXB0aW9uKHVwZGF0ZURUTy5nZXREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgdG9ycmVudC5zZXRDYXRlZ29yeSh1cGRhdGVEVE8uZ2V0Q2F0ZWdvcnkoKSk7CisgICAgICAgIHRvcnJlbnQuc2V0VGl0bGUodXBkYXRlRFRPLmdldFRpdGxlKCkpOworICAgICAgICB0b3JyZW50LnNldFRhZ3ModXBkYXRlRFRPLmdldFRhZ3MoKSk7CisgICAgICAgIHRvcnJlbnQuc2V0SW1hZ2VVcmwodXBkYXRlRFRPLmdldEltYWdlVXJsKCkpOworCisgICAgICAgIHRvcnJlbnRNYXBwZXIudXBkYXRlQnlJZCh0b3JyZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBjYW5Vc2VyRGVsZXRlVG9ycmVudChMb25nIHNlZWRJZCwgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgVG9ycmVudEVudGl0eSB0b3JyZW50ID0gc2VsZWN0QnlTZWVkSWQoc2VlZElkKTsKKyAgICAgICAgaWYgKHRvcnJlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8g5qOA5p+l5piv5ZCm5piv56eN5a2Q5Y+R5biD6ICF5oiW566h55CG5ZGYCisgICAgICAgIHJldHVybiB0b3JyZW50LmdldFVwbG9hZGVyKCkuZXF1YWxzKHVzZXJJZCkgfHwKKyAgICAgICAgICAgICAgICB1c2VyTWFwcGVyLmhhc1JvbGUodXNlcklkLCAiYWRtaW4iKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBjYW5Vc2VyVXBkYXRlVG9ycmVudChMb25nIHNlZWRJZCwgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgcmV0dXJuIGNhblVzZXJEZWxldGVUb3JyZW50KHNlZWRJZCwgdXNlcklkKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1VzZXJVcGxvYWRSYXRpbyhMb25nIHVzZXJJZCkgeworICAgICAgICBVc2VyIHVzZXIgPSB1c2VyTWFwcGVyLnNlbGVjdEJ5SWQodXNlcklkKTsKKyAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8g6Ziy5q2i6Zmk5Lul6Zu2CisgICAgICAgIGlmICh1c2VyLmdldERvd25sb2FkZWQoKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRvdWJsZSB1cGxvYWRSYXRpbyA9IHVzZXIuZ2V0VXBsb2FkZWQoKSAvIChkb3VibGUpIHVzZXIuZ2V0RG93bmxvYWRlZCgpOworICAgICAgICByZXR1cm4gdXBsb2FkUmF0aW8gPj0gTUlOX1VQTE9BRF9SQVRJTzsKKyAgICB9CisgICAgLyoqCisgICAgICog5ZCv5Yqo5YGa56eN5a6i5oi356uvCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0U2VlZGluZyhQYXRoIHRvcnJlbnRQYXRoLCBQYXRoIGRhdGFEaXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTaW1wbGVDbGllbnQgc2VlZGVyQ2xpZW50ID0gbmV3IFNpbXBsZUNsaWVudCgpOworICAgICAgICBzZWVkZXJDbGllbnQuZG93bmxvYWRUb3JyZW50KAorICAgICAgICAgICAgICAgIHRvcnJlbnRQYXRoLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgZGF0YURpci50b1N0cmluZygpLAorICAgICAgICAgICAgICAgIEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICAgICAgLy8g5L+d5oyB5YGa56eN54q25oCB77yI6Zi75aGe57q/56iL77yJCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAoNjAwMDApOyAvLyDmr482MOenkuajgOafpeS4gOasoQorICAgICAgICB9CisgICAgfQorCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgZG91YmxlIGNhbGN1bGF0ZURvd25sb2FkU2l6ZShMb25nIHRvcnJlbnRJZCwgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgVG9ycmVudEVudGl0eSB0b3JyZW50ID0gc2VsZWN0QnlTZWVkSWQodG9ycmVudElkKTsKKyAgICAgICAgaWYgKHRvcnJlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuenjeWtkOS4jeWtmOWcqCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g6I635Y+W5b2T5YmN5pyJ5pWI55qE5L+D6ZSA5rS75YqoCisgICAgICAgIGRvdWJsZSBkaXNjb3VudCA9IHByb21vdGlvblNlcnZpY2UuZ2V0Q3VycmVudERpc2NvdW50KHRvcnJlbnRJZCk7CisKKyAgICAgICAgLy8g6K6h566X5a6e6ZmF5LiL6L296YePCisgICAgICAgIHJldHVybiB0b3JyZW50LmdldFNpemUoKSAqICgxIC0gZGlzY291bnQgLyAxMDAuMCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBwdWJsaWMgdm9pZCByZWNvcmREb3dubG9hZChMb25nIHRvcnJlbnRJZCwgTG9uZyB1c2VySWQsIGRvdWJsZSBkb3dubG9hZFNpemUpIHsKKyAgICAgICAgLy8g5pu05paw55So5oi35LiL6L296YePCisgICAgICAgIHVzZXJNYXBwZXIuaW5jcmVhc2VEb3dubG9hZGVkKHVzZXJJZCwgZG93bmxvYWRTaXplKTsKKworICAgICAgICAvLyDmm7TmlrDnp43lrZDkuIvovb3mrKHmlbAKKyAgICAgICAgdG9ycmVudE1hcHBlci5pbmNyZWFzZURvd25sb2Fkcyh0b3JyZW50SWQpOworICAgIH0KKyAgICAvKioKKyAgICAgKiDorqHnrpfnp43lrZDmlofku7bnmoRpbmZvSGFzaAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGNhbGN1bGF0ZUluZm9IYXNoKGJ5dGVbXSB0b3JyZW50RGF0YSkgdGhyb3dzIE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiAgeworICAgICAgICBNZXNzYWdlRGlnZXN0IHNoYTEgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJTSEEtMSIpOworICAgICAgICBzaGExLnVwZGF0ZSh0b3JyZW50RGF0YSk7CisgICAgICAgIGJ5dGVbXSBoYXNoQnl0ZXMgPSBzaGExLmRpZ2VzdCgpOworICAgICAgICByZXR1cm4gSGV4LmVuY29kZUhleFN0cmluZyhoYXNoQnl0ZXMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYmQ1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLnNlcnZpY2VJbXBsOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Vc2VyTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkdyYW50ZWRBdXRob3JpdHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLmF1dGhvcml0eS5BdXRob3JpdHlVdGlsczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuYXV0aG9yaXR5LlNpbXBsZUdyYW50ZWRBdXRob3JpdHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLnVzZXJkZXRhaWxzLlVzZXJEZXRhaWxzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VyRGV0YWlsc1NlcnZpY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLnVzZXJkZXRhaWxzLlVzZXJuYW1lTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitAU2VydmljZQorcHVibGljIGNsYXNzIFVzZXJEZXRhaWxzU2VydmljZUltcGwgaW1wbGVtZW50cyBVc2VyRGV0YWlsc1NlcnZpY2UgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlck1hcHBlciB1c2VyTWFwcGVyOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFVzZXJEZXRhaWxzIGxvYWRVc2VyQnlVc2VybmFtZShTdHJpbmcgdXNlcm5hbWUpIHRocm93cyBVc2VybmFtZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgLy91c2VybmFtZeWPguaVsCzmmK/lnKjnmbvpmYbml7Ys55So5oi35Lyg6YCS55qE6KGo5Y2V5pWw5o2udXNlcm5hbWUKKyAgICAgICAgLy/kuLvopoHor7vlj5bmlbDmja7lupMz5Liq5YC8IHVzZXJuYW1lIHBhc3N3b3JkIGF1dGhvcml0aWVzCisgICAgICAgIFVzZXIgdXNlcj0gdXNlck1hcHBlci5zZWxlY3RCeVVzZXJuYW1lKHVzZXJuYW1lKTsKKyAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVzZXJuYW1lTm90Rm91bmRFeGNlcHRpb24oIueUqOaIt+WQjeacquaJvuWIsCIpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGF1dGhvcml0eU5hbWUgPSB1c2VyLmdldFJvbGUoKTsKKyAgICAgICAgLy/kuLrkuobov5Tlm57kuIDkuKpVc2VyRGV0YWlscyDkvb/nlKhVc2VyCisgICAgICAgIExpc3Q8R3JhbnRlZEF1dGhvcml0eT4gYXV0aG9yaXRpZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgR3JhbnRlZEF1dGhvcml0eSBhdXRob3JpdHkgPSBuZXcgU2ltcGxlR3JhbnRlZEF1dGhvcml0eShhdXRob3JpdHlOYW1lKTsKKyAgICAgICAgYXV0aG9yaXRpZXMuYWRkKGF1dGhvcml0eSk7CisgICAgICAgIHJldHVybiBuZXcgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLnVzZXJkZXRhaWxzLlVzZXIoCisgICAgICAgICAgICAgICAgdXNlci5nZXRVc2VybmFtZSgpLAorICAgICAgICAgICAgICAgIHVzZXIuZ2V0UGFzc3dvcmQoKSwKKyAgICAgICAgICAgICAgICB0cnVlLCAvLyBhY2NvdW50RW5hYmxlZAorICAgICAgICAgICAgICAgIHRydWUsIC8vIGFjY291bnROb25FeHBpcmVkCisgICAgICAgICAgICAgICAgdHJ1ZSwgLy8gY3JlZGVudGlhbHNOb25FeHBpcmVkCisgICAgICAgICAgICAgICAgdHJ1ZSwgLy8gYWNjb3VudE5vbkxvY2tlZAorICAgICAgICAgICAgICAgIEF1dGhvcml0eVV0aWxzLmNyZWF0ZUF1dGhvcml0eUxpc3QoIlJPTEVfVVNFUiIpIC8vIOiuvue9rueUqOaIt+eahOinkuiJsuaIluadg+mZkAorICAgICAgICApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDcxOGZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDEyMiBAQAorCitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLnNlcnZpY2VJbXBsOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5jb3JlLmNvbmRpdGlvbnMucXVlcnkuUXVlcnlXcmFwcGVyOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5leHRlbnNpb24uc2VydmljZS5pbXBsLlNlcnZpY2VJbXBsOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlZlcmlmaWNhdGlvblRva2VuTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlZlcmlmaWNhdGlvblRva2VuOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkVtYWlsU2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyU2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuUmFuZG9tU3RyaW5nVXRpbHM7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jcnlwdG8ucGFzc3dvcmQuUGFzc3dvcmRFbmNvZGVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IGphdmEudGltZS5JbnN0YW50OworaW1wb3J0IGphdmEudGltZS50ZW1wb3JhbC5DaHJvbm9Vbml0OworLy/nmbvlvZXms6jlhowKK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgVXNlclNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGw8VXNlck1hcHBlciwgVXNlcj4gaW1wbGVtZW50cyBVc2VyU2VydmljZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFVzZXJTZXJ2aWNlSW1wbC5jbGFzcyk7CisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlck1hcHBlciB1c2VyTWFwcGVyOyAvLyBVc2luZyBNeUJhdGlzLVBsdXMgbWFwcGVyCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgRW1haWxTZXJ2aWNlSW1wbCBlbWFpbFNlcnZpY2U7CisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7IC8vIFVzaW5nIE15QmF0aXMtUGx1cyBtYXBwZXIKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBQYXNzd29yZEVuY29kZXIgcGFzc3dvcmRFbmNvZGVyOyAvLyBJbmplY3RpbmcgcGFzc3dvcmQgZW5jb2RlcgorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBVc2VyIGxvZ2luU2VydmljZShTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgeworICAgICAgICBsb2cuZGVidWcoIkF0dGVtcHRpbmcgbG9naW4gd2l0aCB1c2VybmFtZToge30sIHBhc3N3b3JkOiB7fSIsIHVzZXJuYW1lLCBwYXNzd29yZCk7CisgICAgICAgIFVzZXIgdXNlciA9IHVzZXJNYXBwZXIuc2VsZWN0T25lKG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgidXNlcm5hbWUiLCB1c2VybmFtZSkuZXEoInBhc3N3b3JkIiwgcGFzc3dvcmQpKTsKKyAgICAgICAgaWYgKHVzZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgdXNlci5zZXRQYXNzd29yZCgiIik7ICAvLyBDbGVhciB0aGUgcGFzc3dvcmQgYmVmb3JlIHJldHVybmluZworICAgICAgICAgICAgbG9nLmRlYnVnKCJMb2dpbiBzdWNjZXNzZnVsLCBVc2VyIElEOiB7fSIsIHVzZXIuZ2V0SWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2cuZGVidWcoIkxvZ2luIGZhaWxlZCwgaW5jb3JyZWN0IHVzZXJuYW1lIG9yIHBhc3N3b3JkLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1c2VyOworICAgIH0KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBwcmVSZWdpc3RlclVzZXIoVXNlciB1c2VyKSB7CisgICAgICAgIGxvZy5kZWJ1ZygiUHJlLXJlZ2lzdGVyaW5nIHVzZXIsIHVzZXJuYW1lOiB7fSwgZW1haWw6IHt9IiwgdXNlci5nZXRVc2VybmFtZSgpLCB1c2VyLmdldEVtYWlsKCkpOworICAgICAgICAvLyDmo4Dmn6XnlKjmiLflkI3miJbpgq7nrrHmmK/lkKblt7LlrZjlnKgKKyAgICAgICAgYm9vbGVhbiB1c2VyRXhpc3RzID0gdXNlck1hcHBlci5zZWxlY3RPbmUobmV3IFF1ZXJ5V3JhcHBlcjxVc2VyPigpLmVxKCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSkpICE9IG51bGwgfHwKKyAgICAgICAgICAgICAgICB1c2VyTWFwcGVyLnNlbGVjdE9uZShuZXcgUXVlcnlXcmFwcGVyPFVzZXI+KCkuZXEoImVtYWlsIiwgdXNlci5nZXRFbWFpbCgpKSkgIT0gbnVsbDsKKyAgICAgICAgaWYgKHVzZXJFeGlzdHMpIHsKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiUHJlLXJlZ2lzdHJhdGlvbiBmYWlsZWQsIHVzZXJuYW1lIG9yIGVtYWlsIGFscmVhZHkgZXhpc3RzLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8g55So5oi35ZCN5oiW6YKu566x5bey57uP5a2Y5ZyoCisgICAgICAgIH0KKyAgICAgICAgLy8g5Yqg5a+G5a+G56CBCisgICAgICAgIFN0cmluZyBlbmNyeXB0ZWRQYXNzd29yZCA9IHBhc3N3b3JkRW5jb2Rlci5lbmNvZGUodXNlci5nZXRQYXNzd29yZCgpKTsKKyAgICAgICAgLy8g55Sf5oiQ6aqM6K+B56CBCisgICAgICAgIFN0cmluZyB0b2tlbiA9IFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbU51bWVyaWMoNik7CisgICAgICAgIC8vIOiuvue9rui/h+acn+aXtumXtOS4uuW9k+WJjeaXtumXtOWKoOS4gOWwj+aXtgorICAgICAgICBJbnN0YW50IGV4cGlyeURhdGUgPSBJbnN0YW50Lm5vdygpLnBsdXMoMSwgQ2hyb25vVW5pdC5IT1VSUyk7CisgICAgICAgIC8vIOWIm+W7uumqjOivgeS7pOeJjOWvueixoQorICAgICAgICBWZXJpZmljYXRpb25Ub2tlbiB2ZXJpZmljYXRpb25Ub2tlbiA9IG5ldyBWZXJpZmljYXRpb25Ub2tlbigKKyAgICAgICAgICAgICAgICB0b2tlbiwKKyAgICAgICAgICAgICAgICB1c2VyLmdldFVzZXJuYW1lKCksCisgICAgICAgICAgICAgICAgdXNlci5nZXRFbWFpbCgpLAorICAgICAgICAgICAgICAgIGVuY3J5cHRlZFBhc3N3b3JkLAorICAgICAgICAgICAgICAgIGV4cGlyeURhdGUKKyAgICAgICAgKTsKKyAgICAgICAgLy8g5o+S5YWl6aqM6K+B5Luk54mMCisgICAgICAgIGludCByb3dzSW5zZXJ0ZWQgPSB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlci5pbnNlcnQodmVyaWZpY2F0aW9uVG9rZW4pOworICAgICAgICBpZiAocm93c0luc2VydGVkID4gMCkgeworICAgICAgICAgICAgLy8g5Y+R6YCB6aqM6K+B6YKu5Lu2CisgICAgICAgICAgICBlbWFpbFNlcnZpY2Uuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHVzZXIuZ2V0RW1haWwoKSwgdG9rZW4pOworICAgICAgICAgICAgbG9nLmRlYnVnKCJQcmUtcmVnaXN0cmF0aW9uIHN1Y2Nlc3NmdWwsIHZlcmlmaWNhdGlvbiBjb2RlOiB7fSwgZXhwaXJ5IGRhdGU6IHt9IiwgdG9rZW4sIGV4cGlyeURhdGUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAvLyDms6jlhozliY3pqozor4HmiJDlip8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZy5lcnJvcigiRmFpbGVkIHRvIGluc2VydCB2ZXJpZmljYXRpb24gdG9rZW4gaW50byBkYXRhYmFzZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIOWmguaenOaPkuWFpemqjOivgeS7pOeJjOWksei0pe+8jOi/lOWbnuWksei0pQorICAgICAgICB9CisgICAgfQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHZlcmlmeUVtYWlsKFN0cmluZyBlbWFpbCwgU3RyaW5nIHRva2VuKSB7CisgICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZ5aW5nIGVtYWlsLCBlbWFpbDoge30sIHRva2VuOiB7fSIsIGVtYWlsLCB0b2tlbik7CisgICAgICAgIFZlcmlmaWNhdGlvblRva2VuIHZlcmlmaWNhdGlvblRva2VuID0gdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuc2VsZWN0T25lKAorICAgICAgICAgICAgICAgIG5ldyBRdWVyeVdyYXBwZXI8VmVyaWZpY2F0aW9uVG9rZW4+KCkuZXEoInRva2VuIiwgdG9rZW4pLmVxKCJlbWFpbCIsIGVtYWlsKQorICAgICAgICApOworICAgICAgICBpZiAodmVyaWZpY2F0aW9uVG9rZW4gIT0gbnVsbCAmJiAhdmVyaWZpY2F0aW9uVG9rZW4uaXNFeHBpcmVkKCkpIHsKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZpY2F0aW9uIGNvZGUgaXMgdmFsaWQsIHVzZXJuYW1lOiB7fSIsIHZlcmlmaWNhdGlvblRva2VuLmdldFVzZXJuYW1lKCkpOworICAgICAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RPbmUobmV3IFF1ZXJ5V3JhcHBlcjxVc2VyPigpLmVxKCJlbWFpbCIsIGVtYWlsKSk7CisgICAgICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdXNlciA9IG5ldyBVc2VyKCk7CisgICAgICAgICAgICAgICAgdXNlci5zZXRFbWFpbChlbWFpbCk7CisgICAgICAgICAgICAgICAgdXNlci5zZXRVc2VybmFtZSh2ZXJpZmljYXRpb25Ub2tlbi5nZXRVc2VybmFtZSgpKTsKKyAgICAgICAgICAgICAgICB1c2VyLnNldFBhc3N3b3JkKHZlcmlmaWNhdGlvblRva2VuLmdldFBhc3N3b3JkKCkpOworICAgICAgICAgICAgICAgIHVzZXIuc2V0RW1haWxWZXJpZmllZCh0cnVlKTsKKyAgICAgICAgICAgICAgICB1c2VyTWFwcGVyLmluc2VydCh1c2VyKTsgIC8vIFNhdmUgbmV3IHVzZXIKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIk5ldyB1c2VyIGNyZWF0ZWQsIFVzZXIgSUQ6IHt9IiwgdXNlci5nZXRJZCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXNlci5zZXRFbWFpbFZlcmlmaWVkKHRydWUpOworICAgICAgICAgICAgICAgIHVzZXJNYXBwZXIudXBkYXRlQnlJZCh1c2VyKTsgIC8vIFVwZGF0ZSBleGlzdGluZyB1c2VyCisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJVc2VyIGVtYWlsIHZlcmlmaWVkLCBVc2VyIElEOiB7fSIsIHVzZXIuZ2V0SWQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlci5kZWxldGUobmV3IFF1ZXJ5V3JhcHBlcjxWZXJpZmljYXRpb25Ub2tlbj4oKS5lcSgidG9rZW4iLCB0b2tlbikpOyAvLyBDbGVhbiB1cCB0aGUgdG9rZW4KKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZpY2F0aW9uIGNvZGUgZGVsZXRlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZpY2F0aW9uIGNvZGUgaXMgaW52YWxpZCBvciBleHBpcmVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW1haWxFeGlzdHMoU3RyaW5nIGVtYWlsKSB7CisgICAgICAgIGxvZy5kZWJ1Zygi5qOA5p+l6YKu566x5piv5ZCm5a2Y5Zyo77yM6YKu566x77yae30iLCBlbWFpbCk7CisgICAgICAgIGJvb2xlYW4gZXhpc3RzID0gdXNlck1hcHBlci5zZWxlY3RDb3VudChuZXcgUXVlcnlXcmFwcGVyPFVzZXI+KCkuZXEoImVtYWlsIiwgZW1haWwpKSA+IDA7CisgICAgICAgIGxvZy5kZWJ1Zygi6YKu566x5a2Y5Zyo54q25oCB77yae30iLCBleGlzdHMpOworICAgICAgICByZXR1cm4gZXhpc3RzOworICAgIH0KKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1Bhc3N3b3JkKExvbmcgdXNlcklkLCBTdHJpbmcgcGFzc3dvcmQpIHsKKyAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RCeUlkKHVzZXJJZCk7CisgICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLnlKjmiLfkuI3lrZjlnKgiKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZW5jcnlwdGVkUGFzc3dvcmQgPSB1c2VyLmdldFBhc3N3b3JkKCk7CisgICAgICAgIHJldHVybiBwYXNzd29yZEVuY29kZXIubWF0Y2hlcyhwYXNzd29yZCwgZW5jcnlwdGVkUGFzc3dvcmQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NmY4MjguLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QudXRpbHM7Ci0KLQotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLQotcHVibGljIGNsYXNzIFJlc3VsdDxUPiB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgY29kZTsKLSAgICBwcml2YXRlIFN0cmluZyBtc2c7Ci0gICAgcHJpdmF0ZSBUIGRhdGE7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvZGUoKSB7Ci0gICAgICAgIHJldHVybiBjb2RlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvZGUoU3RyaW5nIGNvZGUpIHsKLSAgICAgICAgdGhpcy5jb2RlID0gY29kZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE1zZygpIHsKLSAgICAgICAgcmV0dXJuIG1zZzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNc2coU3RyaW5nIG1zZykgewotICAgICAgICB0aGlzLm1zZyA9IG1zZzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVCBnZXREYXRhKCkgewotICAgICAgICByZXR1cm4gZGF0YTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREYXRhKFQgZGF0YSkgewotICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgIH0KLQotICAgIHB1YmxpYyBSZXN1bHQoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFJlc3VsdChUIGRhdGEpIHsKLSAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBzdWNjZXNzKFJlc3BvbnNlRW50aXR5PD8+IHJlc3VsdE1hcCwgU3RyaW5nIOWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnykgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdDw+KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCIyMDAiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5oiQ5YqfIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHN1Y2Nlc3MoVCBkYXRhKSB7Ci0gICAgICAgIFJlc3VsdDxUPiByZXN1bHQgPSBuZXcgUmVzdWx0PD4oZGF0YSk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCIyMDAiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5oiQ5YqfIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBzdWNjZXNzKFN0cmluZyBtc2cpIHsKLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IG5ldyBSZXN1bHQoKTsKLSAgICAgICAgcmVzdWx0LnNldENvZGUoIjIwMCIpOwotICAgICAgICByZXN1bHQuc2V0TXNnKCLmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gc3VjY2VzcyhUIGRhdGEsU3RyaW5nIG1zZykgewotICAgICAgICBSZXN1bHQ8VD4gcmVzdWx0ID0gbmV3IFJlc3VsdDw+KGRhdGEpOwotICAgICAgICByZXN1bHQuc2V0Q29kZSgiMjAwIik7Ci0gICAgICAgIHJlc3VsdC5zZXRNc2cobXNnKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBlcnJvcihTdHJpbmcgY29kZSwgU3RyaW5nIG1zZykgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOwotICAgICAgICByZXN1bHQuc2V0Q29kZShjb2RlKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZyhtc2cpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAvKioKLSAgICAgKiDliJvlu7rkuIDkuKrooajnpLrmlofku7blpKflsI/otoXlh7rpmZDliLbnmoTnu5Pmnpzlr7nosaHjgIIKLSAgICAgKgotICAgICAqIEByZXR1cm4g5p6E6YCg55qE5paH5Lu26L+H5aSn6ZSZ6K+v57uT5p6c5a+56LGhCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBSZXN1bHQgZmlsZVRvb0xhcmdlKCkgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOwotICAgICAgICByZXN1bHQuc2V0Q29kZSgiNDEzIik7Ci0gICAgICAgIHJlc3VsdC5zZXRNc2coIuaWh+S7tuWkp+Wwj+i2heWHuumZkOWItuOAgiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIOWIm+W7uuS4gOS4quihqOekuuaWh+S7tuagvOW8j+S4jeaUr+aMgeeahOe7k+aenOWvueixoeOAggotICAgICAqCi0gICAgICogQHJldHVybiDmnoTpgKDnmoTmlofku7bmoLzlvI/plJnor6/nu5Pmnpzlr7nosaEKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCB1bnN1cHBvcnRlZEZpbGVUeXBlKCkgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOwotICAgICAgICByZXN1bHQuc2V0Q29kZSgiNDE1Iik7Ci0gICAgICAgIHJlc3VsdC5zZXRNc2coIuS4jeaUr+aMgeeahOaWh+S7tuagvOW8j+OAgiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIOWIm+W7uuS4gOS4quihqOekuuaWh+S7tuacquaJvuWIsOeahOe7k+aenOWvueixoeOAggotICAgICAqCi0gICAgICogQHJldHVybiDmnoTpgKDnmoTmlofku7bmnKrmib7liLDplJnor6/nu5Pmnpzlr7nosaEKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBmaWxlTm90Rm91bmQoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MDQiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5paH5Lu25pyq5om+5Yiw44CCIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog5Yib5bu65LiA5Liq6KGo56S65paH5Lu25a2Y5YKo6ZSZ6K+v55qE57uT5p6c5a+56LGh44CCCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXJyb3JNc2cg6K+m57uG6ZSZ6K+v5L+h5oGvCi0gICAgICogQHJldHVybiDmnoTpgKDnmoTmlofku7blrZjlgqjplJnor6/nu5Pmnpzlr7nosaEKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBmaWxlU3RvcmFnZUVycm9yKFN0cmluZyBlcnJvck1zZykgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOwotICAgICAgICByZXN1bHQuc2V0Q29kZSgiNTAwIik7Ci0gICAgICAgIHJlc3VsdC5zZXRNc2coIuaWh+S7tuWtmOWCqOmUmeivrzogIiArIGVycm9yTXNnKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBwZXJtaXNzaW9uRGVuaWVkKCkgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOwotICAgICAgICByZXN1bHQuc2V0Q29kZSgiNDAxIik7Ci0gICAgICAgIHJlc3VsdC5zZXRNc2coIuadg+mZkOS4jei2s++8jOaXoOazleaJp+ihjOivpeaTjeS9nOOAgiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvVmVyaWZ5Q29kZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvVmVyaWZ5Q29kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OWI4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9WZXJpZnlDb2RlLmphdmEKQEAgLTAsMCArMSwxNTYgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnV0aWxzOworCisKK2ltcG9ydCBqYXZheC5pbWFnZWlvLkltYWdlSU87CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IGphdmF4LmltYWdlaW8uSW1hZ2VJTzsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2U7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCisvKgoraW1wb3J0IGphdmF4LmltYWdlaW8uSW1hZ2VJTzsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2U7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCisvKioKKyAqIEBhdXRob3Ig6Zi/5qWgCisgKiBjb2Rl55Sf5oiQ5bel5YW357G7CisgKi8KK3B1YmxpYyBjbGFzcyBWZXJpZnlDb2RlIHsKKyAgICAvKioKKyAgICAgKiDnlJ/miJDpqozor4HnoIHlm77niYfnmoTlrr3luqYKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCB3aWR0aCA9IDEwMDsKKworICAgIC8qKgorICAgICAqIOeUn+aIkOmqjOivgeeggeWbvueJh+eahOmrmOW6pgorICAgICAqLworICAgIHByaXZhdGUgaW50IGhlaWdodCA9IDMwOworCisgICAgLyoqCisgICAgICog5a2X56ym5qC35byPCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmdbXSBmb250TmFtZXMgPSB7ICLlrovkvZMiLCAi5qW35L2TIiwgIumatuS5piIsICLlvq7ova/pm4Xpu5EiIH07CisKKyAgICAvKioKKyAgICAgKiDlrprkuYnpqozor4HnoIHlm77niYfnmoTog4zmma/popzoibLkuLrnmb3oibIKKyAgICAgKi8KKyAgICBwcml2YXRlIENvbG9yIGJnQ29sb3IgPSBuZXcgQ29sb3IoMjU1LCAyNTUsIDI1NSk7CisKKyAgICAvKioKKyAgICAgKiDnlJ/miJDpmo/mnLoKKyAgICAgKi8KKyAgICBwcml2YXRlIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CisKKyAgICAvKioKKyAgICAgKiDlrprkuYljb2Rl5a2X56ymCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgY29kZXMgPSAiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOworCisgICAgLyoqCisgICAgICog6K6w5b2V6ZqP5py65a2X56ym5LiyCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgdGV4dDsKKworICAgIC8qKgorICAgICAqIOiOt+WPluS4gOS4qumaj+aEj+minOiJsgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwcml2YXRlIENvbG9yIHJhbmRvbUNvbG9yKCkgeworICAgICAgICBpbnQgcmVkID0gcmFuZG9tLm5leHRJbnQoMTUwKTsKKyAgICAgICAgaW50IGdyZWVuID0gcmFuZG9tLm5leHRJbnQoMTUwKTsKKyAgICAgICAgaW50IGJsdWUgPSByYW5kb20ubmV4dEludCgxNTApOworICAgICAgICByZXR1cm4gbmV3IENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOiOt+WPluS4gOS4qumaj+acuuWtl+S9kworICAgICAqCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHByaXZhdGUgRm9udCByYW5kb21Gb250KCkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IGZvbnROYW1lc1tyYW5kb20ubmV4dEludChmb250TmFtZXMubGVuZ3RoKV07CisgICAgICAgIGludCBzdHlsZSA9IHJhbmRvbS5uZXh0SW50KDQpOworICAgICAgICBpbnQgc2l6ZSA9IHJhbmRvbS5uZXh0SW50KDUpICsgMjQ7CisgICAgICAgIHJldHVybiBuZXcgRm9udChuYW1lLCBzdHlsZSwgc2l6ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog6I635Y+W5LiA5Liq6ZqP5py65a2X56ymCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHJpdmF0ZSBjaGFyIHJhbmRvbUNoYXIoKSB7CisgICAgICAgIHJldHVybiBjb2Rlcy5jaGFyQXQocmFuZG9tLm5leHRJbnQoY29kZXMubGVuZ3RoKCkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDliJvlu7rkuIDkuKrnqbrnmb3nmoRCdWZmZXJlZEltYWdl5a+56LGhCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHJpdmF0ZSBCdWZmZXJlZEltYWdlIGNyZWF0ZUltYWdlKCkgeworICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uod2lkdGgsIGhlaWdodCwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0IpOworICAgICAgICBHcmFwaGljczJEIGcyID0gKEdyYXBoaWNzMkQpIGltYWdlLmdldEdyYXBoaWNzKCk7CisgICAgICAgIC8v6K6+572u6aqM6K+B56CB5Zu+54mH55qE6IOM5pmv6aKc6ImyCisgICAgICAgIGcyLnNldENvbG9yKGJnQ29sb3IpOworICAgICAgICBnMi5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKworICAgIHB1YmxpYyBCdWZmZXJlZEltYWdlIGdldEltYWdlKCkgeworICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gY3JlYXRlSW1hZ2UoKTsKKyAgICAgICAgR3JhcGhpY3MyRCBnMiA9IChHcmFwaGljczJEKSBpbWFnZS5nZXRHcmFwaGljcygpOworICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcgcyA9IHJhbmRvbUNoYXIoKSArICIiOworICAgICAgICAgICAgc2IuYXBwZW5kKHMpOworICAgICAgICAgICAgZzIuc2V0Q29sb3IocmFuZG9tQ29sb3IoKSk7CisgICAgICAgICAgICBnMi5zZXRGb250KHJhbmRvbUZvbnQoKSk7CisgICAgICAgICAgICBmbG9hdCB4ID0gaSAqIHdpZHRoICogMS4wZiAvIDQ7CisgICAgICAgICAgICBnMi5kcmF3U3RyaW5nKHMsIHgsIGhlaWdodCAtIDgpOworICAgICAgICB9CisgICAgICAgIHRoaXMudGV4dCA9IHNiLnRvU3RyaW5nKCk7CisgICAgICAgIGRyYXdMaW5lKGltYWdlKTsKKyAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKworICAgIC8qKgorICAgICAqIOe7mOWItuW5suaJsOe6vworICAgICAqCisgICAgICogQHBhcmFtIGltYWdlCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdMaW5lKEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UpIHsKKyAgICAgICAgR3JhcGhpY3MyRCBnMiA9IChHcmFwaGljczJEKSBpbWFnZS5nZXRHcmFwaGljcygpOworICAgICAgICBpbnQgbnVtID0gNTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgeworICAgICAgICAgICAgaW50IHgxID0gcmFuZG9tLm5leHRJbnQod2lkdGgpOworICAgICAgICAgICAgaW50IHkxID0gcmFuZG9tLm5leHRJbnQoaGVpZ2h0KTsKKyAgICAgICAgICAgIGludCB4MiA9IHJhbmRvbS5uZXh0SW50KHdpZHRoKTsKKyAgICAgICAgICAgIGludCB5MiA9IHJhbmRvbS5uZXh0SW50KGhlaWdodCk7CisgICAgICAgICAgICBnMi5zZXRDb2xvcihyYW5kb21Db2xvcigpKTsKKyAgICAgICAgICAgIGcyLnNldFN0cm9rZShuZXcgQmFzaWNTdHJva2UoMS41ZikpOworICAgICAgICAgICAgZzIuZHJhd0xpbmUoeDEsIHkxLCB4MiwgeTIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgb3V0cHV0KEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsIE91dHB1dFN0cmVhbSBvdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEltYWdlSU8ud3JpdGUoaW1hZ2UsICJKUEVHIiwgb3V0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCmluZGV4IDgwZjQ2OGQuLjA1OTAzMzMgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCkBAIC0xLDEyICsxLDEyIEBACiBzZXJ2ZXIucG9ydD04MDgwCi1zcHJpbmcuZGF0YXNvdXJjZS51cmw9amRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2L3B0UHJvamVjdAorc3ByaW5nLmRhdGFzb3VyY2UudXJsPWpkYmM6bXlzcWw6Ly9sb2NhbGhvc3Q6MzMwNi9wdAogc3ByaW5nLmRhdGFzb3VyY2UudXNlcm5hbWU9cm9vdAotc3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQ9MTIzNDU2CitzcHJpbmcuZGF0YXNvdXJjZS5wYXNzd29yZD1yb290CiBzcHJpbmcuZGF0YXNvdXJjZS5kcml2ZXItY2xhc3MtbmFtZT1jb20ubXlzcWwuY2ouamRiYy5Ecml2ZXIKLXNwcmluZy5qcGEuaGliZXJuYXRlLm5hbWluZy5waHlzaWNhbC1zdHJhdGVneT1vcmcuaGliZXJuYXRlLmJvb3QubW9kZWwubmFtaW5nLlBoeXNpY2FsTmFtaW5nU3RyYXRlZ3lTdGFuZGFyZEltcGwKIAogbXliYXRpcy1wbHVzLmNvbmZpZ3VyYXRpb24ubG9nLWltcGw9b3JnLmFwYWNoZS5pYmF0aXMubG9nZ2luZy5zdGRvdXQuU3RkT3V0SW1wbAogCisKICMgTWFpbCBjb25maWd1cmF0aW9uCiBzcHJpbmcubWFpbC5wYXNzd29yZD10bGpuZWJvbmh6aHFlY2RhCiBzcHJpbmcubWFpbC51c2VybmFtZT0yMzcwNTIzNzE2QHFxLmNvbQpAQCAtMTcsOCArMTcsMTUgQEAKIAogCiBzcHJpbmcuanBhLmVuYWJsZWQ9ZmFsc2UKLXNwcmluZy5qcGEuaGliZXJuYXRlLmRkbC1hdXRvPXVwZGF0ZQorc3ByaW5nLmpwYS5oaWJlcm5hdGUuZGRsLWF1dG89bm9uZQogc3ByaW5nLmpwYS5vcGVuLWluLXZpZXc9ZmFsc2UKIAorIyB0cmFja2VyPz8KK3B0LnRyYWNrZXIucG9ydD02OTY5CiAKLW15YmF0aXMtcGx1cy5tYXBwZXItbG9jYXRpb25zPWNsYXNzcGF0aDovbWFwcGVyLyoqLyoueG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorcHQudHJhY2tlci50b3JyZW50LWRpcj0ke3VzZXIuZGlyfS9kYXRhL3RvcnJlbnRzCisKK3B0LnRyYWNrZXIuYWxsb3ctZm9yZWlnbj1mYWxzZQorcHQudHJhY2tlci5hbm5vdW5jZS11cmw9L2N1c3RvbS1hbm5vdW5jZQorCitteWJhdGlzLXBsdXMubWFwcGVyLWxvY2F0aW9ucz1jbGFzc3BhdGg6L21hcHBlci8qKi8qLnhtbApkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQgYi9zcmMvbWFpbi9yZXNvdXJjZXMvZmlsZXMvZmlsZXMudG9ycmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQ5NzRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKQEAgLTAsMCArMSBAQAorZDg6YW5ub3VuY2UyMjpodHRwczovL3RyYWNrZXIuYnlyLnB0MTA6Y3JlYXRlZCBieTIxOnFCaXR0b3JyZW50IHY0LjUuMy4xMDEzOmNyZWF0aW9uIGRhdGVpMTc0NzcxNzkwMWU0OmluZm9kNTpmaWxlc2xkNjpsZW5ndGhpMTczZTQ6cGF0aGwxMzp2YWxpZC50b3JyZW50ZWVlNDpuYW1lNTpmaWxlczEyOnBpZWNlIGxlbmd0aGkxNjM4NGU2OnBpZWNlczIwOi/x7ehF9DXjPPL7H+zVhJ9RoZb7ZWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbCBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvRmF2b3JpdGVNYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDhlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuRmF2b3JpdGVNYXBwZXIiPgorIAorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmZmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlByb21vdGlvbk1hcHBlciI+CisKKyAgICA8aW5zZXJ0IGlkPSJpbnNlcnQiIHBhcmFtZXRlclR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUHJvbW90aW9uIj4KKyAgICAgICAgSU5TRVJUIElOVE8gcHJvbW90aW9uICgKKyAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sIHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBkaXNjb3VudF9wZXJjZW50YWdlLCBhcHBsaWNhYmxlX3RvcnJlbnRfaWRzCisgICAgICAgICkgVkFMVUVTICgKKyAgICAgICAgI3tuYW1lfSwgI3tkZXNjcmlwdGlvbn0sICN7c3RhcnRUaW1lfSwgI3tlbmRUaW1lfSwgI3tkaXNjb3VudFBlcmNlbnRhZ2V9LCAje2FwcGxpY2FibGVUb3JyZW50SWRzfQorICAgICAgICApCisgICAgPC9pbnNlcnQ+CisKKzwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9Ub3JyZW50TWFwcGVyLnhtbCBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvVG9ycmVudE1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmMDE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvVG9ycmVudE1hcHBlci54bWwKQEAgLTAsMCArMSwxMDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorCis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Ub3JyZW50TWFwcGVyIj4KKyAgICA8cmVzdWx0TWFwIGlkPSJCYXNlUmVzdWx0TWFwIiB0eXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHkiPgorICAgICAgICA8aWQgY29sdW1uPSJpbmZvX2hhc2giIHByb3BlcnR5PSJpbmZvSGFzaCIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0iZmlsZV9uYW1lIiBwcm9wZXJ0eT0iZmlsZU5hbWUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZGVyIiBwcm9wZXJ0eT0idXBsb2FkZXIiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZF90aW1lIiBwcm9wZXJ0eT0idXBsb2FkVGltZSIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0ic2l6ZSIgcHJvcGVydHk9InNpemUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InRpdGxlIiBwcm9wZXJ0eT0idGl0bGUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImRlc2NyaXB0aW9uIiBwcm9wZXJ0eT0iZGVzY3JpcHRpb24iLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImNhdGVnb3J5IiBwcm9wZXJ0eT0iY2F0ZWdvcnkiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImltYWdlX3VybCIgcHJvcGVydHk9ImltYWdlVXJsIi8+CisgICAgPC9yZXN1bHRNYXA+CisKKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUluZm9IYXNoIiByZXN1bHRNYXA9IkJhc2VSZXN1bHRNYXAiPgorICAgICAgICBTRUxFQ1QgKiBGUk9NIHRvcnJlbnQgV0hFUkUgaW5mb19oYXNoID0gI3tpbmZvSGFzaH0KKyAgICA8L3NlbGVjdD4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVNlZWRJZCIgcmVzdWx0TWFwPSJCYXNlUmVzdWx0TWFwIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50IFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0KKyAgICA8L3NlbGVjdD4KKworCisKKworICAgIDx1cGRhdGUgaWQ9InVwZGF0ZSIgcGFyYW1ldGVyVHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgVVBEQVRFIHRvcnJlbnQKKyAgICAgICAgU0VUIGZpbGVfbmFtZSA9ICN7ZmlsZU5hbWV9LAorICAgICAgICB1cGxvYWRlciA9ICN7dXBsb2FkZXJ9LAorICAgICAgICB1cGxvYWRfdGltZSA9ICN7dXBsb2FkVGltZX0sCisgICAgICAgIHNpemUgPSAje3NpemV9LAorICAgICAgICB0aXRsZSA9ICN7dGl0bGV9LAorICAgICAgICBkZXNjcmlwdGlvbiA9ICN7ZGVzY3JpcHRpb259LAorICAgICAgICBjYXRlZ29yeSA9ICN7Y2F0ZWdvcnl9LAorICAgICAgICBpbWFnZV91cmwgPSAje2ltYWdlVXJsfQorICAgICAgICBXSEVSRSBpbmZvX2hhc2ggPSAje2luZm9IYXNofQorICAgIDwvdXBkYXRlPgorICAgIDxzZWxlY3QgaWQ9InNlYXJjaCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50CisgICAgICAgIDx3aGVyZT4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5jYXRlZ29yeSAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICBBTkQgY2F0ZWdvcnkgPSAje3BhcmFtLmNhdGVnb3J5fQorICAgICAgICAgICAgPC9pZj4KKworICAgICAgICAgICAgPCEtLSAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCBhbmQgcGFyYW0uZnJlZSAhPSAnJyI+LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICAgICAgQU5EIGZyZWUgPSAje3BhcmFtLmZyZWV9LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICA8L2lmPi0tPgorICAgICAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCI+CisgICAgICAgICAgICA8Y2hvb3NlPgorICAgICAgICAgICAgICAgIDwhLS0g562b6YCJ4oCc5q2j5Zyo5L+D6ZSA5Lit4oCd55qE56eN5a2QIC0tPgorICAgICAgICAgICAgICAgIDx3aGVuIHRlc3Q9InBhcmFtLmZyZWUgPT0gdHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIEFORCBFWElTVFMgKAorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHByb21vdGlvbiBwCisgICAgICAgICAgICAgICAgICAgIFdIRVJFCisgICAgICAgICAgICAgICAgICAgIEpTT05fQ09OVEFJTlMocC5hcHBsaWNhYmxlX3RvcnJlbnRfaWRzLCBKU09OX0FSUkFZKHQuaWQpKQorICAgICAgICAgICAgICAgICAgICBBTkQgTk9XKCkgQkVUV0VFTiBwLnN0YXJ0X3RpbWUgQU5EIHAuZW5kX3RpbWUKKyAgICAgICAgICAgICAgICAgICAgQU5EIHAuaXNfZGVsZXRlZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIDwvd2hlbj4KKyAgICAgICAgICAgICAgICA8IS0tIOetm+mAieKAnOacquWcqOS/g+mUgOS4reKAneeahOenjeWtkCAtLT4KKyAgICAgICAgICAgICAgICA8b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIEVYSVNUUyAoCisgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcHJvbW90aW9uIHAKKyAgICAgICAgICAgICAgICAgICAgV0hFUkUKKyAgICAgICAgICAgICAgICAgICAgSlNPTl9DT05UQUlOUyhwLmFwcGxpY2FibGVfdG9ycmVudF9pZHMsIEpTT05fQVJSQVkodC5pZCkpCisgICAgICAgICAgICAgICAgICAgIEFORCBOT1coKSBCRVRXRUVOIHAuc3RhcnRfdGltZSBBTkQgcC5lbmRfdGltZQorICAgICAgICAgICAgICAgICAgICBBTkQgcC5pc19kZWxldGVkID0gMAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgPC9vdGhlcndpc2U+CisgICAgICAgICAgICA8L2Nob29zZT4KKyAgICAgICAgICAgIDwvaWY+CisKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5saWtlRXhwcmVzc2lvbnMgIT0gbnVsbCBhbmQgcGFyYW0ubGlrZUV4cHJlc3Npb25zLnNpemUgPiAwIj4KKyAgICAgICAgICAgICAgICBBTkQgKAorICAgICAgICAgICAgICAgIDxmb3JlYWNoIGNvbGxlY3Rpb249InBhcmFtLmxpa2VFeHByZXNzaW9ucyIgaXRlbT0iaXRlbSIgb3Blbj0iKCIgc2VwYXJhdG9yPSIgQU5EICIgY2xvc2U9IikiPgorCisgICAgICAgICAgICAgICAgICAgICggdGl0bGUgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkgb3IgKCBkZXNjcmlwdGlvbiBMSUtFIENPTkNBVCgnJScsICN7aXRlbX0sICclJykgKSBvciAoIHRhZ3MgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkKKyAgICAgICAgICAgICAgICA8L2ZvcmVhY2g+CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgPC9pZj4KKyAgICAgICAgPC93aGVyZT4KKworICAgICAgICA8aWYgdGVzdD0icGFyYW0ucHJvcCAhPSBudWxsIGFuZCBwYXJhbS5zb3J0ICE9IG51bGwiPgorICAgICAgICAgICAgT1JERVIgQlkgJHtwYXJhbS5wcm9wfSAke3BhcmFtLnNvcnR9CisgICAgICAgIDwvaWY+CisgICAgPC9zZWxlY3Q+CisgICAgPHNlbGVjdCBpZD0iY2hlY2tGYXZvcml0ZSIgcmVzdWx0VHlwZT0iYm9vbGVhbiI+CisgICAgICAgIFNFTEVDVCBDT1VOVCgqKSA+IDAKKyAgICAgICAgRlJPTSBmYXZvcml0ZQorICAgICAgICBXSEVSRSBzZWVkX2lkID0gI3tzZWVkSWR9IEFORCB1c2VyX2lkID0gI3t1c2VySWR9CisgICAgPC9zZWxlY3Q+CisgICAgPGluc2VydCBpZD0iYWRkRmF2b3JpdGUiPgorICAgICAgICBJTlNFUlQgSU5UTyBmYXZvcml0ZSAoc2VlZF9pZCwgdXNlcl9pZCkKKyAgICAgICAgVkFMVUVTICgje3NlZWRJZH0sICN7dXNlcklkfSkKKyAgICA8L2luc2VydD4KKyAgICA8ZGVsZXRlIGlkPSJyZW1vdmVGYXZvcml0ZSI+CisgICAgICAgIERFTEVURSBGUk9NIGZhdm9yaXRlCisgICAgICAgIFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0gQU5EIHVzZXJfaWQgPSAje3VzZXJJZH0KKyAgICA8L2RlbGV0ZT4KKworCis8L21hcHBlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1VzZXJNYXBwZXIueG1sIGIvc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDNhYjBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXIiPgorICAgIDwhLS0g5qC55o2u55So5oi35ZCN5p+l5om+55So5oi3IC0tPgorICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ5VXNlcm5hbWUiIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0KKyAgICA8L3NlbGVjdD4KKyAgICA8IS0tIOagueaNrueUqOaIt+WQjeWSjOWvhueggeafpeaJvueUqOaItyAtLT4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVVzZXJuYW1lQW5kUGFzc3dvcmQiIHBhcmFtZXRlclR5cGU9Im1hcCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0gQU5EIHBhc3N3b3JkID0gI3twYXNzd29yZH0KKyAgICA8L3NlbGVjdD4KKyAgICA8IS0tIOagueaNrumCrueuseafpeaJvueUqOaItyAtLT4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUVtYWlsIiBwYXJhbWV0ZXJUeXBlPSJzdHJpbmciIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlciI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdXNlciBXSEVSRSBlbWFpbCA9ICN7ZW1haWx9CisgICAgPC9zZWxlY3Q+CisgICAgPCEtLSDmoLnmja7nlKjmiLflkI3ljIXlkKvmn6Xmib7nlKjmiLcgLS0+CisgICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlVc2VybmFtZUNvbnRhaW5pbmciIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lIExJS0UgQ09OQ0FUKCclJywgI3tuYW1lfSwgJyUnKQorICAgIDwvc2VsZWN0PgorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbCBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYjE5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhRE9DVFlQRSBtYXBwZXIgUFVCTElDICItLy9teWJhdGlzLm9yZy8vRFREIE1hcHBlciAzLjAvL0VOIgorICAgICAgICAiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Cis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5WZXJpZmljYXRpb25Ub2tlbk1hcHBlciI+CisgICAgPCEtLSDpgJrov4cgdG9rZW4g5ZKMIGVtYWlsIOafpeivoiBWZXJpZmljYXRpb25Ub2tlbiAtLT4KKyAgICA8c2VsZWN0IGlkPSJmaW5kQnlUb2tlbkFuZEVtYWlsIiByZXN1bHRUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlZlcmlmaWNhdGlvblRva2VuIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB2ZXJpZmljYXRpb25fdG9rZW4KKyAgICAgICAgV0hFUkUgdG9rZW4gPSAje3Rva2VufSBBTkQgZW1haWwgPSAje2VtYWlsfQorICAgIDwvc2VsZWN0PgorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3V0cHV0L3ZhbGlkLnRvcnJlbnQgYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3V0cHV0L3ZhbGlkLnRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MGU1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9vdXRwdXQvdmFsaWQudG9ycmVudApAQCAtMCwwICsxIEBACitkMTA6Y3JlYXRlZCBieTE4OnFCaXR0b3JyZW50IHY1LjEuMDEzOmNyZWF0aW9uIGRhdGVpMTc0NTk0ODk5NWU0OmluZm9kNjpsZW5ndGhpMjJlNDpuYW1lMTU6ZXhhbXBsZS50b3JyZW50MTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6Rm4e8LYaKfo8xwmOBubCaBSjdGw3OnByaXZhdGVpMWVlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGVkZDI5Li4wMDAwMDAwCi0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db21tZW50czsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkNvbW1lbnRTZXJ2aWNlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC51dGlscy5SZXN1bHQ7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKLQotY2xhc3MgQ29tbWVudENvbnRyb2xsZXJUZXN0IHsKLQotICAgIEBJbmplY3RNb2NrcwotICAgIHByaXZhdGUgQ29tbWVudENvbnRyb2xsZXIgY29tbWVudENvbnRyb2xsZXI7Ci0gICAgQE1vY2sKLSAgICBwcml2YXRlIENvbW1lbnRTZXJ2aWNlIGNvbW1lbnRTZXJ2aWNlOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFVzZXJzIG1vY2tVc2VyOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICB2b2lkIHNldHVwKCkgewotICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOwotICAgIH0KLQotICAgIC8vIOa1i+ivlea3u+WKoOivhOiuugotICAgIEBUZXN0Ci0gICAgdm9pZCBhZGRDb21tZW50VGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLSAgICAgICAgQ29tbWVudHMgY29tbWVudCA9IG5ldyBDb21tZW50cygpOwotICAgICAgICBjb21tZW50LnNldFVzZXJJZCgxTCk7Ci0gICAgICAgIGNvbW1lbnQuc2V0Q29udGVudCgiVGhpcyBpcyBhIGNvbW1lbnQiKTsKLSAgICAgICAgY29tbWVudC5zZXRQYXJlbnRDb21tZW50KDBMKTsKLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIGRvTm90aGluZygpLndoZW4oY29tbWVudFNlcnZpY2UpLmFkZENvbW1lbnQoZXEocG9zdElkKSwgZXEoY29tbWVudCkpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29tbWVudENvbnRyb2xsZXIuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIkNvbW1lbnQgYWRkZWQgc3VjY2Vzc2Z1bGx5ISIsIHJlc3VsdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5pa55rOV5piv5ZCm6KKr6LCD55SoCi0gICAgICAgIHZlcmlmeShjb21tZW50U2VydmljZSwgdGltZXMoMSkpLmFkZENvbW1lbnQoZXEocG9zdElkKSwgZXEoY29tbWVudCkpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluivhOiuugotICAgIEBUZXN0Ci0gICAgdm9pZCBnZXRDb21tZW50c0J5UG9zdElkVGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/or4TorrrmlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjb21tZW50RGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgY29tbWVudERhdGEucHV0KCJjb21tZW50SWQiLCAxTCk7Ci0gICAgICAgIGNvbW1lbnREYXRhLnB1dCgiY29udGVudCIsICJUaGlzIGlzIGEgY29tbWVudCIpOwotICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJJZCIsIDFMKTsKLSAgICAgICAgY29tbWVudERhdGEucHV0KCJuaWNrbmFtZSIsICJ1c2VyMSIpOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugotICAgICAgICB3aGVuKGNvbW1lbnRTZXJ2aWNlLmdldENvbW1lbnRzQnlQb3N0SWQocG9zdElkKSkudGhlblJldHVybihMaXN0Lm9mKGNvbW1lbnREYXRhKSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gY29tbWVudHMgPSBjb21tZW50Q29udHJvbGxlci5nZXRDb21tZW50c0J5UG9zdElkKHBvc3RJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE6K+E6K665pWw5o2uCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb21tZW50cy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIlRoaXMgaXMgYSBjb21tZW50IiwgY29tbWVudHMuZ2V0KDApLmdldCgiY29udGVudCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ1c2VyMSIsIGNvbW1lbnRzLmdldCgwKS5nZXQoIm5pY2tuYW1lIikpOwotCi0gICAgICAgIC8vIOmqjOivgeacjeWKoeaWueazleaYr+WQpuiiq+iwg+eUqAotICAgICAgICB2ZXJpZnkoY29tbWVudFNlcnZpY2UsIHRpbWVzKDEpKS5nZXRDb21tZW50c0J5UG9zdElkKHBvc3RJZCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOTIxNjIuLjAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuRHluYW1pY0NvbnRyb2xsZXI7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRHluYW1pY1NlcnZpY2U7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uSW5qZWN0TW9ja3M7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7Ci0KLWNsYXNzIER5bmFtaWNDb250cm9sbGVyVGVzdCB7Ci0KLSAgICBASW5qZWN0TW9ja3MKLSAgICBwcml2YXRlIER5bmFtaWNDb250cm9sbGVyIGR5bmFtaWNDb250cm9sbGVyOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIER5bmFtaWNTZXJ2aWNlIGR5bmFtaWNTZXJ2aWNlOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICB2b2lkIHNldHVwKCkgewotICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWIm+W7uuWKqOaAgeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0Q3JlYXRlRHluYW1pYygpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSAiVGhpcyBpcyBhIHRlc3QgZHluYW1pYyI7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJkeW5hbWljSWQiLCAxMjNMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLliqjmgIHliJvlu7rmiJDlip8iKTsKLQotICAgICAgICAvLyDmqKHmi58gZHluYW1pY1NlcnZpY2UuY3JlYXRlRHluYW1pYyDov5Tlm54KLSAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS5jcmVhdGVEeW5hbWljKHVzZXJJZCwgbnVsbCwgY29udGVudCwgbnVsbCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IGR5bmFtaWNDb250cm9sbGVyLmNyZWF0ZUR5bmFtaWModXNlcklkLCBudWxsLCBjb250ZW50LCBudWxsKTsKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2VFbnRpdHkgPSBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZU1hcCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlRW50aXR5LmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLliqjmgIHliJvlu7rmiJDlip8iLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzTCwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgiZHluYW1pY0lkIikpOwotICAgIH0KLQotCi0gICAgLy8g5rWL6K+V5Yig6Zmk5Yqo5oCB5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3REZWxldGVEeW5hbWljKCkgewotICAgICAgICBMb25nIGR5bmFtaWNJZCA9IDFMOwotICAgICAgICAvLyDmqKHmi58gZHluYW1pY1NlcnZpY2UuZGVsZXRlRHluYW1pYyDmlrnms5XooYzkuLoKLSAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihkeW5hbWljU2VydmljZSkuZGVsZXRlRHluYW1pYyhkeW5hbWljSWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBSZXNwb25zZUVudGl0eTxTdHJpbmc+IHJlc3BvbnNlID0gZHluYW1pY0NvbnRyb2xsZXIuZGVsZXRlRHluYW1pYyhkeW5hbWljSWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5Yqo5oCB5Yig6Zmk5oiQ5YqfIiwgcmVzcG9uc2UuZ2V0Qm9keSgpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmt7vliqDor4TorrrmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEFkZENvbW1lbnQoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIExvbmcgZHluYW1pY0lkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gY29tbWVudENvbnRlbnQgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGNvbW1lbnRDb250ZW50LnB1dCgiY29udGVudCIsICJUaGlzIGlzIGEgdGVzdCBjb21tZW50Iik7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImNvbW1lbnRfaWQiLCAxMDFMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLor4TorrrmiJDlip8iKTsKLQotICAgICAgICAvLyDmqKHmi58gZHluYW1pY1NlcnZpY2UuYWRkQ29tbWVudCDov5Tlm54KLSAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS5hZGRDb21tZW50KHVzZXJJZCwgZHluYW1pY0lkLCAiVGhpcyBpcyBhIHRlc3QgY29tbWVudCIpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gZHluYW1pY0NvbnRyb2xsZXIuYWRkQ29tbWVudCh1c2VySWQsIGR5bmFtaWNJZCwgY29tbWVudENvbnRlbnQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi6K+E6K665oiQ5YqfIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMUwsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoImNvbW1lbnRfaWQiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V6I635Y+W55So5oi35Yqo5oCB5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RHZXRBbGxVc2VyRHluYW1pY3MoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJkeW5hbWljIiwgIm1vY2tfZHluYW1pY19kYXRhIik7Ci0KLSAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmdldEFsbFVzZXJEeW5hbWljcyDov5Tlm54KLSAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS5nZXRBbGxVc2VyRHluYW1pY3ModXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZSA9IGR5bmFtaWNDb250cm9sbGVyLmdldEFsbFVzZXJEeW5hbWljcyh1c2VySWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJkeW5hbWljIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluaJgOacieWlveWPi+WKqOaAgeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcygpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImR5bmFtaWMiLCAibW9ja19mcmllbmRfZHluYW1pY19kYXRhIik7Ci0KLSAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3Mg6L+U5ZueCi0gICAgICAgIHdoZW4oZHluYW1pY1NlcnZpY2UuZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyhhbnlMaXN0KCkpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gZHluYW1pY0NvbnRyb2xsZXIuZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyh1c2VySWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJkeW5hbWljIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleeCuei1nuWKqOaAgeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0TGlrZUR5bmFtaWMoKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VySWQiLCAxTCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJkeW5hbWljSWQiLCAxTCk7Ci0KLSAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmxpa2VEeW5hbWljIOi/lOWbngotICAgICAgICB3aGVuKGR5bmFtaWNTZXJ2aWNlLmxpa2VEeW5hbWljKDFMLCAxTCkpLnRoZW5SZXR1cm4odHJ1ZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PFN0cmluZz4gcmVzcG9uc2UgPSBkeW5hbWljQ29udHJvbGxlci5saWtlRHluYW1pYyhyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkxpa2Ugc3VjY2Vzc2Z1bCIsIHJlc3BvbnNlLmdldEJvZHkoKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5Y+W5raI54K56LWe5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RVbmxpa2VEeW5hbWljKCkgewotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcklkIiwgMUwpOwotICAgICAgICByZXF1ZXN0LnB1dCgiZHluYW1pY0lkIiwgMUwpOwotCi0gICAgICAgIC8vIOaooeaLnyBkeW5hbWljU2VydmljZS51bmxpa2VEeW5hbWljIOi/lOWbngotICAgICAgICB3aGVuKGR5bmFtaWNTZXJ2aWNlLnVubGlrZUR5bmFtaWMoMUwsIDFMKSkudGhlblJldHVybih0cnVlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8U3RyaW5nPiByZXNwb25zZSA9IGR5bmFtaWNDb250cm9sbGVyLnVubGlrZUR5bmFtaWMocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJVbmxpa2Ugc3VjY2Vzc2Z1bCIsIHJlc3BvbnNlLmdldEJvZHkoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhjOGMyYy4uMDAwMDAwMAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuR3JvdXBDb250cm9sbGVyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuR3JvdXA7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cENvbW1lbnRzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkdyb3VwU2VydmljZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QudXRpbHMuUmVzdWx0OwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwotCi0KLWNsYXNzIEdyb3VwQ29udHJvbGxlclRlc3QgewotCi0gICAgQEluamVjdE1vY2tzCi0gICAgcHJpdmF0ZSBHcm91cENvbnRyb2xsZXIgZ3JvdXBDb250cm9sbGVyOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIEdyb3VwU2VydmljZSBncm91cFNlcnZpY2U7Ci0KLSAgICBAQmVmb3JlRWFjaAotICAgIHZvaWQgc2V0dXAoKSB7Ci0gICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5Yib5bu65bCP57uECi0KLSAgICBAVGVzdAotICAgIHZvaWQgY3JlYXRlR3JvdXBUZXN0KCkgewotICAgICAgICBHcm91cCBncm91cFJlcXVlc3QgPSBuZXcgR3JvdXAoKTsKLSAgICAgICAgZ3JvdXBSZXF1ZXN0LnNldEdyb3VwTmFtZSgiVGVzdCBHcm91cCIpOwotICAgICAgICBncm91cFJlcXVlc3Quc2V0RGVzY3JpcHRpb24oIlRoaXMgaXMgYSB0ZXN0IGdyb3VwIik7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJncm91cF9pZCIsIDFMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlhbTotqPlsI/nu4TliJvlu7rmiJDlip8iKTsKLQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBtb2NrUmVzcG9uc2VFbnRpdHkgPSBSZXNwb25zZUVudGl0eS5vayhtb2NrUmVzcG9uc2UpOwotICAgICAgICB3aGVuKGdyb3VwU2VydmljZS5jcmVhdGVHcm91cChncm91cFJlcXVlc3QpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZUVudGl0eSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PD8+IHJlc3BvbnNlRW50aXR5ID0gZ3JvdXBDb250cm9sbGVyLmNyZWF0ZUdyb3VwKGdyb3VwUmVxdWVzdCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKTsKLSAgICAgICAgUmVzdWx0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3VsdCA9IFJlc3VsdC5zdWNjZXNzKHJlc3VsdE1hcCwgIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIsIHJlc3VsdC5nZXRNc2coKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxTCwgcmVzdWx0LmdldERhdGEoKS5nZXQoImdyb3VwX2lkIikpOwotICAgIH0KLQotCi0gICAgLy8g5rWL6K+V5Yqg5YWl5bCP57uE5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RKb2luR3JvdXAoKSB7Ci0gICAgICAgIExvbmcgZ3JvdXBJZCA9IDFMOwotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmiJDlip/liqDlhaXlsI/nu4QiKTsKLSAgICAgICAgd2hlbihncm91cFNlcnZpY2Uuam9pbkdyb3VwKGdyb3VwSWQsIHVzZXJJZCkpLnRoZW5SZXR1cm4oUmVzcG9uc2VFbnRpdHkub2sobW9ja1Jlc3BvbnNlKSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5ID0gTWFwLm9mKCJ1c2VyX2lkIiwgdXNlcklkKTsKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBncm91cENvbnRyb2xsZXIuam9pbkdyb3VwKGdyb3VwSWQsIHJlcXVlc3RCb2R5KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5oiQ5Yqf5Yqg5YWl5bCP57uEIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5XpgIDlh7rlsI/nu4TmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdExlYXZlR3JvdXAoKSB7Ci0gICAgICAgIExvbmcgZ3JvdXBJZCA9IDFMOwotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmiJDlip/pgIDlh7rlsI/nu4QiKTsKLSAgICAgICAgd2hlbihncm91cFNlcnZpY2UubGVhdmVHcm91cChncm91cElkLCB1c2VySWQpKS50aGVuUmV0dXJuKFJlc3BvbnNlRW50aXR5Lm9rKG1vY2tSZXNwb25zZSkpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IE1hcC5vZigidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gZ3JvdXBDb250cm9sbGVyLmxlYXZlR3JvdXAoZ3JvdXBJZCwgcmVxdWVzdEJvZHkpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLmiJDlip/pgIDlh7rlsI/nu4QiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluWwj+e7hOaIkOWRmOaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0R3JvdXBNZW1iZXJzKCkgewotICAgICAgICBMb25nIGdyb3VwSWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lbWJlcnMiLCAibW9ja19tZW1iZXJzIik7Ci0gICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLmdldEdyb3VwTWVtYmVycyhncm91cElkKSkudGhlblJldHVybihSZXNwb25zZUVudGl0eS5vayhtb2NrUmVzcG9uc2UpKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBncm91cENvbnRyb2xsZXIuZ2V0R3JvdXBNZW1iZXJzKGdyb3VwSWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZW1iZXJzIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWPkeW4g+W4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBjcmVhdGVQb3N0VGVzdCgpIHsKLSAgICAgICAgTG9uZyBncm91cElkID0gMUw7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMkw7Ci0gICAgICAgIFN0cmluZyBwb3N0Q29udGVudCA9ICJUZXN0IHBvc3QgY29udGVudCI7Ci0gICAgICAgIFN0cmluZyB0aXRsZSA9ICJUZXN0IHBvc3QgdGl0bGUiOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgicG9zdF9pZCIsIDFMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLluJblrZDliJvlu7rmiJDlip8iKTsKLQotICAgICAgICB3aGVuKGdyb3VwU2VydmljZS5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBudWxsKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdCA9IGdyb3VwQ29udHJvbGxlci5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBudWxsKS5nZXRCb2R5KCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi5biW5a2Q5Yib5bu65oiQ5YqfIiwgcmVzdWx0LmdldCgibWVzc2FnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCByZXN1bHQuZ2V0KCJwb3N0X2lkIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleeCuei1nuW4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBsaWtlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueCuei1nuaIkOWKnyIpOwotCi0gICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLmxpa2VQb3N0KHBvc3RJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSBncm91cENvbnRyb2xsZXIubGlrZVBvc3QocG9zdElkKS5nZXRCb2R5KCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi54K56LWe5oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xlj5bmtojngrnotZ4KLSAgICBAVGVzdAotICAgIHZvaWQgdW5saWtlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWPlua2iOeCuei1nuaIkOWKnyIpOwotCi0gICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLnVubGlrZVBvc3QocG9zdElkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IGdyb3VwQ29udHJvbGxlci51bmxpa2VQb3N0KHBvc3RJZCkuZ2V0Qm9keSgpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIuWPlua2iOeCuei1nuaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5re75Yqg6K+E6K66Ci0gICAgQFRlc3QKLSAgICB2b2lkIGFkZENvbW1lbnRUZXN0KCkgewotICAgICAgICBMb25nIHBvc3RJZCA9IDFMOwotICAgICAgICBHcm91cENvbW1lbnRzIGNvbW1lbnQgPSBuZXcgR3JvdXBDb21tZW50cygpOwotICAgICAgICBjb21tZW50LnNldFVzZXJJZCgyTCk7Ci0gICAgICAgIGNvbW1lbnQuc2V0Q29udGVudCgiVGhpcyBpcyBhIGNvbW1lbnQiKTsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6K+E6K665oiQ5YqfIik7Ci0KLSAgICAgICAgd2hlbihncm91cFNlcnZpY2UuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gZ3JvdXBDb250cm9sbGVyLmFkZENvbW1lbnQocG9zdElkLCBjb21tZW50KS5nZXRCb2R5KCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi6K+E6K665oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0xldmVsQ29udHJvbGxlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Q3N2I5Li4wMDAwMDAwCi0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci5MZXZlbENvbnRyb2xsZXI7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuTGV2ZWxTZXJ2aWNlOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwotCi1jbGFzcyBMZXZlbENvbnRyb2xsZXJUZXN0IHsKLQotICAgIEBJbmplY3RNb2NrcwotICAgIHByaXZhdGUgTGV2ZWxDb250cm9sbGVyIGxldmVsQ29udHJvbGxlcjsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBMZXZlbFNlcnZpY2UgbGV2ZWxTZXJ2aWNlOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICB2b2lkIHNldHVwKCkgewotICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPlueUqOaIt+e7j+mqjOaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0RXhwZXJpZW5jZSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIDE1MDApOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJsZXZlbCIsICJJbnRlcm1lZGlhdGUiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibmV4dF9sZXZlbF9leHBlcmllbmNlIiwgMjAwMCk7Ci0KLSAgICAgICAgLy8g5qih5oufIGxldmVsU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSDov5Tlm54KLSAgICAgICAgd2hlbihsZXZlbFNlcnZpY2UuZ2V0VXNlckV4cGVyaWVuY2UodXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbGV2ZWxDb250cm9sbGVyLmdldEV4cGVyaWVuY2UodXNlcklkKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDE1MDAsIHJlc3BvbnNlLmdldCgiY3VycmVudF9leHBlcmllbmNlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkludGVybWVkaWF0ZSIsIHJlc3BvbnNlLmdldCgibGV2ZWwiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDAwLCByZXNwb25zZS5nZXQoIm5leHRfbGV2ZWxfZXhwZXJpZW5jZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmm7TmlrDnlKjmiLfnu4/pqozmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFVwZGF0ZUV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIEludGVnZXIgZXhwZXJpZW5jZSA9IDUwMDsKLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9ICJRdWVzdCI7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIue7j+mqjOabtOaWsOaIkOWKnyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCAyMDAwKTsKLQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcGFyYW1zLnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHBhcmFtcy5wdXQoImV4cGVyaWVuY2UiLCBleHBlcmllbmNlKTsKLSAgICAgICAgcGFyYW1zLnB1dCgic291cmNlIiwgc291cmNlKTsKLQotICAgICAgICAvLyDmqKHmi58gbGV2ZWxTZXJ2aWNlLnVwZGF0ZUV4cGVyaWVuY2Ug6L+U5ZueCi0gICAgICAgIHdoZW4obGV2ZWxTZXJ2aWNlLnVwZGF0ZUV4cGVyaWVuY2UodXNlcklkLCBleHBlcmllbmNlLCBzb3VyY2UpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBsZXZlbENvbnRyb2xsZXIudXBkYXRlRXhwZXJpZW5jZShwYXJhbXMpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLnu4/pqozmm7TmlrDmiJDlip8iLCByZXNwb25zZS5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDAwLCByZXNwb25zZS5nZXQoImN1cnJlbnRfZXhwZXJpZW5jZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmo4Dmn6XnlKjmiLfljYfnuqfmnaHku7bmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdENoZWNrVXBncmFkZSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImNhbl91cGdyYWRlIiwgdHJ1ZSk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm5leHRfbGV2ZWxfZXhwZXJpZW5jZSIsIDIwMDApOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCAxNTAwKTsKLQotICAgICAgICAvLyDmqKHmi58gbGV2ZWxTZXJ2aWNlLmNoZWNrVXBncmFkZSDov5Tlm54KLSAgICAgICAgd2hlbihsZXZlbFNlcnZpY2UuY2hlY2tVcGdyYWRlKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGxldmVsQ29udHJvbGxlci5jaGVja1VwZ3JhZGUodXNlcklkKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0VHJ1ZSgoQm9vbGVhbikgcmVzcG9uc2UuZ2V0KCJjYW5fdXBncmFkZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDAsIHJlc3BvbnNlLmdldCgibmV4dF9sZXZlbF9leHBlcmllbmNlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTUwMCwgcmVzcG9uc2UuZ2V0KCJjdXJyZW50X2V4cGVyaWVuY2UiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5Y2H57qn55So5oi3562J57qn5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RVcGdyYWRlVXNlckxldmVsKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBCb29sZWFuIGNhblVwZ3JhZGUgPSB0cnVlOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLljYfnuqfmiJDlip8iKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibmV3X2xldmVsIiwgIkFkdmFuY2VkIik7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJjYW5fdXBncmFkZSIsIGNhblVwZ3JhZGUpOwotCi0gICAgICAgIC8vIOaooeaLnyBsZXZlbFNlcnZpY2UudXBncmFkZVVzZXJMZXZlbCDov5Tlm54KLSAgICAgICAgd2hlbihsZXZlbFNlcnZpY2UudXBncmFkZVVzZXJMZXZlbCh1c2VySWQsIGNhblVwZ3JhZGUpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBsZXZlbENvbnRyb2xsZXIudXBncmFkZVVzZXJMZXZlbChyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5Y2H57qn5oiQ5YqfIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkFkdmFuY2VkIiwgcmVzcG9uc2UuZ2V0KCJuZXdfbGV2ZWwiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ODYwODYuLjAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db2xsZWN0aW9uczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlBvc3Q7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Db2xsZWN0aW9uc1JlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuUG9zdFJlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuUG9zdFNlcnZpY2U7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnV0aWxzLlJlc3VsdDsKLWltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKLWltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKLWltcG9ydCBvcmcubW9ja2l0by4qOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLm11bHRpcGFydC5NdWx0aXBhcnRGaWxlOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwotCi1jbGFzcyBQb3N0Q29udHJvbGxlclRlc3QgewotCi0gICAgQEluamVjdE1vY2tzCi0gICAgcHJpdmF0ZSBQb3N0Q29udHJvbGxlciBwb3N0Q29udHJvbGxlcjsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBQb3N0U2VydmljZSBwb3N0U2VydmljZTsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBDb2xsZWN0aW9uc1JlcG9zaXRvcnkgY29sbGVjdGlvbnNSZXBvc2l0b3J5OwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFBvc3RSZXBvc2l0b3J5IHBvc3RSZXBvc2l0b3J5OwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCi0gICAgQEluamVjdE1vY2tzCi0gICAgcHJpdmF0ZSBVc2VyQ29udHJvbGxlciB1c2VyQ29udHJvbGxlcjsKLQotICAgIEBCZWZvcmVFYWNoCi0gICAgdm9pZCBzZXR1cCgpIHsKLSAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5XliJvlu7rluJblrZAKLSAgICB2b2lkIGNyZWF0ZVBvc3RUZXN0KCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBTdHJpbmcgcG9zdENvbnRlbnQgPSAiVGVzdCBQb3N0IENvbnRlbnQiOwotICAgICAgICBTdHJpbmcgdGl0bGUgPSAiVGVzdCBQb3N0IFRpdGxlIjsKLSAgICAgICAgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMgPSBuZXcgTXVsdGlwYXJ0RmlsZVswXTsgIC8vIEVtcHR5IGFycmF5IGZvciBzaW1wbGljaXR5Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2VNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlTWFwLnB1dCgicG9zdE5vIiwgMTIzTCk7Ci0gICAgICAgIHJlc3BvbnNlTWFwLnB1dCgibWVzc2FnZSIsICLluJblrZDliJvlu7rmiJDlip8iKTsKLQotICAgICAgICB3aGVuKHBvc3RTZXJ2aWNlLmNyZWF0ZVBvc3QodXNlcklkLCBwb3N0Q29udGVudCwgdGl0bGUsIGltYWdlRmlsZXMpKS50aGVuUmV0dXJuKHJlc3BvbnNlTWFwKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSBwb3N0Q29udHJvbGxlci5jcmVhdGVQb3N0KHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBpbWFnZUZpbGVzKTsKLQotICAgICAgICAvLyDmiYvliqjlsIYgTWFwPFN0cmluZywgT2JqZWN0PiDljIXoo4XliLAgUmVzdWx0LnN1Y2Nlc3MoKQotICAgICAgICBSZXN1bHQ8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzdWx0ID0gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0TWFwLCAi5biW5a2Q5Yib5bu65oiQ5YqfIik7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygiMjAwIiwgcmVzdWx0LmdldENvZGUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5biW5a2Q5Yib5bu65oiQ5YqfIiwgcmVzdWx0LmdldE1zZygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyM0wsIHJlc3VsdC5nZXREYXRhKCkuZ2V0KCJwb3N0Tm8iKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V57yW6L6R5biW5a2QCi0gICAgQFRlc3QKLSAgICB2b2lkIHVwZGF0ZVBvc3RUZXN0KCkgewotICAgICAgICBMb25nIHBvc3RJZCA9IDFMOwotICAgICAgICBQb3N0IHBvc3QgPSBuZXcgUG9zdCgpOwotICAgICAgICBwb3N0LnNldFBvc3RObyhwb3N0SWQpOwotICAgICAgICBwb3N0LnNldFRpdGxlKCJVcGRhdGVkIFRpdGxlIik7Ci0gICAgICAgIHBvc3Quc2V0UG9zdENvbnRlbnQoIlVwZGF0ZWQgQ29udGVudCIpOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugotICAgICAgICBkb05vdGhpbmcoKS53aGVuKHBvc3RTZXJ2aWNlKS51cGRhdGVQb3N0KHBvc3RJZCwgcG9zdCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIFN0cmluZyByZXN1bHQgPSBwb3N0Q29udHJvbGxlci51cGRhdGVQb3N0KHBvc3RJZCwgcG9zdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygiUG9zdCB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWIoOmZpOW4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBkZWxldGVQb3N0VGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKLSAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihwb3N0U2VydmljZSkuZGVsZXRlUG9zdChwb3N0SWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIuZGVsZXRlUG9zdChwb3N0SWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIlBvc3QgZGVsZXRlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5XngrnotZ7luJblrZAKLSAgICBAVGVzdAotICAgIHZvaWQgbGlrZVBvc3RUZXN0KCkgewotICAgICAgICBMb25nIHBvc3RJZCA9IDFMOwotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugotICAgICAgICBkb05vdGhpbmcoKS53aGVuKHBvc3RTZXJ2aWNlKS5saWtlUG9zdChwb3N0SWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0Qm9keS5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIubGlrZVBvc3QocG9zdElkLCByZXF1ZXN0Qm9keSk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygiUG9zdCBsaWtlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xlj5bmtojngrnotZ7luJblrZAKLSAgICBAVGVzdAotICAgIHZvaWQgdW5saWtlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLnVubGlrZVBvc3QocG9zdElkLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdEJvZHkucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLnVubGlrZVBvc3QocG9zdElkLCByZXF1ZXN0Qm9keSk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygiUG9zdCB1bmxpa2VkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleaUtuiXj+W4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBjb2xsZWN0UG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLmNvbGxlY3RQb3N0KHBvc3RJZCwgdXNlcklkKTsKLQotICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKLSAgICAgICAgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdEJvZHkgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3RCb2R5LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIFN0cmluZyByZXN1bHQgPSBwb3N0Q29udHJvbGxlci5jb2xsZWN0UG9zdChwb3N0SWQsIHJlcXVlc3RCb2R5KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJQb3N0IGNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xlj5bmtojmlLbol4/luJblrZAKLSAgICBAVGVzdAotICAgIHZvaWQgdW5jb2xsZWN0UG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLnVuY29sbGVjdFBvc3QocG9zdElkLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdEJvZHkucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLnVuY29sbGVjdFBvc3QocG9zdElkLCByZXF1ZXN0Qm9keSk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygiUG9zdCB1bmNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5bmiYDmnInluJblrZAKLSAgICBAVGVzdAotICAgIHZvaWQgZ2V0QWxsUG9zdHNUZXN0KCkgewotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJ0b3RhbCIsIDUpOwotICAgICAgICByZXNwb25zZU1hcC5wdXQoInBvc3RzIiwgbmV3IEFycmF5TGlzdDw+KCkpOwotCi0gICAgICAgIHdoZW4ocG9zdFNlcnZpY2UuZ2V0QWxsUG9zdHMoKSkudGhlblJldHVybihyZXNwb25zZU1hcCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIuZ2V0QWxsUG9zdHMoKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHJlc3VsdC5nZXQoInRvdGFsIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleagueaNruW4luWtkElE6I635Y+W5biW5a2QCi0gICAgQFRlc3QKLSAgICB2b2lkIGdldFBvc3RCeUlkVGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJwb3N0Tm8iLCAxMjNMKTsKLSAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJtZXNzYWdlIiwgIlBvc3QgZGV0YWlscyIpOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugotICAgICAgICB3aGVuKHBvc3RTZXJ2aWNlLmdldFBvc3RCeUlkKHBvc3RJZCkpLnRoZW5SZXR1cm4ocmVzcG9uc2VNYXApOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLmdldFBvc3RCeUlkKHBvc3RJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygiUG9zdCBkZXRhaWxzIiwgcmVzdWx0LmdldCgibWVzc2FnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyM0wsIHJlc3VsdC5nZXQoInBvc3RObyIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5bnlKjmiLfmlLbol4/nmoTmiYDmnInluJblrZDmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldEFsbENvbGxlY3Rpb25zKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotCi0gICAgICAgIC8vIOaooeaLn+eUqOaIt+aUtuiXj+eahOaVsOaNrgotICAgICAgICBDb2xsZWN0aW9ucyBjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb25zKCk7Ci0gICAgICAgIGNvbGxlY3Rpb24uc2V0Q29sbGVjdGlvbklkKDFMKTsKLSAgICAgICAgY29sbGVjdGlvbi5zZXRVc2VySWQodXNlcklkKTsKLSAgICAgICAgY29sbGVjdGlvbi5zZXRQb3N0Tm8oMTAxTCk7Ci0KLSAgICAgICAgTGlzdDxDb2xsZWN0aW9ucz4gY29sbGVjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb24pOwotCi0gICAgICAgIC8vIOaooeaLn+W4luWtkOaVsOaNrgotICAgICAgICBQb3N0IHBvc3QgPSBuZXcgUG9zdCgpOwotICAgICAgICBwb3N0LnNldFBvc3RObygxMDFMKTsKLSAgICAgICAgcG9zdC5zZXRUaXRsZSgiVGVzdCBQb3N0IFRpdGxlIik7Ci0gICAgICAgIHBvc3Quc2V0UG9zdENvbnRlbnQoIlRlc3QgUG9zdCBDb250ZW50Iik7Ci0gICAgICAgIHBvc3Quc2V0SW1hZ2VVcmwoImh0dHBzOi8vZXhhbXBsZS5jb20vaW1hZ2UuanBnIik7Ci0gICAgICAgIHBvc3Quc2V0VXNlcl9pZCgyTCk7ICAvLyDkvZzogIXnlKjmiLdJRAotCi0gICAgICAgIFVzZXJzIHVzZXIgPSBuZXcgVXNlcnMoKTsKLSAgICAgICAgdXNlci5zZXRVc2VySWQoMkwpOwotICAgICAgICB1c2VyLnNldFVzZXJuYW1lKCJ0ZXN0VXNlciIpOwotICAgICAgICB1c2VyLnNldEF2YXRhclVybCgiaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIuanBnIik7Ci0KLSAgICAgICAgLy8g6K6+572u5qih5ouf5pyN5Yqh5bGC55qE6L+U5ZueCi0gICAgICAgIHdoZW4ocG9zdFNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnModXNlcklkKSkudGhlblJldHVybihBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIE1hcC5vZigKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3N0Tm8iLCBwb3N0LmdldFBvc3RObygpLAotICAgICAgICAgICAgICAgICAgICAgICAgInRpdGxlIiwgcG9zdC5nZXRUaXRsZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RDb250ZW50IiwgcG9zdC5nZXRQb3N0Q29udGVudCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgImltYWdlVXJsIiwgcG9zdC5nZXRJbWFnZVVybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgInVzZXJJZCIsIHBvc3QuZ2V0VXNlcl9pZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgInVzZXJuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgImF2YXRhclVybCIsIHVzZXIuZ2V0QXZhdGFyVXJsKCkKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICkpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLmdldEFsbENvbGxlY3Rpb25zKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydE5vdE51bGwocmVzdWx0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5zaXplKCkpOyAvLyDpqozor4Hov5Tlm57mlbDmja7nmoTmlbDph48KLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTmlbDmja7nu5PmnoQKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwb3N0SW5mbyA9IHJlc3VsdC5nZXQoMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMDFMLCBwb3N0SW5mby5nZXQoInBvc3RObyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJUZXN0IFBvc3QgVGl0bGUiLCBwb3N0SW5mby5nZXQoInRpdGxlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIlRlc3QgUG9zdCBDb250ZW50IiwgcG9zdEluZm8uZ2V0KCJwb3N0Q29udGVudCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwczovL2V4YW1wbGUuY29tL2ltYWdlLmpwZyIsIHBvc3RJbmZvLmdldCgiaW1hZ2VVcmwiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyTCwgcG9zdEluZm8uZ2V0KCJ1c2VySWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdFVzZXIiLCBwb3N0SW5mby5nZXQoInVzZXJuYW1lIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHBzOi8vZXhhbXBsZS5jb20vYXZhdGFyLmpwZyIsIHBvc3RJbmZvLmdldCgiYXZhdGFyVXJsIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvU2VlZENvbW1lbnRDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYTZmZjMuLjAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5TZWVkQ29tbWVudDsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5TZWVkQ29tbWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uSW5qZWN0TW9ja3M7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7Ci0KLXB1YmxpYyBjbGFzcyBTZWVkQ29tbWVudENvbnRyb2xsZXJUZXN0IHsKLQotICAgIEBJbmplY3RNb2NrcwotICAgIHByaXZhdGUgU2VlZENvbW1lbnRDb250cm9sbGVyIHNlZWRDb21tZW50Q29udHJvbGxlcjsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBTZWVkQ29tbWVudFNlcnZpY2Ugc2VlZENvbW1lbnRTZXJ2aWNlOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsgIC8vIOWIneWni+WMliBNb2NraXRvIOazqOinowotICAgIH0KLQotICAgIC8vIOa1i+ivleWPkeW4g+ivhOiuugotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFB1Ymxpc2hDb21tZW50KCkgewotICAgICAgICBpbnQgc2VlZElkID0gMTsKLSAgICAgICAgU2VlZENvbW1lbnQgc2VlZENvbW1lbnQgPSBuZXcgU2VlZENvbW1lbnQoKTsKLSAgICAgICAgc2VlZENvbW1lbnQuc2V0Q29udGVudCgiVGVzdCBjb21tZW50IGNvbnRlbnQiKTsKLSAgICAgICAgc2VlZENvbW1lbnQuc2V0VXNlcklkKDEpOwotICAgICAgICBzZWVkQ29tbWVudC5zZXRDb21Db21tZW50SWQoMCk7ICAvLyDpobbnuqfor4TorroKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKLSAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2UgPSAieyBcInN0YXR1c1wiOiBcInN1Y2Nlc3NcIiwgXCJtZXNzYWdlXCI6IFwi6K+E6K665Y+R5biD5oiQ5YqfXCIgfSI7Ci0gICAgICAgIHdoZW4oc2VlZENvbW1lbnRTZXJ2aWNlLnB1Ymxpc2hDb21tZW50KHNlZWRJZCwgc2VlZENvbW1lbnQpKS50aGVuUmV0dXJuKGV4cGVjdGVkUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gc2VlZENvbW1lbnRDb250cm9sbGVyLnB1Ymxpc2hDb21tZW50KHNlZWRJZCwgc2VlZENvbW1lbnQpOwotCi0gICAgICAgIC8vIOmqjOivgee7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRSZXNwb25zZSwgcmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5bnp43lrZDkuIvmiYDmnInor4TorroKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRBbGxDb21tZW50cygpIHsKLSAgICAgICAgaW50IHNlZWRJZCA9IDE7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXhwZWN0ZWRSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgZXhwZWN0ZWRSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIGV4cGVjdGVkUmVzcG9uc2UucHV0KCJjb21tZW50cyIsICJkdW1teUNvbW1lbnRzIik7ICAvLyDnpLrkvovov5Tlm57mlbDmja4KLQotICAgICAgICB3aGVuKHNlZWRDb21tZW50U2VydmljZS5nZXRBbGxDb21tZW50c0ZvclNlZWQoc2VlZElkKSkudGhlblJldHVybihleHBlY3RlZFJlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHQgPSBzZWVkQ29tbWVudENvbnRyb2xsZXIuZ2V0QWxsQ29tbWVudHMoc2VlZElkKTsKLQotICAgICAgICAvLyDpqozor4Hnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUmVzcG9uc2UsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V54K56LWe5YiH5o2i5pON5L2cCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0VG9nZ2xlTGlrZSgpIHsKLSAgICAgICAgTG9uZyBjb21tZW50SWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIDFMKTsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBleHBlY3RlZFJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBleHBlY3RlZFJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgZXhwZWN0ZWRSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5pON5L2c5oiQ5YqfIik7Ci0gICAgICAgIGV4cGVjdGVkUmVzcG9uc2UucHV0KCJsaWtlZCIsICJ0cnVlIik7Ci0KLSAgICAgICAgd2hlbihzZWVkQ29tbWVudFNlcnZpY2UudG9nZ2xlTGlrZShjb21tZW50SWQsIDFMKSkudGhlblJldHVybihleHBlY3RlZFJlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHQgPSBzZWVkQ29tbWVudENvbnRyb2xsZXIudG9nZ2xlTGlrZShjb21tZW50SWQsIHJlcXVlc3QpOwotCi0gICAgICAgIC8vIOmqjOivgee7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRSZXNwb25zZSwgcmVzdWx0KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiYjc1NC4uMDAwMDAwMAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci5UYXNrQ29udHJvbGxlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5UYXNrU2VydmljZTsKLWltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKLWltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKLWltcG9ydCBvcmcubW9ja2l0by5JbmplY3RNb2NrczsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NrOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG9Bbm5vdGF0aW9uczsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKLQotY2xhc3MgVGFza0NvbnRyb2xsZXJUZXN0IHsKLQotICAgIEBJbmplY3RNb2NrcwotICAgIHByaXZhdGUgVGFza0NvbnRyb2xsZXIgdGFza0NvbnRyb2xsZXI7Ci0KLSAgICBATW9jawotICAgIHByaXZhdGUgVGFza1NlcnZpY2UgdGFza1NlcnZpY2U7Ci0KLSAgICBAQmVmb3JlRWFjaAotICAgIHZvaWQgc2V0dXAoKSB7Ci0gICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V6I635Y+W5b2T5YmN55So5oi355qE5paw5omL5Lu75Yqh5YiX6KGo5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RHZXRBbGxUYXNrcygpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInRhc2tzIiwgIm1vY2tfdGFza3MiKTsKLQotICAgICAgICAvLyDmqKHmi58gdGFza1NlcnZpY2UuZ2V0QWxsVGFza3NGb3JVc2VyIOi/lOWbngotICAgICAgICB3aGVuKHRhc2tTZXJ2aWNlLmdldEFsbFRhc2tzRm9yVXNlcih1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOV77yM5pS55Li66YCa6L+H6K+35rGC5Y+C5pWw5Lyg6YCSIHVzZXJfaWQKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHRhc2tDb250cm9sbGVyLmdldEFsbFRhc2tzKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygibW9ja190YXNrcyIsIHJlc3BvbnNlLmdldCgidGFza3MiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5pu05paw5Lu75Yqh54q25oCB5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RVcGRhdGVUYXNrU3RhdHVzKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBTdHJpbmcgdGFza0lkID0gInRhc2tfMTIzIjsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh54q25oCB5bey5pu05pawIik7Ci0KLSAgICAgICAgLy8g5qih5oufIHRhc2tTZXJ2aWNlLnVwZGF0ZVRhc2tTdGF0dXMg6L+U5ZueCi0gICAgICAgIHdoZW4odGFza1NlcnZpY2UudXBkYXRlVGFza1N0YXR1cyh1c2VySWQsIHRhc2tJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ0YXNrX2lkIiwgdGFza0lkKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHRhc2tDb250cm9sbGVyLnVwZGF0ZVRhc2tTdGF0dXMocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuS7u+WKoeeKtuaAgeW3suabtOaWsCIsIHJlc3BvbnNlLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5blvZPliY3nu4/pqozlkozku7vliqHlpZblirHmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCAxNTAwKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibGV2ZWwiLCAiSW50ZXJtZWRpYXRlIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInJld2FyZCIsIE1hcC5vZigiZXhwZXJpZW5jZSIsIDEwMDAsICJwb2ludHMiLCAyMDApKTsKLQotICAgICAgICAvLyDmqKHmi58gdGFza1NlcnZpY2UuZ2V0VXNlckV4cGVyaWVuY2Ug6L+U5ZueCi0gICAgICAgIHdoZW4odGFza1NlcnZpY2UuZ2V0VXNlckV4cGVyaWVuY2UodXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHRhc2tDb250cm9sbGVyLmdldEV4cGVyaWVuY2UocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygxNTAwLCByZXNwb25zZS5nZXQoImN1cnJlbnRfZXhwZXJpZW5jZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJJbnRlcm1lZGlhdGUiLCByZXNwb25zZS5nZXQoImxldmVsIikpOwotICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmNvbnRhaW5zS2V5KCJyZXdhcmQiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V6I635Y+W5b2T5YmN55qE5oyH5byV5q2l6aqk5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RHZXROZXdTdGVwKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgiY3VycmVudF9zdGVwIiwgInN0ZXBfMSIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJ0b3RhbF9zdGVwcyIsIDUpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGVwX2Rlc2NyaXB0aW9uIiwgIkNvbXBsZXRlIHRoZSBpbnRyb2R1Y3Rpb24gdGFzayIpOwotCi0gICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS5nZXROZXdTdGVwIOi/lOWbngotICAgICAgICB3aGVuKHRhc2tTZXJ2aWNlLmdldE5ld1N0ZXAodXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazle+8jOaUueS4uumAmui/h+ivt+axguWPguaVsOS8oOmAkiB1c2VyX2lkCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB0YXNrQ29udHJvbGxlci5nZXROZXdTdGVwKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygic3RlcF8xIiwgcmVzcG9uc2UuZ2V0KCJjdXJyZW50X3N0ZXAiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCByZXNwb25zZS5nZXQoInRvdGFsX3N0ZXBzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkNvbXBsZXRlIHRoZSBpbnRyb2R1Y3Rpb24gdGFzayIsIHJlc3BvbnNlLmdldCgic3RlcF9kZXNjcmlwdGlvbiIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmm7TmlrDov5vluqbmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFVwZGF0ZVByb2dyZXNzKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBTdHJpbmcgdGFza0lkID0gInRhc2tfMTIzIjsKLSAgICAgICAgSW50ZWdlciBwcm9ncmVzcyA9IDUwOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLov5vluqblt7Lmm7TmlrAiKTsKLQotICAgICAgICAvLyDmqKHmi58gdGFza1NlcnZpY2UudXBkYXRlVGFza1Byb2dyZXNzIOi/lOWbngotICAgICAgICB3aGVuKHRhc2tTZXJ2aWNlLnVwZGF0ZVRhc2tQcm9ncmVzcyh1c2VySWQsIHRhc2tJZCwgcHJvZ3Jlc3MpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotICAgICAgICByZXF1ZXN0LnB1dCgidGFza19pZCIsIHRhc2tJZCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJwcm9ncmVzcyIsIHByb2dyZXNzKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHRhc2tDb250cm9sbGVyLnVwZGF0ZVByb2dyZXNzKHJlcXVlc3QpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLov5vluqblt7Lmm7TmlrAiLCByZXNwb25zZS5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V6aKG5Y+W5Lu75Yqh5aWW5Yqx5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RSZXdhcmRDbGFpbSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgU3RyaW5nIHRhc2tJZCA9ICJ0YXNrXzEyMyI7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWlluWKseW3sumihuWPliIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJyZXdhcmQiLCBNYXAub2YoImV4cGVyaWVuY2UiLCAxMDAwLCAicG9pbnRzIiwgMjAwKSk7Ci0KLSAgICAgICAgLy8g5qih5oufIHRhc2tTZXJ2aWNlLmNsYWltUmV3YXJkIOi/lOWbngotICAgICAgICB3aGVuKHRhc2tTZXJ2aWNlLmNsYWltUmV3YXJkKHVzZXJJZCwgdGFza0lkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInRhc2tfaWQiLCB0YXNrSWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIucmV3YXJkQ2xhaW0ocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuWlluWKseW3sumihuWPliIsIHJlc3BvbnNlLmdldCgibWVzc2FnZSIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS5jb250YWluc0tleSgicmV3YXJkIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleajgOafpeS7u+WKoeWlluWKseeKtuaAgeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0UmV3YXJkUmV2aWV3KCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBTdHJpbmcgdGFza0lkID0gInRhc2tfMTIzIjsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJyZXdhcmRfbm90X2lzc3VlZCIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeWlluWKseacquiiq+mihuWPliIpOwotCi0gICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS5jaGVja1Jld2FyZFN0YXR1cyDov5Tlm54KLSAgICAgICAgd2hlbih0YXNrU2VydmljZS5jaGVja1Jld2FyZFN0YXR1cyh1c2VySWQsIHRhc2tJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ0YXNrX2lkIiwgdGFza0lkKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHRhc2tDb250cm9sbGVyLnJld2FyZFJldmlldyhyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJyZXdhcmRfbm90X2lzc3VlZCIsIHJlc3BvbnNlLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuS7u+WKoeWlluWKseacquiiq+mihuWPliIsIHJlc3BvbnNlLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9sb2dzL215YXBwLmxvZyBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxvZ3MvbXlhcHAubG9nCnJlbmFtZSB0byBzcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuamF2YQppbmRleCBhOTdlMTY5Li5kMzMyZjMxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhCisrKyBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEKQEAgLTEsMjM0ICsxLDE2MiBAQAogcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKIAotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcnM7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUuY29uZGl0aW9ucy5xdWVyeS5RdWVyeVdyYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkVtYWlsU2VydmljZTsKIGltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyU2VydmljZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyUmVwb3NpdG9yeTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5WZXJpZmljYXRpb25Ub2tlbk1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuUmVzdWx0OwogaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwogaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOworaW1wb3J0IG9yZy5tb2NraXRvLio7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuYXV0aGVudGljYXRpb24uQXV0aGVudGljYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5BdXRoZW50aWNhdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuQXV0aGVudGljYXRpb25FeGNlcHRpb247CiAKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLQotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKIAogY2xhc3MgVXNlckNvbnRyb2xsZXJUZXN0IHsKIAotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBVc2VyU2VydmljZSB1c2VyU2VydmljZTsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKLQogICAgIEBJbmplY3RNb2NrcwogICAgIHByaXZhdGUgVXNlckNvbnRyb2xsZXIgdXNlckNvbnRyb2xsZXI7CiAKKyAgICBATW9jaworICAgIHByaXZhdGUgVXNlclNlcnZpY2UgdXNlclNlcnZpY2U7CisgICAgQE1vY2sKKyAgICBwcml2YXRlIFVzZXJNYXBwZXIgdXNlck1hcHBlcjsKKyAgICBATW9jaworICAgIHByaXZhdGUgRW1haWxTZXJ2aWNlIGVtYWlsU2VydmljZTsKKyAgICBATW9jaworICAgIHByaXZhdGUgQXV0aGVudGljYXRpb25NYW5hZ2VyIGF1dGhlbnRpY2F0aW9uTWFuYWdlcjsKKyAgICBATW9jaworICAgIHByaXZhdGUgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7CisKICAgICBAQmVmb3JlRWFjaAotICAgIHZvaWQgc2V0VXAoKSB7Ci0gICAgICAgIC8vIOWIneWni+WMluaooeaLn+WvueixoQorICAgIHZvaWQgc2V0dXAoKSB7CiAgICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7CiAgICAgfQogCi0gICAgLy8g5rWL6K+V55Sf5oiQ6YKA6K+356CB5o6l5Y+jCiAgICAgQFRlc3QKLSAgICB2b2lkIHRlc3RHZW5lcmF0ZUludml0ZUNvZGUoKSB7Ci0gICAgICAgIC8vIOiuvue9rui+k+WFpeaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgMUwpOworICAgIHZvaWQgbG9naW5Db250cm9sbGVyX3N1Y2Nlc3MoKSB7CisgICAgICAgIFN0cmluZyB1c2VybmFtZSA9ICJ0ZXN0dXNlciI7CisgICAgICAgIFN0cmluZyBwYXNzd29yZCA9ICJ0ZXN0cGFzcyI7CisgICAgICAgIFVzZXIgbW9ja1VzZXIgPSBuZXcgVXNlcigpOworICAgICAgICBtb2NrVXNlci5zZXRVc2VybmFtZSh1c2VybmFtZSk7CiAKLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5ZueCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2VNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlTWFwLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJtZXNzYWdlIiwgIumCgOivt+eggeeUn+aIkOaIkOWKnyIpOwotICAgICAgICByZXNwb25zZU1hcC5wdXQoImludml0ZV9jb2RlIiwgIkFCQzEyM1hZWiIpOworICAgICAgICBBdXRoZW50aWNhdGlvbiBtb2NrQXV0aCA9IG1vY2soQXV0aGVudGljYXRpb24uY2xhc3MpOworICAgICAgICB3aGVuKGF1dGhlbnRpY2F0aW9uTWFuYWdlci5hdXRoZW50aWNhdGUoYW55KCkpKS50aGVuUmV0dXJuKG1vY2tBdXRoKTsKKyAgICAgICAgd2hlbih1c2VyTWFwcGVyLnNlbGVjdE9uZShhbnkoUXVlcnlXcmFwcGVyLmNsYXNzKSkpLnRoZW5SZXR1cm4obW9ja1VzZXIpOwogCi0gICAgICAgIHdoZW4odXNlclNlcnZpY2UuZ2VuZXJhdGVJbnZpdGVDb2RlKDFMKSkudGhlblJldHVybihyZXNwb25zZU1hcCk7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5sb2dpbkNvbnRyb2xsZXIodXNlcm5hbWUsIHBhc3N3b3JkKTsKIAotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSB1c2VyQ29udHJvbGxlci5nZW5lcmF0ZUludml0ZUNvZGUocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3VsdE1hcC5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLpgoDor7fnoIHnlJ/miJDmiJDlip8iLCByZXN1bHRNYXAuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkFCQzEyM1hZWiIsIHJlc3VsdE1hcC5nZXQoImludml0ZV9jb2RlIikpOwotCi0gICAgICAgIC8vIOmqjOivgeacjeWKoeWxguaWueazleaYr+WQpuiiq+iwg+eUqAotICAgICAgICB2ZXJpZnkodXNlclNlcnZpY2UsIHRpbWVzKDEpKS5nZW5lcmF0ZUludml0ZUNvZGUoMUwpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMobW9ja1VzZXIsIHJlc3VsdC5nZXREYXRhKCkpOwogICAgIH0KIAotICAgIC8vIOa1i+ivleeUqOaIt+S/ruaUueWvhueggeaOpeWPoworCiAgICAgQFRlc3QKLSAgICB2b2lkIHRlc3RDaGFuZ2VQYXNzd29yZCgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJvbGRfcGFzc3dvcmQiLCAib2xkUGFzc3dvcmQiKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoIm5ld19wYXNzd29yZCIsICJuZXdQYXNzd29yZCIpOwotICAgICAgICByZXF1ZXN0LnB1dCgiY29uZmlybV9wYXNzd29yZCIsICJuZXdQYXNzd29yZCIpOworICAgIHZvaWQgbG9naW5Db250cm9sbGVyX2ZhaWx1cmUoKSB7CisgICAgICAgIFN0cmluZyB1c2VybmFtZSA9ICJ1c2VyIjsKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gIndyb25ncGFzcyI7CiAKLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5ZueCi0gICAgICAgIFN0cmluZyByZXN1bHRNZXNzYWdlID0gIuWvhueggeS/ruaUueaIkOWKnyI7Ci0gICAgICAgIHdoZW4odXNlclNlcnZpY2UuY2hhbmdlUGFzc3dvcmQodXNlcklkLCAib2xkUGFzc3dvcmQiLCAibmV3UGFzc3dvcmQiLCAibmV3UGFzc3dvcmQiKSkKLSAgICAgICAgICAgICAgICAudGhlblJldHVybihyZXN1bHRNZXNzYWdlKTsKKyAgICAgICAgLy8g5qih5ouf6K6k6K+B5aSx6LSl77yM5oqb5Ye6IEJhZCBjcmVkZW50aWFscyDlvILluLgKKyAgICAgICAgd2hlbihhdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKGFueSgpKSkKKyAgICAgICAgICAgICAgICAudGhlblRocm93KG5ldyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbigiQmFkIGNyZWRlbnRpYWxzIikge30pOwogCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IHVzZXJDb250cm9sbGVyLmNoYW5nZVBhc3N3b3JkKHJlcXVlc3QpOwogCi0gICAgICAgIC8vIOmqjOivgei/lOWbnue7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIuWvhueggeS/ruaUueaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3VsdE1hcC5nZXQoInN0YXR1cyIpKTsKKyAgICAgICAgLy8g6LCD55So55m75b2V5o6l5Y+jCisgICAgICAgIFJlc3VsdCByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5sb2dpbkNvbnRyb2xsZXIodXNlcm5hbWUsIHBhc3N3b3JkKTsKIAotICAgICAgICAvLyDpqozor4HmnI3liqHlsYLmlrnms5XmmK/lkKbooqvosIPnlKgKLSAgICAgICAgdmVyaWZ5KHVzZXJTZXJ2aWNlLCB0aW1lcygxKSkuY2hhbmdlUGFzc3dvcmQodXNlcklkLCAib2xkUGFzc3dvcmQiLCAibmV3UGFzc3dvcmQiLCAibmV3UGFzc3dvcmQiKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5XnlKjmiLfms6jlhozmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFJlZ2lzdGVyKCkgewotICAgICAgICAvLyDorr7nva7ovpPlhaXmlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcm5hbWUiLCAidGVzdFVzZXIiKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoImVtYWlsIiwgInRlc3RAZXhhbXBsZS5jb20iKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInBhc3N3b3JkIiwgInBhc3N3b3JkIik7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJyb2xlIiwgIlVTRVIiKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoImludml0ZUNvZGUiLCAiMTIzNDUiKTsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm54KLSAgICAgICAgU3RyaW5nIHJlc3VsdE1lc3NhZ2UgPSAi55So5oi35rOo5YaM5oiQ5YqfIjsKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5yZWdpc3RlclVzZXIoInRlc3RVc2VyIiwgInRlc3RAZXhhbXBsZS5jb20iLCAicGFzc3dvcmQiLCAiVVNFUiIsICIxMjM0NSIpKQotICAgICAgICAgICAgICAgIC50aGVuUmV0dXJuKHJlc3VsdE1lc3NhZ2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IHVzZXJDb250cm9sbGVyLnJlZ2lzdGVyKHJlcXVlc3QpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnue7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIueUqOaIt+azqOWGjOaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1zZyIpKTsKLQotICAgICAgICAvLyDpqozor4HmnI3liqHlsYLmlrnms5XmmK/lkKbooqvosIPnlKgKLSAgICAgICAgdmVyaWZ5KHVzZXJTZXJ2aWNlLCB0aW1lcygxKSkucmVnaXN0ZXJVc2VyKCJ0ZXN0VXNlciIsICJ0ZXN0QGV4YW1wbGUuY29tIiwgInBhc3N3b3JkIiwgIlVTRVIiLCAiMTIzNDUiKTsKKyAgICAgICAgLy8g5pat6KiA6L+U5Zue55qE54q25oCB56CB5ZKM5raI5oGvCisgICAgICAgIGFzc2VydEVxdWFscygiNDAxIiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgICAgIGFzc2VydFRydWUocmVzdWx0LmdldE1zZygpLmNvbnRhaW5zKCLnmbvlvZXlpLHotKUiKSk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICB2b2lkIHRlc3RMb2dpbigpIHsKLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gInRlc3RVc2VyIjsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gInBhc3N3b3JkIjsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm54KLSAgICAgICAgU3RyaW5nIGxvZ2luTWVzc2FnZSA9ICLnmbvlvZXmiJDlip8iOwotICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmxvZ2luVXNlcigidGVzdFVzZXIiLCAicGFzc3dvcmQiKSkudGhlblJldHVybihsb2dpbk1lc3NhZ2UpOwotCi0gICAgICAgIC8vIOaooeaLn+eUqOaIt+afpeivogotICAgICAgICBVc2VycyB1c2VyID0gbmV3IFVzZXJzKCk7Ci0gICAgICAgIHVzZXIuc2V0VXNlcklkKDFMKTsKLSAgICAgICAgdXNlci5zZXRVc2VybmFtZSgidGVzdFVzZXIiKTsKKyAgICB2b2lkIHJlZ2lzdGVyQ29udHJvbGxlcl9lbWFpbEV4aXN0cygpIHsKKyAgICAgICAgVXNlciB1c2VyID0gbmV3IFVzZXIoKTsKICAgICAgICAgdXNlci5zZXRFbWFpbCgidGVzdEBleGFtcGxlLmNvbSIpOwotICAgICAgICB3aGVuKHVzZXJSZXBvc2l0b3J5LmZpbmRCeVVzZXJuYW1lKCJ0ZXN0VXNlciIpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHVzZXIpKTsKIAotICAgICAgICAvLyDorr7nva7or7fmsYLmlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcm5hbWUiLCB1c2VybmFtZSk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJwYXNzd29yZCIsIHBhc3N3b3JkKTsKKyAgICAgICAgd2hlbih1c2VyU2VydmljZS5jaGVja0VtYWlsRXhpc3RzKHVzZXIuZ2V0RW1haWwoKSkpLnRoZW5SZXR1cm4odHJ1ZSk7CiAKLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gdXNlckNvbnRyb2xsZXIubG9naW4ocmVxdWVzdCk7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5yZWdpc3RlckNvbnRyb2xsZXIodXNlcik7CiAKLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi55m75b2V5oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibXNnIikpOwotCi0gICAgICAgIC8vIOmqjOivgSB1c2VyIOS4jeaYryBNYXAg57G75Z6L77yM6ICM5pivIFVzZXJzIOWvueixoQotICAgICAgICBVc2VycyBsb2dnZWRJblVzZXIgPSAoVXNlcnMpIHJlc3VsdE1hcC5nZXQoInVzZXIiKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChsb2dnZWRJblVzZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RVc2VyIiwgbG9nZ2VkSW5Vc2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RAZXhhbXBsZS5jb20iLCBsb2dnZWRJblVzZXIuZ2V0RW1haWwoKSk7Ci0KLSAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCi0gICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLmxvZ2luVXNlcigidGVzdFVzZXIiLCAicGFzc3dvcmQiKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLpgq7nrrHlhrLnqoEiLCByZXN1bHQuZ2V0Q29kZSgpKTsKICAgICB9CiAKLQotICAgIC8vIOa1i+ivleiOt+WPlueUqOaIt+S4quS6uui1hOaWmeaOpeWPowogICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0UHJvZmlsZSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLQotICAgICAgICAvLyBNb2NrIOeUqOaIt+aVsOaNrgotICAgICAgICBVc2VycyB1c2VyID0gbmV3IFVzZXJzKCk7Ci0gICAgICAgIHVzZXIuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIHVzZXIuc2V0VXNlcm5hbWUoInRlc3RVc2VyIik7CisgICAgdm9pZCByZWdpc3RlckNvbnRyb2xsZXJfc3VjY2VzcygpIHsKKyAgICAgICAgVXNlciB1c2VyID0gbmV3IFVzZXIoKTsKICAgICAgICAgdXNlci5zZXRFbWFpbCgidGVzdEBleGFtcGxlLmNvbSIpOwotICAgICAgICB1c2VyLnNldEF2YXRhclVybCgiaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIuanBnIik7CiAKLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC6L+U5ZueCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcHJvZmlsZURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiYXZhdGFyVXJsIiwgdXNlci5nZXRBdmF0YXJVcmwoKSk7Ci0gICAgICAgIHByb2ZpbGVEYXRhLnB1dCgidXNlcm5hbWUiLCB1c2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICBwcm9maWxlRGF0YS5wdXQoImVtYWlsIiwgdXNlci5nZXRFbWFpbCgpKTsKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5nZXRQcm9maWxlKHVzZXJJZCkpLnRoZW5SZXR1cm4ocHJvZmlsZURhdGEpOworICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmNoZWNrRW1haWxFeGlzdHModXNlci5nZXRFbWFpbCgpKSkudGhlblJldHVybihmYWxzZSk7CisgICAgICAgIHdoZW4odXNlclNlcnZpY2UucHJlUmVnaXN0ZXJVc2VyKHVzZXIpKS50aGVuUmV0dXJuKHRydWUpOwogCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IHVzZXJDb250cm9sbGVyLmdldFByb2ZpbGUodXNlcklkKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLnJlZ2lzdGVyQ29udHJvbGxlcih1c2VyKTsKIAotICAgICAgICAvLyDpqozor4Hov5Tlm57nu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0VXNlciIsIHJlc3VsdE1hcC5nZXQoInVzZXJuYW1lIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RAZXhhbXBsZS5jb20iLCByZXN1bHRNYXAuZ2V0KCJlbWFpbCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciLCByZXN1bHRNYXAuZ2V0KCJhdmF0YXJVcmwiKSk7Ci0KLSAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCi0gICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLmdldFByb2ZpbGUodXNlcklkKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xkv67mlLnnlKjmiLfkuKrkurrotYTmlpnmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEVkaXRQcm9maWxlKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHByb2ZpbGVEYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBwcm9maWxlRGF0YS5wdXQoImF2YXRhclVybCIsICJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciKTsKLSAgICAgICAgcHJvZmlsZURhdGEucHV0KCJuaWNrbmFtZSIsICJuZXdOaWNrbmFtZSIpOwotICAgICAgICBwcm9maWxlRGF0YS5wdXQoImdlbmRlciIsICJNYWxlIik7Ci0gICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiZGVzY3JpcHRpb24iLCAiVXBkYXRlZCBkZXNjcmlwdGlvbiIpOwotICAgICAgICBwcm9maWxlRGF0YS5wdXQoImhvYmJpZXMiLCAiUmVhZGluZywgSGlraW5nIik7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5ZueCi0gICAgICAgIHdoZW4odXNlclNlcnZpY2UuZWRpdFByb2ZpbGUodXNlcklkLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIuanBnIiwgIm5ld05pY2tuYW1lIiwgIk1hbGUiLCAiVXBkYXRlZCBkZXNjcmlwdGlvbiIsICJSZWFkaW5nLCBIaWtpbmciKSkKLSAgICAgICAgICAgICAgICAudGhlblJldHVybih0cnVlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXN1bHRNYXAgPSB1c2VyQ29udHJvbGxlci5lZGl0UHJvZmlsZSh1c2VySWQsIHByb2ZpbGVEYXRhKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLnlKjmiLfotYTmlpnmm7TmlrDmiJDlip8iLCByZXN1bHRNYXAuZ2V0KCJtZXNzYWdlIikpOwotCi0gICAgICAgIC8vIOmqjOivgeacjeWKoeWxguaWueazleaYr+WQpuiiq+iwg+eUqAotICAgICAgICB2ZXJpZnkodXNlclNlcnZpY2UsIHRpbWVzKDEpKS5lZGl0UHJvZmlsZSh1c2VySWQsICJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciLCAibmV3Tmlja25hbWUiLCAiTWFsZSIsICJVcGRhdGVkIGRlc2NyaXB0aW9uIiwgIlJlYWRpbmcsIEhpa2luZyIpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHModXNlci5nZXRFbWFpbCgpLCAoKFVzZXIpIHJlc3VsdC5nZXREYXRhKCkpLmdldEVtYWlsKCkpOwogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdENhbGN1bGF0ZVNoYXJlUmF0ZSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKKyAgICB2b2lkIHZlcmlmeUVtYWlsQ29kZV9zdWNjZXNzKCkgeworICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLnZlcmlmeUVtYWlsKCJ0ZXN0QGV4YW1wbGUuY29tIiwgIjEyMzQ1NiIpKS50aGVuUmV0dXJuKHRydWUpOwogCi0gICAgICAgIC8vIOaooeaLnyBVc2VyU2VydmljZSDov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBleHBlY3RlZFJlc3BvbnNlID0gTWFwLm9mKAotICAgICAgICAgICAgICAgICJzdGF0dXMiLCAic3VjY2VzcyIsCi0gICAgICAgICAgICAgICAgIm1lc3NhZ2UiLCAi5YiG5Lqr546H6K6h566X5oiQ5YqfIiwKLSAgICAgICAgICAgICAgICAic2hhcmVSYXRlIiwgMC41ZgotICAgICAgICApOworICAgICAgICBVc2VyQ29udHJvbGxlci5WZXJpZmljYXRpb25SZXF1ZXN0IHJlcXVlc3QgPSBuZXcgVXNlckNvbnRyb2xsZXIuVmVyaWZpY2F0aW9uUmVxdWVzdCgpOworICAgICAgICByZXF1ZXN0LnNldEVtYWlsKCJ0ZXN0QGV4YW1wbGUuY29tIik7CisgICAgICAgIHJlcXVlc3Quc2V0Q29kZSgiMTIzNDU2Iik7CiAKLSAgICAgICAgLy8g6K6+572u55So5oi35pWw5o2uCi0gICAgICAgIFVzZXJzIHVzZXIgPSBuZXcgVXNlcnMoKTsKLSAgICAgICAgdXNlci5zZXRVc2VySWQodXNlcklkKTsKLSAgICAgICAgdXNlci5zZXRVcGxvYWRDb3VudCg1MGYpOyAgLy8g5LiK5Lyg6YeP5Li6NTAKLSAgICAgICAgdXNlci5zZXREb3dubG9hZENvdW50KDEwMGYpOyAgLy8g5LiL6L296YeP5Li6MTAwCi0gICAgICAgIHdoZW4odXNlclNlcnZpY2UuY2FsY3VsYXRlU2hhcmVSYXRlKHVzZXJJZCkpLnRoZW5SZXR1cm4oZXhwZWN0ZWRSZXNwb25zZSk7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSB1c2VyQ29udHJvbGxlci52ZXJpZnlFbWFpbENvZGUocmVxdWVzdCk7CiAKLSAgICAgICAgLy8g6LCD55So5o6l5Y+jCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0ID0gdXNlckNvbnRyb2xsZXIuY2FsY3VsYXRlU2hhcmVSYXRlKHVzZXJJZCk7CisgICAgICAgIGFzc2VydEVxdWFscygiMjAwIiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgfQogCi0gICAgICAgIC8vIOmqjOivgee7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRSZXNwb25zZSwgcmVzdWx0KTsKLSAgICAgICAgdmVyaWZ5KHVzZXJTZXJ2aWNlLCB0aW1lcygxKSkuY2FsY3VsYXRlU2hhcmVSYXRlKHVzZXJJZCk7ICAvLyDpqozor4HmnI3liqHmlrnms5XmmK/lkKbooqvosIPnlKgKKyAgICBAVGVzdAorICAgIHZvaWQgdmVyaWZ5RW1haWxDb2RlX2ZhaWx1cmUoKSB7CisgICAgICAgIHdoZW4odXNlclNlcnZpY2UudmVyaWZ5RW1haWwoInRlc3RAZXhhbXBsZS5jb20iLCAiMDAwMDAwIikpLnRoZW5SZXR1cm4oZmFsc2UpOworCisgICAgICAgIFVzZXJDb250cm9sbGVyLlZlcmlmaWNhdGlvblJlcXVlc3QgcmVxdWVzdCA9IG5ldyBVc2VyQ29udHJvbGxlci5WZXJpZmljYXRpb25SZXF1ZXN0KCk7CisgICAgICAgIHJlcXVlc3Quc2V0RW1haWwoInRlc3RAZXhhbXBsZS5jb20iKTsKKyAgICAgICAgcmVxdWVzdC5zZXRDb2RlKCIwMDAwMDAiKTsKKworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gdXNlckNvbnRyb2xsZXIudmVyaWZ5RW1haWxDb2RlKHJlcXVlc3QpOworCisgICAgICAgIGFzc2VydEVxdWFscygi6aqM6K+B5aSx6LSlIiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICB2b2lkIGNoZWNrUGFzc3dvcmRfc3VjY2VzcygpIHsKKyAgICAgICAgd2hlbih1c2VyU2VydmljZS5jaGVja1Bhc3N3b3JkKDFMLCAiYWJjMTIzIikpLnRoZW5SZXR1cm4odHJ1ZSk7CisKKyAgICAgICAgUmVzdWx0PFN0cmluZz4gcmVzdWx0ID0gdXNlckNvbnRyb2xsZXIuY2hlY2tQYXNzd29yZCgxTCwgImFiYzEyMyIpOworCisgICAgICAgIGFzc2VydEVxdWFscygiMjAwIiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5Y6f5aeL5a+G56CB6L6T5YWl5q2j56GuIiwgcmVzdWx0LmdldE1zZygpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHZvaWQgY2hlY2tQYXNzd29yZF9mYWlsdXJlKCkgeworICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmNoZWNrUGFzc3dvcmQoMUwsICJ3cm9uZyIpKS50aGVuUmV0dXJuKGZhbHNlKTsKKworICAgICAgICBSZXN1bHQ8U3RyaW5nPiByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5jaGVja1Bhc3N3b3JkKDFMLCAid3JvbmciKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoIjMwNSIsIHJlc3VsdC5nZXRDb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIuWOn+Wni+Wvhueggei+k+WFpemUmeivryIsIHJlc3VsdC5nZXRNc2coKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICB2b2lkIHNlbmRWZXJpZmljYXRpb25FbWFpbF91c2VyTm90Rm91bmQoKSB7CisgICAgICAgIFVzZXJDb250cm9sbGVyLkVtYWlsUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFVzZXJDb250cm9sbGVyLkVtYWlsUmVxdWVzdCgpOworICAgICAgICByZXF1ZXN0LnNldEVtYWlsKCJub3Rmb3VuZEBleGFtcGxlLmNvbSIpOworCisgICAgICAgIHdoZW4odXNlck1hcHBlci5zZWxlY3RPbmUoYW55KCkpKS50aGVuUmV0dXJuKG51bGwpOworCisgICAgICAgIFJlc3BvbnNlRW50aXR5PFJlc3VsdD4gcmVzcG9uc2UgPSB1c2VyQ29udHJvbGxlci5zZW5kVmVyaWZpY2F0aW9uRW1haWwocmVxdWVzdCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjEiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0Q29kZSgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliZjQ3Zi4uMDAwMDAwMAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci5Vc2VyRm9sbG93Q29udHJvbGxlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyRm9sbG93U2VydmljZTsKLWltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKLWltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKLWltcG9ydCBvcmcubW9ja2l0by5JbmplY3RNb2NrczsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NrOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG9Bbm5vdGF0aW9uczsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKLQotY2xhc3MgVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0IHsKLQotICAgIEBJbmplY3RNb2NrcwotICAgIHByaXZhdGUgVXNlckZvbGxvd0NvbnRyb2xsZXIgdXNlckZvbGxvd0NvbnRyb2xsZXI7Ci0KLSAgICBATW9jawotICAgIHByaXZhdGUgVXNlckZvbGxvd1NlcnZpY2UgdXNlckZvbGxvd1NlcnZpY2U7Ci0KLSAgICBAQmVmb3JlRWFjaAotICAgIHZvaWQgc2V0dXAoKSB7Ci0gICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V55So5oi35YWz5rOo5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RGb2xsb3coKSB7Ci0gICAgICAgIExvbmcgZm9sbG93ZXJJZCA9IDFMOwotICAgICAgICBMb25nIGZvbGxvd2VkSWQgPSAyTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBNYXAub2YoCi0gICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAibWVzc2FnZSIsICLlhbPms6jmiJDlip8iCi0gICAgICAgICk7Ci0KLSAgICAgICAgLy8g5qih5oufIHVzZXJGb2xsb3dTZXJ2aWNlLmZvbGxvdygpIOi/lOWbngotICAgICAgICB3aGVuKHVzZXJGb2xsb3dTZXJ2aWNlLmZvbGxvdyhmb2xsb3dlcklkLCBmb2xsb3dlZElkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0ID0gTWFwLm9mKCJmb2xsb3dlcl9pZCIsIGZvbGxvd2VySWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZUVudGl0eSA9IHVzZXJGb2xsb3dDb250cm9sbGVyLmZvbGxvdyhmb2xsb3dlZElkLCByZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnirbmgIHnoIHlkozlhoXlrrkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2VFbnRpdHkuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5YWz5rOo5oiQ5YqfIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xlj5bmtojlhbPms6jmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFVuZm9sbG93KCkgewotICAgICAgICBMb25nIGZvbGxvd2VySWQgPSAxTDsKLSAgICAgICAgTG9uZyBmb2xsb3dlZElkID0gMkw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gTWFwLm9mKAotICAgICAgICAgICAgICAgICJzdGF0dXMiLCAic3VjY2VzcyIsCi0gICAgICAgICAgICAgICAgIm1lc3NhZ2UiLCAi5Y+W5raI5YWz5rOo5oiQ5YqfIgotICAgICAgICApOwotCi0gICAgICAgIC8vIOaooeaLnyB1c2VyRm9sbG93U2VydmljZS51bmZvbGxvdygpIOi/lOWbngotICAgICAgICB3aGVuKHVzZXJGb2xsb3dTZXJ2aWNlLnVuZm9sbG93KGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QgPSBNYXAub2YoImZvbGxvd2VyX2lkIiwgZm9sbG93ZXJJZCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlRW50aXR5ID0gdXNlckZvbGxvd0NvbnRyb2xsZXIudW5mb2xsb3coZm9sbG93ZWRJZCwgcmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE54q25oCB56CB5ZKM5YaF5a65Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlRW50aXR5LmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuWPlua2iOWFs+azqOaIkOWKnyIsIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V6I635Y+W5p+Q5Liq55So5oi355qE57KJ5Lid5YiX6KGo5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RHZXRGb2xsb3dlcnMoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gTWFwLm9mKAotICAgICAgICAgICAgICAgICJzdGF0dXMiLCAic3VjY2VzcyIsCi0gICAgICAgICAgICAgICAgInRvdGFsIiwgMiwKLSAgICAgICAgICAgICAgICAiZm9sbG93ZXJzIiwgTGlzdC5vZigKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5vZigidXNlcl9pZCIsIDJMLCAidXNlcm5hbWUiLCAidXNlcjIiLCAiYXZhdGFyX3VybCIsICJ1cmwyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBNYXAub2YoInVzZXJfaWQiLCAzTCwgInVzZXJuYW1lIiwgInVzZXIzIiwgImF2YXRhcl91cmwiLCAidXJsMyIpCi0gICAgICAgICAgICAgICAgKQotICAgICAgICApOwotCi0gICAgICAgIC8vIOaooeaLnyB1c2VyRm9sbG93U2VydmljZS5nZXRGb2xsb3dlcnMoKSDov5Tlm54KLSAgICAgICAgd2hlbih1c2VyRm9sbG93U2VydmljZS5nZXRGb2xsb3dlcnModXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZUVudGl0eSA9IHVzZXJGb2xsb3dDb250cm9sbGVyLmdldEZvbGxvd2Vycyh1c2VySWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOeKtuaAgeeggeWSjOWGheWuuQotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZUVudGl0eS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoInRvdGFsIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgKChMaXN0PD8+KSByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJmb2xsb3dlcnMiKSkuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5bmn5DkuKrnlKjmiLfnmoTlhbPms6jliJfooajmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldEZvbGxvd2luZygpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBNYXAub2YoCi0gICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAidG90YWwiLCAyLAotICAgICAgICAgICAgICAgICJmb2xsb3dpbmciLCBMaXN0Lm9mKAotICAgICAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJ1c2VyX2lkIiwgMkwsICJ1c2VybmFtZSIsICJ1c2VyMiIsICJhdmF0YXJfdXJsIiwgInVybDIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5vZigidXNlcl9pZCIsIDNMLCAidXNlcm5hbWUiLCAidXNlcjMiLCAiYXZhdGFyX3VybCIsICJ1cmwzIikKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICk7Ci0KLSAgICAgICAgLy8g5qih5oufIHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2luZygpIOi/lOWbngotICAgICAgICB3aGVuKHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2luZyh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlRW50aXR5ID0gdXNlckZvbGxvd0NvbnRyb2xsZXIuZ2V0Rm9sbG93aW5nKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE54q25oCB56CB5ZKM5YaF5a65Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlRW50aXR5LmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgidG90YWwiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCAoKExpc3Q8Pz4pIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoImZvbGxvd2luZyIpKS5zaXplKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmY2JjYzcuLjAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuVXNlck1lc3NhZ2VTZXJ2aWNlOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLndoZW47Ci0KLWNsYXNzIFVzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QgewotCi0gICAgQEluamVjdE1vY2tzCi0gICAgcHJpdmF0ZSBVc2VyTWVzc2FnZUNvbnRyb2xsZXIgdXNlck1lc3NhZ2VDb250cm9sbGVyOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFVzZXJNZXNzYWdlU2VydmljZSB1c2VyTWVzc2FnZVNlcnZpY2U7Ci0KLSAgICBAQmVmb3JlRWFjaAotICAgIHZvaWQgc2V0dXAoKSB7Ci0gICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RTZW5kTWVzc2FnZSgpIHsKLSAgICAgICAgLy8g5YeG5aSH5rWL6K+V5pWw5o2uCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1zID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBwYXJhbXMucHV0KCJzZW5kZXJfaWQiLCAxTCk7Ci0gICAgICAgIHBhcmFtcy5wdXQoInJlY2VpdmVyX2lkIiwgMkwpOwotICAgICAgICBwYXJhbXMucHV0KCJjb250ZW50IiwgIua1i+ivlea2iOaBryIpOwotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuengeS/oeWPkemAgeaIkOWKnyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlX2lkIiwgMTAwTCk7Ci0KLSAgICAgICAgLy8g5qih5oufU2VydmljZeaWueazleiwg+eUqAotICAgICAgICB3aGVuKHVzZXJNZXNzYWdlU2VydmljZS5zZW5kTWVzc2FnZSgxTCwgMkwsICLmtYvor5Xmtojmga8iKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOaJp+ihjOa1i+ivlQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZSA9IHVzZXJNZXNzYWdlQ29udHJvbGxlci5zZW5kTWVzc2FnZShwYXJhbXMpOwotCi0gICAgICAgIC8vIOmqjOivgee7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLnp4Hkv6Hlj5HpgIHmiJDlip8iLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAwTCwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgibWVzc2FnZV9pZCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldFVzZXJNZXNzYWdlcygpIHsKLSAgICAgICAgLy8g5YeG5aSH5rWL6K+V5pWw5o2uCi0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2VzIiwgbmV3IEhhc2hNYXA8PigpKTsKLQotICAgICAgICAvLyDmqKHmi59TZXJ2aWNl5pa55rOV6LCD55SoCi0gICAgICAgIHdoZW4odXNlck1lc3NhZ2VTZXJ2aWNlLmdldFVzZXJNZXNzYWdlcyh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5omn6KGM5rWL6K+VCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gdXNlck1lc3NhZ2VDb250cm9sbGVyLmdldFVzZXJNZXNzYWdlcyh1c2VySWQpOwotCi0gICAgICAgIC8vIOmqjOivgee7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldE1lc3NhZ2UoKSB7Ci0gICAgICAgIC8vIOWHhuWkh+a1i+ivleaVsOaNrgotICAgICAgICBMb25nIG1lc3NhZ2VJZCA9IDFMOwotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgbmV3IEhhc2hNYXA8PigpKTsKLQotICAgICAgICAvLyDmqKHmi59TZXJ2aWNl5pa55rOV6LCD55SoCi0gICAgICAgIHdoZW4odXNlck1lc3NhZ2VTZXJ2aWNlLmdldE1lc3NhZ2UobWVzc2FnZUlkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOaJp+ihjOa1i+ivlQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZSA9IHVzZXJNZXNzYWdlQ29udHJvbGxlci5nZXRNZXNzYWdlKG1lc3NhZ2VJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgic3RhdHVzIikpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIGIvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcwppbmRleCA4MGY0NjhkLi4wNTkwMzMzIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCisrKyBiL3RhcmdldC9jbGFzc2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMKQEAgLTEsMTIgKzEsMTIgQEAKIHNlcnZlci5wb3J0PTgwODAKLXNwcmluZy5kYXRhc291cmNlLnVybD1qZGJjOm15c3FsOi8vbG9jYWxob3N0OjMzMDYvcHRQcm9qZWN0CitzcHJpbmcuZGF0YXNvdXJjZS51cmw9amRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2L3B0CiBzcHJpbmcuZGF0YXNvdXJjZS51c2VybmFtZT1yb290Ci1zcHJpbmcuZGF0YXNvdXJjZS5wYXNzd29yZD0xMjM0NTYKK3NwcmluZy5kYXRhc291cmNlLnBhc3N3b3JkPXJvb3QKIHNwcmluZy5kYXRhc291cmNlLmRyaXZlci1jbGFzcy1uYW1lPWNvbS5teXNxbC5jai5qZGJjLkRyaXZlcgotc3ByaW5nLmpwYS5oaWJlcm5hdGUubmFtaW5nLnBoeXNpY2FsLXN0cmF0ZWd5PW9yZy5oaWJlcm5hdGUuYm9vdC5tb2RlbC5uYW1pbmcuUGh5c2ljYWxOYW1pbmdTdHJhdGVneVN0YW5kYXJkSW1wbAogCiBteWJhdGlzLXBsdXMuY29uZmlndXJhdGlvbi5sb2ctaW1wbD1vcmcuYXBhY2hlLmliYXRpcy5sb2dnaW5nLnN0ZG91dC5TdGRPdXRJbXBsCiAKKwogIyBNYWlsIGNvbmZpZ3VyYXRpb24KIHNwcmluZy5tYWlsLnBhc3N3b3JkPXRsam5lYm9uaHpocWVjZGEKIHNwcmluZy5tYWlsLnVzZXJuYW1lPTIzNzA1MjM3MTZAcXEuY29tCkBAIC0xNyw4ICsxNywxNSBAQAogCiAKIHNwcmluZy5qcGEuZW5hYmxlZD1mYWxzZQotc3ByaW5nLmpwYS5oaWJlcm5hdGUuZGRsLWF1dG89dXBkYXRlCitzcHJpbmcuanBhLmhpYmVybmF0ZS5kZGwtYXV0bz1ub25lCiBzcHJpbmcuanBhLm9wZW4taW4tdmlldz1mYWxzZQogCisjIHRyYWNrZXI/PworcHQudHJhY2tlci5wb3J0PTY5NjkKIAotbXliYXRpcy1wbHVzLm1hcHBlci1sb2NhdGlvbnM9Y2xhc3NwYXRoOi9tYXBwZXIvKiovKi54bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitwdC50cmFja2VyLnRvcnJlbnQtZGlyPSR7dXNlci5kaXJ9L2RhdGEvdG9ycmVudHMKKworcHQudHJhY2tlci5hbGxvdy1mb3JlaWduPWZhbHNlCitwdC50cmFja2VyLmFubm91bmNlLXVybD0vY3VzdG9tLWFubm91bmNlCisKK215YmF0aXMtcGx1cy5tYXBwZXItbG9jYXRpb25zPWNsYXNzcGF0aDovbWFwcGVyLyoqLyoueG1sCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MKaW5kZXggMWViZDM0OS4uYTEyODFhOSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29tbW9uUmVzdWx0U3RhdHVzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzBlMmMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRBbm5vdW5jZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJEFubm91bmNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDJhZmUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRBbm5vdW5jZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRGaW5pc2hTdGF0dXMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRGaW5pc2hTdGF0dXMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxODk4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJEZpbmlzaFN0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRPcmRlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJE9yZGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YjA4Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRPcmRlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRTb3VyY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRTb3VyY2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjYmZlZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJFNvdXJjZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2U0NjYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL1Jlc3VsdFN0YXR1cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vUmVzdWx0U3RhdHVzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTY3MDAKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL1Jlc3VsdFN0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhZTMxOQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9JMThuTWVzc2FnZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvT3JkZXJQYWdlUGFyYW0uY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvT3JkZXJQYWdlUGFyYW0uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyZWM0MAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9PcmRlclBhZ2VQYXJhbS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVBhcmFtLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1BhZ2VQYXJhbS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg1ZmMxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1BhZ2VQYXJhbS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVV0aWwuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVV0aWwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4MDgwZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzUGFnZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXNQYWdlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDg5MzMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzUGFnZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzdWx0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDkyZGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvU3RhdHVzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2YzNzJiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2V4Y2VwdGlvbi9Sb2NrZXRQVEV4Y2VwdGlvbi5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vZXhjZXB0aW9uL1JvY2tldFBURXhjZXB0aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YTQ5MzEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2V4Y2VwdGlvbi9Sb2NrZXRQVEV4Y2VwdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxM2FmZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvTXlNZXRhT2JqZWN0SGFuZGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0YWEyNwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvVHJhY2tlckNvbmZpZy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTQzYTQ1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc2MDQ1Mi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlci5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMxZjc3My4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0Y2U5MWUuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNmOGIzNy4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1NlZWRDb21tZW50Q29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1NlZWRDb21tZW50Q29udHJvbGxlci5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EwMmEzMS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXIuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIzZWY0Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBiYTNmCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZmZkODUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyNTA1ZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcwppbmRleCA3OTVlOThiLi5jZDFhYjEzIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcworKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjMwZTYwLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTcyNThjLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlci5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vUHJvbW90aW9uQ3JlYXRlRFRPLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Qcm9tb3Rpb25DcmVhdGVEVE8uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4N2QzOQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vUHJvbW90aW9uQ3JlYXRlRFRPLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vVG9ycmVudFVwZGF0ZURUTy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vVG9ycmVudFVwZGF0ZURUTy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjg1ODY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Ub3JyZW50VXBkYXRlRFRPLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50UGFyYW0uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4YTJjNQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50VXBsb2FkUGFyYW0uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYmMwOQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vdm8vVG9ycmVudFZPLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by92by9Ub3JyZW50Vk8uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyMTI0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vdm8vVG9ycmVudFZPLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbGxlY3Rpb25zLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmIyYzFiLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbW1lbnRzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db21tZW50cy5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhZTYxZS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbW1lbnRzLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljQ29tbWVudC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0NvbW1lbnQuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiY2IwYmYuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljQ29tbWVudC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0xpa2VzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOGIwMTAuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2YzUyYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRW50aXR5QmFzZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FeHBlcmllbmNlSGlzdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiMGU0ZS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GYXZvcml0ZUVudGl0eS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRmF2b3JpdGVFbnRpdHkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhY2Q4YgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRmF2b3JpdGVFbnRpdHkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRnJpZW5kUmVsYXRpb24uY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4Y2UyYWUuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTMxMzJlLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwQ29tbWVudHMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwQ29tbWVudHMuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNGM4OGYuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwTWVtYmVycy5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU3M2I4Ni4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwTWVtYmVycy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cFBvc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNGI0NTkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cFBvc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MZXZlbC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiYzliNi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MaWtlcy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGlrZXMuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NDdkNzIuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MaWtlcy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUG9zdC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUG9zdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3YjM0Ni4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Bvc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Byb21vdGlvbi5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUHJvbW90aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGY2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Byb21vdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1NlZWRDb21tZW50LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJmNjcwYi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1NlZWRDb21tZW50LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudExpa2VzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9TZWVkQ29tbWVudExpa2VzLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWMzMjIyLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvU2VlZENvbW1lbnRMaWtlcy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVGFzay5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVGFzay5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQyZmQ4YS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Rhc2suY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1RvcnJlbnRFbnRpdHkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1RvcnJlbnRFbnRpdHkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmMjBkYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVG9ycmVudEVudGl0eS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlOGZmZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEZXRhaWxzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRGV0YWlscy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGEwMDZhCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRGV0YWlscy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEeW5hbWljLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3OGZlZC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEeW5hbWljLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRm9sbG93LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRm9sbG93LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjAyMWVmLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGQ0ZDY3Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJNZXNzYWdlcy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTAxNGUxLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyVGFza1N0YXR1cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZTI5NTkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyVGFza1N0YXR1cy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJzLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWMzMTI1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1ZlcmlmaWNhdGlvblRva2VuLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9WZXJpZmljYXRpb25Ub2tlbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjFkMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9WZXJpZmljYXRpb25Ub2tlbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9GYXZvcml0ZU1hcHBlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA3NWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9GYXZvcml0ZU1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NGM4NTYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4MGRmZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVG9ycmVudE1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhOWVjMQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9WZXJpZmljYXRpb25Ub2tlbk1hcHBlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGY4MmEzCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9WZXJpZmljYXRpb25Ub2tlbk1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db2xsZWN0aW9uc1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db2xsZWN0aW9uc1JlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMzVmYzkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UzOWUwOC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhY2UzMi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0xpa2VzUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwYjQ1My4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjQzMzA3Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0V4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmY2U5Ni4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9GcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cENvbW1lbnRzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwQ29tbWVudHNSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjcxMjNiLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwQ29tbWVudHNSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwTWVtYmVyc1JlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZjhjOGMuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFBvc3RSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTk2ZjhhLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFJlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYmYwMzguLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGV2ZWxSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGV2ZWxSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQxNzgyLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xldmVsUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xpa2VzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xpa2VzUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhiYjRmYy4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MaWtlc1JlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Qb3N0UmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDBmZjM1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvU2VlZENvbW1lbnRMaWtlc1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9TZWVkQ29tbWVudExpa2VzUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMzM3NC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9TZWVkQ29tbWVudExpa2VzUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1NlZWRDb21tZW50UmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1NlZWRDb21tZW50UmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDliNWQzOS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9TZWVkQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9UYXNrUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Rhc2tSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTY1NGFlLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Rhc2tSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzQ5ZWU1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJEeW5hbWljUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckZvbGxvd1JlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMDE2ODIuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckZvbGxvd1JlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiN2JiOWYuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlck1lc3NhZ2VzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNDk5NmEuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlck1lc3NhZ2VzUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMWIzYWQuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NTg1YjEuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Db21tZW50U2VydmljZS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRkZjNmOC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Db21tZW50U2VydmljZS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0R5bmFtaWNTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRHluYW1pY1NlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMmRlMzkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRHluYW1pY1NlcnZpY2UuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9FbWFpbFNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9FbWFpbFNlcnZpY2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxMTllNgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0VtYWlsU2VydmljZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Hcm91cFNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Hcm91cFNlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZTMwY2UuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvTGV2ZWxTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvTGV2ZWxTZXJ2aWNlLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODQ2ZGRhLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0xldmVsU2VydmljZS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1Bvc3RTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZTYwOTYuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qcm9tb3Rpb25TZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUHJvbW90aW9uU2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA5NjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUHJvbW90aW9uU2VydmljZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9TZWVkQ29tbWVudFNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9TZWVkQ29tbWVudFNlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZmMxNzAuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvU2VlZENvbW1lbnRTZXJ2aWNlLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVGFza1NlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5ZTBmNi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1RvcnJlbnRTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVG9ycmVudFNlcnZpY2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjZmVlZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1RvcnJlbnRTZXJ2aWNlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJEZXRhaWxzU2VydmljZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJEZXRhaWxzU2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGFhNDIzCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckRldGFpbHNTZXJ2aWNlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJGb2xsb3dTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZDUxMzIuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYmFmODkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlck1lc3NhZ2VTZXJ2aWNlLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcwppbmRleCAwMDNlMDQyLi4yNDJiYjFjIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcworKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9FbWFpbFNlcnZpY2VJbXBsLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvRW1haWxTZXJ2aWNlSW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2I1MzQzCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvRW1haWxTZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Qcm9tb3Rpb25TZXJ2aWNlSW1wbC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1Byb21vdGlvblNlcnZpY2VJbXBsLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODQ4MzkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Qcm9tb3Rpb25TZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5NjAwZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1RvcnJlbnRTZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ3MGVkCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyU2VydmljZUltcGwuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyU2VydmljZUltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5NzE1OAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjNWFhMC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1ZlcmlmeUNvZGUuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvVmVyaWZ5Q29kZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTFlMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1ZlcmlmeUNvZGUuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvZmlsZXMvZmlsZXMudG9ycmVudCBiL3RhcmdldC9jbGFzc2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKaW5kZXggZTY5ZGUyOS4uZTA0OTc0ZiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvZmlsZXMvZmlsZXMudG9ycmVudAorKysgYi90YXJnZXQvY2xhc3Nlcy9maWxlcy9maWxlcy50b3JyZW50CkBAIC0wLDAgKzEgQEAKK2Q4OmFubm91bmNlMjI6aHR0cHM6Ly90cmFja2VyLmJ5ci5wdDEwOmNyZWF0ZWQgYnkyMTpxQml0dG9ycmVudCB2NC41LjMuMTAxMzpjcmVhdGlvbiBkYXRlaTE3NDc3MTc5MDFlNDppbmZvZDU6ZmlsZXNsZDY6bGVuZ3RoaTE3M2U0OnBhdGhsMTM6dmFsaWQudG9ycmVudGVlZTQ6bmFtZTU6ZmlsZXMxMjpwaWVjZSBsZW5ndGhpMTYzODRlNjpwaWVjZXMyMDov8e3oRfQ14zzy+x/s1YSfUaGW+2VlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9GYXZvcml0ZU1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0OGVjMgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9GYXZvcml0ZU1hcHBlci54bWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLkZhdm9yaXRlTWFwcGVyIj4KKyAKKzwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmZmZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBtYXBwZXIgUFVCTElDICItLy9teWJhdGlzLm9yZy8vRFREIE1hcHBlciAzLjAvL0VOIgorICAgICAgICAiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Cis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Qcm9tb3Rpb25NYXBwZXIiPgorCisgICAgPGluc2VydCBpZD0iaW5zZXJ0IiBwYXJhbWV0ZXJUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlByb21vdGlvbiI+CisgICAgICAgIElOU0VSVCBJTlRPIHByb21vdGlvbiAoCisgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLCBzdGFydF90aW1lLCBlbmRfdGltZSwgZGlzY291bnRfcGVyY2VudGFnZSwgYXBwbGljYWJsZV90b3JyZW50X2lkcworICAgICAgICApIFZBTFVFUyAoCisgICAgICAgICN7bmFtZX0sICN7ZGVzY3JpcHRpb259LCAje3N0YXJ0VGltZX0sICN7ZW5kVGltZX0sICN7ZGlzY291bnRQZXJjZW50YWdlfSwgI3thcHBsaWNhYmxlVG9ycmVudElkc30KKyAgICAgICAgKQorICAgIDwvaW5zZXJ0PgorCis8L21hcHBlcj4KZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL21hcHBlci9Ub3JyZW50TWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Ub3JyZW50TWFwcGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWYwMThlCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sCkBAIC0wLDAgKzEsMTA0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKworPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVG9ycmVudE1hcHBlciI+CisgICAgPHJlc3VsdE1hcCBpZD0iQmFzZVJlc3VsdE1hcCIgdHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgPGlkIGNvbHVtbj0iaW5mb19oYXNoIiBwcm9wZXJ0eT0iaW5mb0hhc2giLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImZpbGVfbmFtZSIgcHJvcGVydHk9ImZpbGVOYW1lIi8+CisgICAgICAgIDxyZXN1bHQgY29sdW1uPSJ1cGxvYWRlciIgcHJvcGVydHk9InVwbG9hZGVyIi8+CisgICAgICAgIDxyZXN1bHQgY29sdW1uPSJ1cGxvYWRfdGltZSIgcHJvcGVydHk9InVwbG9hZFRpbWUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InNpemUiIHByb3BlcnR5PSJzaXplIi8+CisgICAgICAgIDxyZXN1bHQgY29sdW1uPSJ0aXRsZSIgcHJvcGVydHk9InRpdGxlIi8+CisgICAgICAgIDxyZXN1bHQgY29sdW1uPSJkZXNjcmlwdGlvbiIgcHJvcGVydHk9ImRlc2NyaXB0aW9uIi8+CisgICAgICAgIDxyZXN1bHQgY29sdW1uPSJjYXRlZ29yeSIgcHJvcGVydHk9ImNhdGVnb3J5Ii8+CisgICAgICAgIDxyZXN1bHQgY29sdW1uPSJpbWFnZV91cmwiIHByb3BlcnR5PSJpbWFnZVVybCIvPgorICAgIDwvcmVzdWx0TWFwPgorCisgICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlJbmZvSGFzaCIgcmVzdWx0TWFwPSJCYXNlUmVzdWx0TWFwIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50IFdIRVJFIGluZm9faGFzaCA9ICN7aW5mb0hhc2h9CisgICAgPC9zZWxlY3Q+CisgICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlTZWVkSWQiIHJlc3VsdE1hcD0iQmFzZVJlc3VsdE1hcCI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdG9ycmVudCBXSEVSRSBzZWVkX2lkID0gI3tzZWVkSWR9CisgICAgPC9zZWxlY3Q+CisKKworCisKKyAgICA8dXBkYXRlIGlkPSJ1cGRhdGUiIHBhcmFtZXRlclR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVG9ycmVudEVudGl0eSI+CisgICAgICAgIFVQREFURSB0b3JyZW50CisgICAgICAgIFNFVCBmaWxlX25hbWUgPSAje2ZpbGVOYW1lfSwKKyAgICAgICAgdXBsb2FkZXIgPSAje3VwbG9hZGVyfSwKKyAgICAgICAgdXBsb2FkX3RpbWUgPSAje3VwbG9hZFRpbWV9LAorICAgICAgICBzaXplID0gI3tzaXplfSwKKyAgICAgICAgdGl0bGUgPSAje3RpdGxlfSwKKyAgICAgICAgZGVzY3JpcHRpb24gPSAje2Rlc2NyaXB0aW9ufSwKKyAgICAgICAgY2F0ZWdvcnkgPSAje2NhdGVnb3J5fSwKKyAgICAgICAgaW1hZ2VfdXJsID0gI3tpbWFnZVVybH0KKyAgICAgICAgV0hFUkUgaW5mb19oYXNoID0gI3tpbmZvSGFzaH0KKyAgICA8L3VwZGF0ZT4KKyAgICA8c2VsZWN0IGlkPSJzZWFyY2giIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVG9ycmVudEVudGl0eSI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdG9ycmVudAorICAgICAgICA8d2hlcmU+CisgICAgICAgICAgICA8aWYgdGVzdD0icGFyYW0uY2F0ZWdvcnkgIT0gbnVsbCI+CisgICAgICAgICAgICAgICAgQU5EIGNhdGVnb3J5ID0gI3twYXJhbS5jYXRlZ29yeX0KKyAgICAgICAgICAgIDwvaWY+CisKKyAgICAgICAgICAgIDwhLS0gICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5mcmVlICE9IG51bGwgYW5kIHBhcmFtLmZyZWUgIT0gJyciPi0tPgorICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIEFORCBmcmVlID0gI3twYXJhbS5mcmVlfS0tPgorICAgICAgICAgICAgPCEtLSAgICAgICAgPC9pZj4tLT4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5mcmVlICE9IG51bGwiPgorICAgICAgICAgICAgPGNob29zZT4KKyAgICAgICAgICAgICAgICA8IS0tIOetm+mAieKAnOato+WcqOS/g+mUgOS4reKAneeahOenjeWtkCAtLT4KKyAgICAgICAgICAgICAgICA8d2hlbiB0ZXN0PSJwYXJhbS5mcmVlID09IHRydWUiPgorICAgICAgICAgICAgICAgICAgICBBTkQgRVhJU1RTICgKKyAgICAgICAgICAgICAgICAgICAgU0VMRUNUIDEgRlJPTSBwcm9tb3Rpb24gcAorICAgICAgICAgICAgICAgICAgICBXSEVSRQorICAgICAgICAgICAgICAgICAgICBKU09OX0NPTlRBSU5TKHAuYXBwbGljYWJsZV90b3JyZW50X2lkcywgSlNPTl9BUlJBWSh0LmlkKSkKKyAgICAgICAgICAgICAgICAgICAgQU5EIE5PVygpIEJFVFdFRU4gcC5zdGFydF90aW1lIEFORCBwLmVuZF90aW1lCisgICAgICAgICAgICAgICAgICAgIEFORCBwLmlzX2RlbGV0ZWQgPSAwCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICA8L3doZW4+CisgICAgICAgICAgICAgICAgPCEtLSDnrZvpgInigJzmnKrlnKjkv4PplIDkuK3igJ3nmoTnp43lrZAgLS0+CisgICAgICAgICAgICAgICAgPG90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICAgICAgQU5EIE5PVCBFWElTVFMgKAorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHByb21vdGlvbiBwCisgICAgICAgICAgICAgICAgICAgIFdIRVJFCisgICAgICAgICAgICAgICAgICAgIEpTT05fQ09OVEFJTlMocC5hcHBsaWNhYmxlX3RvcnJlbnRfaWRzLCBKU09OX0FSUkFZKHQuaWQpKQorICAgICAgICAgICAgICAgICAgICBBTkQgTk9XKCkgQkVUV0VFTiBwLnN0YXJ0X3RpbWUgQU5EIHAuZW5kX3RpbWUKKyAgICAgICAgICAgICAgICAgICAgQU5EIHAuaXNfZGVsZXRlZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIDwvb3RoZXJ3aXNlPgorICAgICAgICAgICAgPC9jaG9vc2U+CisgICAgICAgICAgICA8L2lmPgorCisgICAgICAgICAgICA8aWYgdGVzdD0icGFyYW0ubGlrZUV4cHJlc3Npb25zICE9IG51bGwgYW5kIHBhcmFtLmxpa2VFeHByZXNzaW9ucy5zaXplID4gMCI+CisgICAgICAgICAgICAgICAgQU5EICgKKyAgICAgICAgICAgICAgICA8Zm9yZWFjaCBjb2xsZWN0aW9uPSJwYXJhbS5saWtlRXhwcmVzc2lvbnMiIGl0ZW09Iml0ZW0iIG9wZW49IigiIHNlcGFyYXRvcj0iIEFORCAiIGNsb3NlPSIpIj4KKworICAgICAgICAgICAgICAgICAgICAoIHRpdGxlIExJS0UgQ09OQ0FUKCclJywgI3tpdGVtfSwgJyUnKSApIG9yICggZGVzY3JpcHRpb24gTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkgb3IgKCB0YWdzIExJS0UgQ09OQ0FUKCclJywgI3tpdGVtfSwgJyUnKSApCisgICAgICAgICAgICAgICAgPC9mb3JlYWNoPgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIDwvaWY+CisgICAgICAgIDwvd2hlcmU+CisKKyAgICAgICAgPGlmIHRlc3Q9InBhcmFtLnByb3AgIT0gbnVsbCBhbmQgcGFyYW0uc29ydCAhPSBudWxsIj4KKyAgICAgICAgICAgIE9SREVSIEJZICR7cGFyYW0ucHJvcH0gJHtwYXJhbS5zb3J0fQorICAgICAgICA8L2lmPgorICAgIDwvc2VsZWN0PgorICAgIDxzZWxlY3QgaWQ9ImNoZWNrRmF2b3JpdGUiIHJlc3VsdFR5cGU9ImJvb2xlYW4iPgorICAgICAgICBTRUxFQ1QgQ09VTlQoKikgPiAwCisgICAgICAgIEZST00gZmF2b3JpdGUKKyAgICAgICAgV0hFUkUgc2VlZF9pZCA9ICN7c2VlZElkfSBBTkQgdXNlcl9pZCA9ICN7dXNlcklkfQorICAgIDwvc2VsZWN0PgorICAgIDxpbnNlcnQgaWQ9ImFkZEZhdm9yaXRlIj4KKyAgICAgICAgSU5TRVJUIElOVE8gZmF2b3JpdGUgKHNlZWRfaWQsIHVzZXJfaWQpCisgICAgICAgIFZBTFVFUyAoI3tzZWVkSWR9LCAje3VzZXJJZH0pCisgICAgPC9pbnNlcnQ+CisgICAgPGRlbGV0ZSBpZD0icmVtb3ZlRmF2b3JpdGUiPgorICAgICAgICBERUxFVEUgRlJPTSBmYXZvcml0ZQorICAgICAgICBXSEVSRSBzZWVkX2lkID0gI3tzZWVkSWR9IEFORCB1c2VyX2lkID0gI3t1c2VySWR9CisgICAgPC9kZWxldGU+CisKKworPC9tYXBwZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1VzZXJNYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1VzZXJNYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwM2FiMGEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVXNlck1hcHBlci54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBtYXBwZXIgUFVCTElDICItLy9teWJhdGlzLm9yZy8vRFREIE1hcHBlciAzLjAvL0VOIgorICAgICAgICAiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Cis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Vc2VyTWFwcGVyIj4KKyAgICA8IS0tIOagueaNrueUqOaIt+WQjeafpeaJvueUqOaItyAtLT4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVVzZXJuYW1lIiBwYXJhbWV0ZXJUeXBlPSJzdHJpbmciIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlciI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdXNlciBXSEVSRSB1c2VybmFtZSA9ICN7dXNlcm5hbWV9CisgICAgPC9zZWxlY3Q+CisgICAgPCEtLSDmoLnmja7nlKjmiLflkI3lkozlr4bnoIHmn6Xmib7nlKjmiLcgLS0+CisgICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlVc2VybmFtZUFuZFBhc3N3b3JkIiBwYXJhbWV0ZXJUeXBlPSJtYXAiIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlciI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdXNlciBXSEVSRSB1c2VybmFtZSA9ICN7dXNlcm5hbWV9IEFORCBwYXNzd29yZCA9ICN7cGFzc3dvcmR9CisgICAgPC9zZWxlY3Q+CisgICAgPCEtLSDmoLnmja7pgq7nrrHmn6Xmib7nlKjmiLcgLS0+CisgICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlFbWFpbCIgcGFyYW1ldGVyVHlwZT0ic3RyaW5nIiByZXN1bHRUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXIiPgorICAgICAgICBTRUxFQ1QgKiBGUk9NIHVzZXIgV0hFUkUgZW1haWwgPSAje2VtYWlsfQorICAgIDwvc2VsZWN0PgorICAgIDwhLS0g5qC55o2u55So5oi35ZCN5YyF5ZCr5p+l5om+55So5oi3IC0tPgorICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ5VXNlcm5hbWVDb250YWluaW5nIiBwYXJhbWV0ZXJUeXBlPSJzdHJpbmciIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlciI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdXNlciBXSEVSRSB1c2VybmFtZSBMSUtFIENPTkNBVCgnJScsICN7bmFtZX0sICclJykKKyAgICA8L3NlbGVjdD4KKzwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9WZXJpZmljYXRpb25Ub2tlbk1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiMTlhNQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9WZXJpZmljYXRpb25Ub2tlbk1hcHBlci54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIiPgorICAgIDwhLS0g6YCa6L+HIHRva2VuIOWSjCBlbWFpbCDmn6Xor6IgVmVyaWZpY2F0aW9uVG9rZW4gLS0+CisgICAgPHNlbGVjdCBpZD0iZmluZEJ5VG9rZW5BbmRFbWFpbCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5WZXJpZmljYXRpb25Ub2tlbiI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdmVyaWZpY2F0aW9uX3Rva2VuCisgICAgICAgIFdIRVJFIHRva2VuID0gI3t0b2tlbn0gQU5EIGVtYWlsID0gI3tlbWFpbH0KKyAgICA8L3NlbGVjdD4KKzwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvb3V0cHV0L3ZhbGlkLnRvcnJlbnQgYi90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudAppbmRleCBlNjlkZTI5Li42YTkwZTUyIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudAorKysgYi90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudApAQCAtMCwwICsxIEBACitkMTA6Y3JlYXRlZCBieTE4OnFCaXR0b3JyZW50IHY1LjEuMDEzOmNyZWF0aW9uIGRhdGVpMTc0NTk0ODk5NWU0OmluZm9kNjpsZW5ndGhpMjJlNDpuYW1lMTU6ZXhhbXBsZS50b3JyZW50MTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6Rm4e8LYaKfo8xwmOBubCaBSjdGw3OnByaXZhdGVpMWVlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphciBiL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphcgppbmRleCBlNjlkZTI5Li4yYWU5NzlhIDEwMDY0NAotLS0gYS90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIKKysrIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbCBiL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbAppbmRleCBlNjlkZTI5Li40ZmQ4MDE0IDEwMDY0NAotLS0gYS90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIub3JpZ2luYWwKKysrIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyLm9yaWdpbmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1hcmNoaXZlci9wb20ucHJvcGVydGllcyBiL3RhcmdldC9tYXZlbi1hcmNoaXZlci9wb20ucHJvcGVydGllcwppbmRleCBlNjlkZTI5Li4wN2M5NDBlIDEwMDY0NAotLS0gYS90YXJnZXQvbWF2ZW4tYXJjaGl2ZXIvcG9tLnByb3BlcnRpZXMKKysrIGIvdGFyZ2V0L21hdmVuLWFyY2hpdmVyL3BvbS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMyBAQAorYXJ0aWZhY3RJZD1lY2hvLWJhY2tlbmQKK2dyb3VwSWQ9Z3JvdXBJZAordmVyc2lvbj0xLjAtU05BUFNIT1QKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CmluZGV4IGY2MzgwMWMuLjg5OTRkMGEgMTAwNjQ0Ci0tLSBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QKKysrIGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdApAQCAtMSwyOSArMSw1OCBAQAotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBQb3N0LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxQb3N0UmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHV0aWxzXFJlc3VsdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcUG9zdFNlcnZpY2UuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXAuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcQ29sbGVjdGlvbnMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcQ29tbWVudFNlcnZpY2UuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxNeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQb3N0LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwTWVtYmVycy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2Vycy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xHbG9iYWxDb3JzQ29uZmlnJDEuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXENvbW1lbnRDb250cm9sbGVyLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwQ29tbWVudHMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEdyb3VwU2VydmljZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcR3JvdXBDb250cm9sbGVyLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyUmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcUG9zdENvbnRyb2xsZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcQ29tbWVudHMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XExpa2VzUmVwb3NpdG9yeS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMkRmluaXNoU3RhdHVzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXE15TWV0YU9iamVjdEhhbmRsZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFVzZXJTZXJ2aWNlSW1wbC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cdm9cVG9ycmVudFZPLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXFByb21vdGlvbkNyZWF0ZURUTy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVG9ycmVudENvbnRyb2xsZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cyRPcmRlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyRGV0YWlscy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc3VsdC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQcm9tb3Rpb24uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXNQYWdlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFRvcnJlbnRNYXBwZXIuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcU2VjdXJpdHlDb25maWcuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcTGlrZXMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwQ29tbWVudHNSZXBvc2l0b3J5LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxHcm91cFJlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XENvbGxlY3Rpb25zUmVwb3NpdG9yeS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcSW52aXRhdGlvblNlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFRvcnJlbnRTZXJ2aWNlSW1wbC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxWZXJpZmljYXRpb25Ub2tlbk1hcHBlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxUb3JyZW50RW50aXR5LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEVudGl0eUJhc2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxkdG9ccGFyYW1cVG9ycmVudFBhcmFtLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyRGV0YWlsc1NlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFRvcnJlbnRTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcSTE4bk1lc3NhZ2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFZlcmlmaWNhdGlvblRva2VuLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXEludml0YXRpb25NYXBwZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxPcmRlclBhZ2VQYXJhbS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcSW52aXRhdGlvblNlcnZpY2VJbXBsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXEdsb2JhbENvcnNDb25maWcuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVXNlck1hcHBlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XE15UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFRyYWNrZXJDb25maWcuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcRmF2b3JpdGVNYXBwZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzJFNvdXJjZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxSZXN1bHRTdGF0dXMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cVG9ycmVudFVwZGF0ZURUTy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VVdGlsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXEdsb2JhbENvcnNDb25maWckMS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMkQW5ub3VuY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29tbW9uUmVzdWx0U3RhdHVzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlciRWZXJpZmljYXRpb25SZXF1ZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxFbWFpbFNlcnZpY2VJbXBsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFByb21vdGlvblNlcnZpY2VJbXBsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcU3RhdHVzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVBhcmFtLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFByb21vdGlvbk1hcHBlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxleGNlcHRpb25cUm9ja2V0UFRFeGNlcHRpb24uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHV0aWxzXFZlcmlmeUNvZGUuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxkdG9ccGFyYW1cSW52aXRlUGFyYW0uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxkdG9ccGFyYW1cVG9ycmVudFVwbG9hZFBhcmFtLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEludml0YXRpb25FbnRpdHkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEVtYWlsU2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcUHJvbW90aW9uU2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxGYXZvcml0ZUVudGl0eS5jbGFzcwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdAppbmRleCAzNDQ0MzM3Li4xNWYyODA3IDEwMDY0NAotLS0gYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdAorKysgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdApAQCAtMSw0MCArMSw1MiBAQAotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcQ29tbWVudENvbnRyb2xsZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcQ29tbWVudFNlcnZpY2UuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcTGlrZXNSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEVtYWlsU2VydmljZUltcGwuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XENvbW1lbnRzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxNeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXEdsb2JhbENvcnNDb25maWcuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFVzZXJTZXJ2aWNlSW1wbC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFNlY3VyaXR5Q29uZmlnLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxHcm91cC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XENvbGxlY3Rpb25zLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFBvc3RDb250cm9sbGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcUG9zdC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcUmVzdWx0LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBNZW1iZXJzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBQb3N0LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XENvbW1lbnRSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFBvc3RTZXJ2aWNlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVXNlck1hcHBlci5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxHcm91cENvbW1lbnRzUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxHcm91cENvbnRyb2xsZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2Vycy5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcVmVyaWZ5Q29kZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJEZXRhaWxzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxQb3N0UmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJEZXRhaWxzU2VydmljZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XExpa2VzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEdyb3VwU2VydmljZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwQ29tbWVudHMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxWZXJpZmljYXRpb25Ub2tlbi5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxHcm91cFBvc3RSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XENvbGxlY3Rpb25zUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxFbWFpbFNlcnZpY2UuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlclNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxJbnZpdGF0aW9uU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbW1vblJlc3VsdFN0YXR1cy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcU2VjdXJpdHlDb25maWcuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXFRvcnJlbnRVcGRhdGVEVE8uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFVzZXJNYXBwZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVBhcmFtLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxFbnRpdHlCYXNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlckRldGFpbHNTZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxleGNlcHRpb25cUm9ja2V0UFRFeGNlcHRpb24uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXEZhdm9yaXRlTWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50UGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFByb21vdGlvbk1hcHBlci5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRmF2b3JpdGVFbnRpdHkuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFRvcnJlbnRFbnRpdHkuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXEludml0ZVBhcmFtLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXEkxOG5NZXNzYWdlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50VXBsb2FkUGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcT3JkZXJQYWdlUGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFByb21vdGlvbi5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcSW52aXRhdGlvbkVudGl0eS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEludml0YXRpb25TZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVG9ycmVudFNlcnZpY2VJbXBsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxSZXN1bHRTdGF0dXMuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxFbWFpbFNlcnZpY2VJbXBsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFRyYWNrZXJDb25maWcuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUmVzUGFnZS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFByb21vdGlvblNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcRW1haWxTZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFN0YXR1cy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFx1dGlsc1xWZXJpZnlDb2RlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XE15UHJvamVjdEFwcGxpY2F0aW9uLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxUb3JyZW50TWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyRGV0YWlscy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJTZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VVdGlsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc3VsdC5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cdm9cVG9ycmVudFZPLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxJbnZpdGF0aW9uTWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVG9ycmVudFNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXE15TWV0YU9iamVjdEhhbmRsZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFZlcmlmaWNhdGlvblRva2VuLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcUHJvbW90aW9uU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxJbnZpdGVDb250cm9sbGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xHbG9iYWxDb3JzQ29uZmlnLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xQcm9tb3Rpb25DcmVhdGVEVE8uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUb3JyZW50Q29udHJvbGxlci5qYXZhCmRpZmYgLS1naXQgYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QKaW5kZXggMWU3ZDhkZC4uYmFjMjM1YiAxMDA2NDQKLS0tIGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CisrKyBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdApAQCAtMSwyICsxLDIgQEAKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXENvbW1lbnRDb250cm9sbGVyVGVzdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlclRlc3QkMS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCmRpZmYgLS1naXQgYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0IGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9pbnB1dEZpbGVzLmxzdAppbmRleCBlYzY1MmIwLi4xODhkY2U4IDEwMDY0NAotLS0gYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0CisrKyBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvaW5wdXRGaWxlcy5sc3QKQEAgLTEsNCArMSwyIEBACi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlclRlc3QuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcR3JvdXBDb250cm9sbGVyVGVzdC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxDb21tZW50Q29udHJvbGxlclRlc3QuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcUG9zdENvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY2xhc3NwYXRoLmluZGV4IGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jbGFzc3BhdGguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY2xhc3NwYXRoLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlclRlc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YThlZWMuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlclRlc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGM2YjZkLi4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ3MmZjLi4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyVGVzdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMwNzdlYi4uMDAwMDAwMAotLS0gYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0xldmVsQ29udHJvbGxlclRlc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Bvc3RDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzE2MWZjLi4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9TZWVkQ29tbWVudENvbnRyb2xsZXJUZXN0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZhMzdhLi4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvU2VlZENvbW1lbnRDb250cm9sbGVyVGVzdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTU3MGMuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdCQxLmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QkMS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI5NTRiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QkMS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCmluZGV4IDVlN2JlZjQuLjkyM2NhMDkgMTAwNjQ0Ci0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiODA3ODQuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QuY2xhc3MgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYzQ5YjAuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3VwbG9hZHMvcG9zdC9cMzQ1XDI3NlwyNTZcMzQ0XDI3N1wyNDFcMzQ1XDIzM1wyNzZcMzQ3XDIxMVwyMDdfMjAyNTA0MDgxNTQwMDcuanBnIiAiYi91cGxvYWRzL3Bvc3QvXDM0NVwyNzZcMjU2XDM0NFwyNzdcMjQxXDM0NVwyMzNcMjc2XDM0N1wyMTFcMjA3XzIwMjUwNDA4MTU0MDA3LmpwZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tICJhL3VwbG9hZHMvcG9zdC9cMzQ1XDI3NlwyNTZcMzQ0XDI3N1wyNDFcMzQ1XDIzM1wyNzZcMzQ3XDIxMVwyMDdfMjAyNTA0MDgxNTQwMDcuanBnIgorKysgL2Rldi9udWxsCg==