ZGlmZiAtLWdpdCBhLy5pZGVhL2RhdGFTb3VyY2VzLmxvY2FsLnhtbCBiLy5pZGVhL2RhdGFTb3VyY2VzLmxvY2FsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRmNTcwCi0tLSAvZGV2L251bGwKKysrIGIvLmlkZWEvZGF0YVNvdXJjZXMubG9jYWwueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJkYXRhU291cmNlU3RvcmFnZUxvY2FsIiBjcmVhdGVkLWluPSJJVS0yNDMuMjE1NjUuMTkzIj4KKyAgICA8ZGF0YS1zb3VyY2UgbmFtZT0icHRQcm9qZWN0QGxvY2FsaG9zdCIgdXVpZD0iNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyIj4KKyAgICAgIDxkYXRhYmFzZS1pbmZvIHByb2R1Y3Q9Ik15U1FMIiB2ZXJzaW9uPSI4LjAuNDAiIGpkYmMtdmVyc2lvbj0iNC4yIiBkcml2ZXItbmFtZT0iTXlTUUwgQ29ubmVjdG9yL0oiIGRyaXZlci12ZXJzaW9uPSJteXNxbC1jb25uZWN0b3Itai04LjIuMCAoUmV2aXNpb246IDA2YTFmNzI0NDk3ZmQ4MWM2YTY1OTEzMWZkYTgyMmM5ZTUwODViNmMpIiBkYm1zPSJNWVNRTCIgZXhhY3QtdmVyc2lvbj0iOC4wLjQwIiBleGFjdC1kcml2ZXItdmVyc2lvbj0iOC4yIj4KKyAgICAgICAgPGV4dHJhLW5hbWUtY2hhcmFjdGVycz4jQDwvZXh0cmEtbmFtZS1jaGFyYWN0ZXJzPgorICAgICAgICA8aWRlbnRpZmllci1xdW90ZS1zdHJpbmc+YDwvaWRlbnRpZmllci1xdW90ZS1zdHJpbmc+CisgICAgICA8L2RhdGFiYXNlLWluZm8+CisgICAgICA8Y2FzZS1zZW5zaXRpdml0eSBwbGFpbi1pZGVudGlmaWVycz0ibG93ZXIiIHF1b3RlZC1pZGVudGlmaWVycz0ibG93ZXIiIC8+CisgICAgICA8dXNlci1uYW1lPnJvb3Q8L3VzZXItbmFtZT4KKyAgICAgIDxzY2hlbWEtbWFwcGluZz4KKyAgICAgICAgPGludHJvc3BlY3Rpb24tc2NvcGU+CisgICAgICAgICAgPG5vZGUga2luZD0ic2NoZW1hIiBxbmFtZT0iQCIgLz4KKyAgICAgICAgPC9pbnRyb3NwZWN0aW9uLXNjb3BlPgorICAgICAgPC9zY2hlbWEtbWFwcGluZz4KKyAgICA8L2RhdGEtc291cmNlPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy54bWwgYi8uaWRlYS9kYXRhU291cmNlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwNDFlNAotLS0gL2Rldi9udWxsCisrKyBiLy5pZGVhL2RhdGFTb3VyY2VzLnhtbApAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iRGF0YVNvdXJjZU1hbmFnZXJJbXBsIiBmb3JtYXQ9InhtbCIgbXVsdGlmaWxlLW1vZGVsPSJ0cnVlIj4KKyAgICA8ZGF0YS1zb3VyY2Ugc291cmNlPSJMT0NBTCIgbmFtZT0icHRQcm9qZWN0QGxvY2FsaG9zdCIgdXVpZD0iNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyIj4KKyAgICAgIDxkcml2ZXItcmVmPm15c3FsLjg8L2RyaXZlci1yZWY+CisgICAgICA8c3luY2hyb25pemU+dHJ1ZTwvc3luY2hyb25pemU+CisgICAgICA8aW1wb3J0ZWQ+dHJ1ZTwvaW1wb3J0ZWQ+CisgICAgICA8amRiYy1kcml2ZXI+Y29tLm15c3FsLmNqLmpkYmMuRHJpdmVyPC9qZGJjLWRyaXZlcj4KKyAgICAgIDxqZGJjLXVybD5qZGJjOm15c3FsOi8vbG9jYWxob3N0OjMzMDYvcHRQcm9qZWN0PC9qZGJjLXVybD4KKyAgICAgIDxqZGJjLWFkZGl0aW9uYWwtcHJvcGVydGllcz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbS5pbnRlbGxpai5jbG91ZHMua3ViZXJuZXRlcy5kYi5ob3N0LnBvcnQiIC8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb20uaW50ZWxsaWouY2xvdWRzLmt1YmVybmV0ZXMuZGIuZW5hYmxlZCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29tLmludGVsbGlqLmNsb3Vkcy5rdWJlcm5ldGVzLmRiLnJlc291cmNlLnR5cGUiIHZhbHVlPSJEZXBsb3ltZW50IiAvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29tLmludGVsbGlqLmNsb3Vkcy5rdWJlcm5ldGVzLmRiLmNvbnRhaW5lci5wb3J0IiAvPgorICAgICAgPC9qZGJjLWFkZGl0aW9uYWwtcHJvcGVydGllcz4KKyAgICAgIDx3b3JraW5nLWRpcj4kUHJvamVjdEZpbGVEaXIkPC93b3JraW5nLWRpcj4KKyAgICA8L2RhdGEtc291cmNlPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIueG1sIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQ2MDY4Ci0tLSAvZGV2L251bGwKKysrIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyLnhtbApAQCAtMCwwICsxLDI3MDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZGF0YVNvdXJjZSBuYW1lPSJwdFByb2plY3RAbG9jYWxob3N0Ij4KKyAgPGRhdGFiYXNlLW1vZGVsIHNlcmlhbGl6ZXI9ImRibSIgZGJtcz0iTVlTUUwiIGZhbWlseS1pZD0iTVlTUUwiIGZvcm1hdC12ZXJzaW9uPSI0LjUzIj4KKyAgICA8cm9vdCBpZD0iMSI+CisgICAgICA8RGVmYXVsdENhc2luZz5sb3dlci9sb3dlcjwvRGVmYXVsdENhc2luZz4KKyAgICAgIDxEZWZhdWx0RW5naW5lPklubm9EQjwvRGVmYXVsdEVuZ2luZT4KKyAgICAgIDxEZWZhdWx0VG1wRW5naW5lPklubm9EQjwvRGVmYXVsdFRtcEVuZ2luZT4KKyAgICAgIDxHcmFudHM+fHJvb3R8fHJvb3R8bG9jYWxob3N0fEFMVEVSfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxBTFRFUiBST1VUSU5FfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxBUFBMSUNBVElPTl9QQVNTV09SRF9BRE1JTnxHCit8cm9vdHx8bXlzcWwuaW5mb3NjaGVtYXxsb2NhbGhvc3R8QVVESVRfQUJPUlRfRVhFTVBUfEcKK3xyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxBVURJVF9BQk9SVF9FWEVNUFR8RworfHJvb3R8fG15c3FsLnN5c3xsb2NhbGhvc3R8QVVESVRfQUJPUlRfRVhFTVBUfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxBVURJVF9BQk9SVF9FWEVNUFR8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fEFVRElUX0FETUlOfEcKK3xyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxBVVRIRU5USUNBVElPTl9QT0xJQ1lfQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fEFVVEhFTlRJQ0FUSU9OX1BPTElDWV9BRE1JTnxHCit8cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8QkFDS1VQX0FETUlOfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxCQUNLVVBfQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fEJJTkxPR19BRE1JTnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8QklOTE9HX0VOQ1JZUFRJT05fQURNSU58RworfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fENMT05FX0FETUlOfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxDTE9ORV9BRE1JTnxHCit8cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8Q09OTkVDVElPTl9BRE1JTnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q09OTkVDVElPTl9BRE1JTnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxDUkVBVEUgUk9MRXxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFIFJPVVRJTkV8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fENSRUFURSBUQUJMRVNQQUNFfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxDUkVBVEUgVEVNUE9SQVJZIFRBQkxFU3xHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFIFVTRVJ8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fENSRUFURSBWSUVXfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxERUxFVEV8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fERST1B8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fERST1AgUk9MRXxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8RU5DUllQVElPTl9LRVlfQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fEVWRU5UfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxFWEVDVVRFfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxGSUxFfEcKK3xyb290fHxteXNxbC5pbmZvc2NoZW1hfGxvY2FsaG9zdHxGSVJFV0FMTF9FWEVNUFR8RworfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fEZJUkVXQUxMX0VYRU1QVHxHCit8cm9vdHx8bXlzcWwuc3lzfGxvY2FsaG9zdHxGSVJFV0FMTF9FWEVNUFR8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fEZJUkVXQUxMX0VYRU1QVHxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8RkxVU0hfT1BUSU1JWkVSX0NPU1RTfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxGTFVTSF9TVEFUVVN8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fEZMVVNIX1RBQkxFU3xHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8RkxVU0hfVVNFUl9SRVNPVVJDRVN8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fEdST1VQX1JFUExJQ0FUSU9OX0FETUlOfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxHUk9VUF9SRVBMSUNBVElPTl9TVFJFQU18RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fElOREVYfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxJTk5PREJfUkVET19MT0dfQVJDSElWRXxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8SU5OT0RCX1JFRE9fTE9HX0VOQUJMRXxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8SU5TRVJUfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxMT0NLIFRBQkxFU3xHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8UEFTU1dPUkRMRVNTX1VTRVJfQURNSU58RworfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFBFUlNJU1RfUk9fVkFSSUFCTEVTX0FETUlOfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxQRVJTSVNUX1JPX1ZBUklBQkxFU19BRE1JTnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8UFJPQ0VTU3xHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVGRVJFTkNFU3xHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVMT0FEfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTiBDTElFTlR8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJFUExJQ0FUSU9OIFNMQVZFfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTl9BUFBMSUVSfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTl9TTEFWRV9BRE1JTnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVTT1VSQ0VfR1JPVVBfQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJFU09VUkNFX0dST1VQX1VTRVJ8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJPTEVfQURNSU58RworfHJvb3R8fG15c3FsLmluZm9zY2hlbWF8bG9jYWxob3N0fFNFTEVDVHxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8U0VMRUNUfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxTRU5TSVRJVkVfVkFSSUFCTEVTX09CU0VSVkVSfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxTRVJWSUNFX0NPTk5FQ1RJT05fQURNSU58RworfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNFU1NJT05fVkFSSUFCTEVTX0FETUlOfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxTRVNTSU9OX1ZBUklBQkxFU19BRE1JTnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8U0VUX1VTRVJfSUR8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIT1cgREFUQUJBU0VTfEcKK3xyb290fHxyb290fGxvY2FsaG9zdHxTSE9XIFZJRVd8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIT1dfUk9VVElORXxHCit8cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8U0hVVERPV058RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIVVRET1dOfEcKK3xyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxTVVBFUnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8U1VQRVJ8RworfHJvb3R8fG15c3FsLmluZm9zY2hlbWF8bG9jYWxob3N0fFNZU1RFTV9VU0VSfEcKK3xyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxTWVNURU1fVVNFUnxHCit8cm9vdHx8bXlzcWwuc3lzfGxvY2FsaG9zdHxTWVNURU1fVVNFUnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8U1lTVEVNX1VTRVJ8RworfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNZU1RFTV9WQVJJQUJMRVNfQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNZU1RFTV9WQVJJQUJMRVNfQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRBQkxFX0VOQ1JZUFRJT05fQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRFTEVNRVRSWV9MT0dfQURNSU58RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRSSUdHRVJ8RworfHJvb3R8fHJvb3R8bG9jYWxob3N0fFVQREFURXxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8WEFfUkVDT1ZFUl9BRE1JTnxHCit8cm9vdHx8cm9vdHxsb2NhbGhvc3R8Z3JhbnQgb3B0aW9ufEcKK3BlcmZvcm1hbmNlX3NjaGVtYXxzY2hlbWF8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNFTEVDVHxHCitzeXN8c2NoZW1hfHxteXNxbC5zeXN8bG9jYWxob3N0fFRSSUdHRVJ8RzwvR3JhbnRzPgorICAgICAgPFNlcnZlclZlcnNpb24+OC4wLjQwPC9TZXJ2ZXJWZXJzaW9uPgorICAgIDwvcm9vdD4KKyAgICA8Y29sbGF0aW9uIGlkPSIyIiBwYXJlbnQ9IjEiIG5hbWU9ImFybXNjaWk4X2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+YXJtc2NpaTg8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMyIgcGFyZW50PSIxIiBuYW1lPSJhcm1zY2lpOF9iaW4iPgorICAgICAgPENoYXJzZXQ+YXJtc2NpaTg8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNCIgcGFyZW50PSIxIiBuYW1lPSJhc2NpaV9nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0PmFzY2lpPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjUiIHBhcmVudD0iMSIgbmFtZT0iYXNjaWlfYmluIj4KKyAgICAgIDxDaGFyc2V0PmFzY2lpPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjYiIHBhcmVudD0iMSIgbmFtZT0iYmlnNV9jaGluZXNlX2NpIj4KKyAgICAgIDxDaGFyc2V0PmJpZzU8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNyIgcGFyZW50PSIxIiBuYW1lPSJiaWc1X2JpbiI+CisgICAgICA8Q2hhcnNldD5iaWc1PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjgiIHBhcmVudD0iMSIgbmFtZT0iYmluYXJ5Ij4KKyAgICAgIDxDaGFyc2V0PmJpbmFyeTwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI5IiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MF9nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0PmNwMTI1MDwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMCIgcGFyZW50PSIxIiBuYW1lPSJjcDEyNTBfY3plY2hfY3MiPgorICAgICAgPENoYXJzZXQ+Y3AxMjUwPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjExIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MF9jcm9hdGlhbl9jaSI+CisgICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTIiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUwX2JpbiI+CisgICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTMiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUwX3BvbGlzaF9jaSI+CisgICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTQiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2J1bGdhcmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTUiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX3VrcmFpbmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTYiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2JpbiI+CisgICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTciIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+Y3AxMjUxPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE4IiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MV9nZW5lcmFsX2NzIj4KKyAgICAgIDxDaGFyc2V0PmNwMTI1MTwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxOSIgcGFyZW50PSIxIiBuYW1lPSJjcDEyNTZfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD5jcDEyNTY8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjAiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjU2X2JpbiI+CisgICAgICA8Q2hhcnNldD5jcDEyNTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjEiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjU3X2xpdGh1YW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+Y3AxMjU3PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIyIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1N19iaW4iPgorICAgICAgPENoYXJzZXQ+Y3AxMjU3PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIzIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1N19nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0PmNwMTI1NzwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNCIgcGFyZW50PSIxIiBuYW1lPSJjcDg1MF9nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0PmNwODUwPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI1IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODUwX2JpbiI+CisgICAgICA8Q2hhcnNldD5jcDg1MDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNiIgcGFyZW50PSIxIiBuYW1lPSJjcDg1Ml9nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0PmNwODUyPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI3IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODUyX2JpbiI+CisgICAgICA8Q2hhcnNldD5jcDg1MjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyOCIgcGFyZW50PSIxIiBuYW1lPSJjcDg2Nl9nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0PmNwODY2PC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI5IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODY2X2JpbiI+CisgICAgICA8Q2hhcnNldD5jcDg2NjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIzMCIgcGFyZW50PSIxIiBuYW1lPSJjcDkzMl9qYXBhbmVzZV9jaSI+CisgICAgICA8Q2hhcnNldD5jcDkzMjwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIzMSIgcGFyZW50PSIxIiBuYW1lPSJjcDkzMl9iaW4iPgorICAgICAgPENoYXJzZXQ+Y3A5MzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMzIiIHBhcmVudD0iMSIgbmFtZT0iZGVjOF9zd2VkaXNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PmRlYzg8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMzMiIHBhcmVudD0iMSIgbmFtZT0iZGVjOF9iaW4iPgorICAgICAgPENoYXJzZXQ+ZGVjODwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIzNCIgcGFyZW50PSIxIiBuYW1lPSJldWNqcG1zX2phcGFuZXNlX2NpIj4KKyAgICAgIDxDaGFyc2V0PmV1Y2pwbXM8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMzUiIHBhcmVudD0iMSIgbmFtZT0iZXVjanBtc19iaW4iPgorICAgICAgPENoYXJzZXQ+ZXVjanBtczwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIzNiIgcGFyZW50PSIxIiBuYW1lPSJldWNrcl9rb3JlYW5fY2kiPgorICAgICAgPENoYXJzZXQ+ZXVja3I8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMzciIHBhcmVudD0iMSIgbmFtZT0iZXVja3JfYmluIj4KKyAgICAgIDxDaGFyc2V0PmV1Y2tyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjM4IiBwYXJlbnQ9IjEiIG5hbWU9ImdiMTgwMzBfY2hpbmVzZV9jaSI+CisgICAgICA8Q2hhcnNldD5nYjE4MDMwPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjM5IiBwYXJlbnQ9IjEiIG5hbWU9ImdiMTgwMzBfYmluIj4KKyAgICAgIDxDaGFyc2V0PmdiMTgwMzA8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNDAiIHBhcmVudD0iMSIgbmFtZT0iZ2IxODAzMF91bmljb2RlXzUyMF9jaSI+CisgICAgICA8Q2hhcnNldD5nYjE4MDMwPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjQxIiBwYXJlbnQ9IjEiIG5hbWU9ImdiMjMxMl9jaGluZXNlX2NpIj4KKyAgICAgIDxDaGFyc2V0PmdiMjMxMjwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI0MiIgcGFyZW50PSIxIiBuYW1lPSJnYjIzMTJfYmluIj4KKyAgICAgIDxDaGFyc2V0PmdiMjMxMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI0MyIgcGFyZW50PSIxIiBuYW1lPSJnYmtfY2hpbmVzZV9jaSI+CisgICAgICA8Q2hhcnNldD5nYms8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNDQiIHBhcmVudD0iMSIgbmFtZT0iZ2JrX2JpbiI+CisgICAgICA8Q2hhcnNldD5nYms8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNDUiIHBhcmVudD0iMSIgbmFtZT0iZ2Vvc3RkOF9nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0Pmdlb3N0ZDg8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNDYiIHBhcmVudD0iMSIgbmFtZT0iZ2Vvc3RkOF9iaW4iPgorICAgICAgPENoYXJzZXQ+Z2Vvc3RkODwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI0NyIgcGFyZW50PSIxIiBuYW1lPSJncmVla19nZW5lcmFsX2NpIj4KKyAgICAgIDxDaGFyc2V0PmdyZWVrPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjQ4IiBwYXJlbnQ9IjEiIG5hbWU9ImdyZWVrX2JpbiI+CisgICAgICA8Q2hhcnNldD5ncmVlazwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI0OSIgcGFyZW50PSIxIiBuYW1lPSJoZWJyZXdfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD5oZWJyZXc8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNTAiIHBhcmVudD0iMSIgbmFtZT0iaGVicmV3X2JpbiI+CisgICAgICA8Q2hhcnNldD5oZWJyZXc8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNTEiIHBhcmVudD0iMSIgbmFtZT0iaHA4X2VuZ2xpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+aHA4PC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjUyIiBwYXJlbnQ9IjEiIG5hbWU9ImhwOF9iaW4iPgorICAgICAgPENoYXJzZXQ+aHA4PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjUzIiBwYXJlbnQ9IjEiIG5hbWU9ImtleWJjczJfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD5rZXliY3MyPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjU0IiBwYXJlbnQ9IjEiIG5hbWU9ImtleWJjczJfYmluIj4KKyAgICAgIDxDaGFyc2V0PmtleWJjczI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNTUiIHBhcmVudD0iMSIgbmFtZT0ia29pOHJfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD5rb2k4cjwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI1NiIgcGFyZW50PSIxIiBuYW1lPSJrb2k4cl9iaW4iPgorICAgICAgPENoYXJzZXQ+a29pOHI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNTciIHBhcmVudD0iMSIgbmFtZT0ia29pOHVfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD5rb2k4dTwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI1OCIgcGFyZW50PSIxIiBuYW1lPSJrb2k4dV9iaW4iPgorICAgICAgPENoYXJzZXQ+a29pOHU8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNTkiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2dlcm1hbjFfY2kiPgorICAgICAgPENoYXJzZXQ+bGF0aW4xPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjYwIiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluMV9zd2VkaXNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI2MSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfZGFuaXNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI2MiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfZ2VybWFuMl9jaSI+CisgICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNjMiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2JpbiI+CisgICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNjQiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+bGF0aW4xPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjY1IiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluMV9nZW5lcmFsX2NzIj4KKyAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI2NiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfc3BhbmlzaF9jaSI+CisgICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNjciIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2N6ZWNoX2NzIj4KKyAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI2OCIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjJfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD5sYXRpbjI8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNjkiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2h1bmdhcmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD5sYXRpbjI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNzAiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2Nyb2F0aWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI3MSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjJfYmluIj4KKyAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI3MiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjVfdHVya2lzaF9jaSI+CisgICAgICA8Q2hhcnNldD5sYXRpbjU8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNzMiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW41X2JpbiI+CisgICAgICA8Q2hhcnNldD5sYXRpbjU8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNzQiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW43X2VzdG9uaWFuX2NzIj4KKyAgICAgIDxDaGFyc2V0PmxhdGluNzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI3NSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjdfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD5sYXRpbjc8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNzYiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW43X2dlbmVyYWxfY3MiPgorICAgICAgPENoYXJzZXQ+bGF0aW43PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijc3IiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluN19iaW4iPgorICAgICAgPENoYXJzZXQ+bGF0aW43PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijc4IiBwYXJlbnQ9IjEiIG5hbWU9Im1hY2NlX2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+bWFjY2U8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iNzkiIHBhcmVudD0iMSIgbmFtZT0ibWFjY2VfYmluIj4KKyAgICAgIDxDaGFyc2V0Pm1hY2NlPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjgwIiBwYXJlbnQ9IjEiIG5hbWU9Im1hY3JvbWFuX2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+bWFjcm9tYW48L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iODEiIHBhcmVudD0iMSIgbmFtZT0ibWFjcm9tYW5fYmluIj4KKyAgICAgIDxDaGFyc2V0Pm1hY3JvbWFuPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjgyIiBwYXJlbnQ9IjEiIG5hbWU9InNqaXNfamFwYW5lc2VfY2kiPgorICAgICAgPENoYXJzZXQ+c2ppczwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI4MyIgcGFyZW50PSIxIiBuYW1lPSJzamlzX2JpbiI+CisgICAgICA8Q2hhcnNldD5zamlzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijg0IiBwYXJlbnQ9IjEiIG5hbWU9InN3ZTdfc3dlZGlzaF9jaSI+CisgICAgICA8Q2hhcnNldD5zd2U3PC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijg1IiBwYXJlbnQ9IjEiIG5hbWU9InN3ZTdfYmluIj4KKyAgICAgIDxDaGFyc2V0PnN3ZTc8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iODYiIHBhcmVudD0iMSIgbmFtZT0idGlzNjIwX3RoYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dGlzNjIwPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijg3IiBwYXJlbnQ9IjEiIG5hbWU9InRpczYyMF9iaW4iPgorICAgICAgPENoYXJzZXQ+dGlzNjIwPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijg4IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijg5IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfYmluIj4KKyAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iOTAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl91bmljb2RlX2NpIj4KKyAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iOTEiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9pY2VsYW5kaWNfY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI5MiIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2xhdHZpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI5MyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3JvbWFuaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iOTQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zbG92ZW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI5NSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3BvbGlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9Ijk2IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfZXN0b25pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI5NyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3NwYW5pc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI5OCIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3N3ZWRpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSI5OSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3R1cmtpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMDAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9jemVjaF9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEwMSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2RhbmlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEwMiIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2xpdGh1YW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMDMiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zbG92YWtfY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMDQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zcGFuaXNoMl9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEwNSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3JvbWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTA2IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfcGVyc2lhbl9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEwNyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2VzcGVyYW50b19jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEwOCIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2h1bmdhcmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEwOSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3NpbmhhbGFfY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMTAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9nZXJtYW4yX2NpIj4KKyAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTExIiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfY3JvYXRpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMTIiIHBhcmVudD0iMSIgbmFtZT0idWNzMl91bmljb2RlXzUyMF9jaSI+CisgICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjExMyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3ZpZXRuYW1lc2VfY2kiPgorICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMTQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9nZW5lcmFsX215c3FsNTAwX2NpIj4KKyAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTE1IiBwYXJlbnQ9IjEiIG5hbWU9InVqaXNfamFwYW5lc2VfY2kiPgorICAgICAgPENoYXJzZXQ+dWppczwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMTYiIHBhcmVudD0iMSIgbmFtZT0idWppc19iaW4iPgorICAgICAgPENoYXJzZXQ+dWppczwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMTciIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMTgiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfYmluIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjExOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl91bmljb2RlX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEyMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9pY2VsYW5kaWNfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTIxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2xhdHZpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTIyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3JvbWFuaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEyMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9zbG92ZW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTI0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3BvbGlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMjUiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZXN0b25pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTI2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3NwYW5pc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTI3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3N3ZWRpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTI4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3R1cmtpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTI5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2N6ZWNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEzMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9kYW5pc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTMxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2xpdGh1YW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTMyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3Nsb3Zha19jaSI+CisgICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMzMiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfc3BhbmlzaDJfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTM0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3JvbWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEzNSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9wZXJzaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjEzNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9lc3BlcmFudG9fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTM3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2h1bmdhcmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMzgiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfc2luaGFsYV9jaSI+CisgICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxMzkiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZ2VybWFuMl9jaSI+CisgICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNDAiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfY3JvYXRpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTQxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3VuaWNvZGVfNTIwX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE0MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl92aWV0bmFtZXNlX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE0MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNmxlX2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMTZsZTwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNDQiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZsZV9iaW4iPgorICAgICAgPENoYXJzZXQ+dXRmMTZsZTwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNDUiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZ2VuZXJhbF9jaSI+CisgICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNDYiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfYmluIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE0NyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl91bmljb2RlX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE0OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9pY2VsYW5kaWNfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTQ5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2xhdHZpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTUwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3JvbWFuaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE1MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9zbG92ZW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTUyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3BvbGlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNTMiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZXN0b25pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTU0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3NwYW5pc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTU1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3N3ZWRpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTU2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3R1cmtpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTU3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2N6ZWNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE1OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9kYW5pc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTU5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2xpdGh1YW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTYwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3Nsb3Zha19jaSI+CisgICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNjEiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfc3BhbmlzaDJfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTYyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3JvbWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE2MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9wZXJzaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE2NCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9lc3BlcmFudG9fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTY1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2h1bmdhcmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNjYiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfc2luaGFsYV9jaSI+CisgICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNjciIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZ2VybWFuMl9jaSI+CisgICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNjgiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfY3JvYXRpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTY5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3VuaWNvZGVfNTIwX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE3MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl92aWV0bmFtZXNlX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE3MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNzIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM190b2xvd2VyX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTczIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfYmluIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTc0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfdW5pY29kZV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE3NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2ljZWxhbmRpY19jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE3NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2xhdHZpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxNzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19yb21hbmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE3OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3Nsb3Zlbmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE3OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3BvbGlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE4MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2VzdG9uaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTgxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc3BhbmlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE4MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3N3ZWRpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxODMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM190dXJraXNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTg0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfY3plY2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxODUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19kYW5pc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxODYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19saXRodWFuaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTg3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc2xvdmFrX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTg4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc3BhbmlzaDJfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxODkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19yb21hbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE5MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3BlcnNpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxOTEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19lc3BlcmFudG9fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxOTIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19odW5nYXJpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxOTMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19zaW5oYWxhX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTk0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfZ2VybWFuMl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE5NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2Nyb2F0aWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTk2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfdW5pY29kZV81MjBfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIxOTciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM192aWV0bmFtZXNlX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMTk4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfZ2VuZXJhbF9teXNxbDUwMF9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjE5OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2dlbmVyYWxfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMDAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9iaW4iPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMDEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF91bmljb2RlX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjAyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaWNlbGFuZGljX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjAzIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbGF0dmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIwNCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3JvbWFuaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjA1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2xvdmVuaWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjA2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcG9saXNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjA3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXN0b25pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMDgiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zcGFuaXNoX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjA5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3dlZGlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIxMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3R1cmtpc2hfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMTEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9jemVjaF9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIxMiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2RhbmlzaF9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIxMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2xpdGh1YW5pYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMTQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zbG92YWtfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMTUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zcGFuaXNoMl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIxNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3JvbWFuX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjE3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcGVyc2lhbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIxOCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzcGVyYW50b19jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIxOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2h1bmdhcmlhbl9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIyMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NpbmhhbGFfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMjEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9nZXJtYW4yX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjIyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfY3JvYXRpYW5fY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMjMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF91bmljb2RlXzUyMF9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIyNCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3ZpZXRuYW1lc2VfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMjUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjI2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZGVfcGJfMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIyNyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2lzXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMjgiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sdl8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjI5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcm9fMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIzMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NsXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMzEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9wbF8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjMyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXRfMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIzMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMzQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zdl8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjM1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfdHJfMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIzNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2NzXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyMzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9kYV8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjM4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbHRfMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjIzOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NrXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNDAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9lc190cmFkXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNDEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sYV8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjQyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZW9fMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI0MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2h1XzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNDQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ocl8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjQ1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfdmlfMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI0NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0XzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNDciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9kZV9wYl8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjQ4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaXNfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI0OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2x2XzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNTAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9yb18wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjUxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2xfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI1MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3BsXzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNTMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ldF8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjU0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXNfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI1NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3N2XzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNTYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF90cl8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjU3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfY3NfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI1OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2RhXzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNTkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sdF8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjYwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2tfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI2MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzX3RyYWRfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI2MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2xhXzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNjMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9lb18wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjY0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaHVfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI2NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2hyXzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNjYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF92aV8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjY3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfamFfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI2OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2phXzA5MDBfYXNfY3Nfa3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNjkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF8wOTAwX2FzX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjcwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcnVfMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI3MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3J1XzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNzIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF96aF8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjczIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfMDkwMF9iaW4iPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNzQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9uYl8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjc1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbmJfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI3NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X25uXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyNzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ubl8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjc4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3JfbGF0bl8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjc5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3JfbGF0bl8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjgwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfYnNfMDkwMF9haV9jaSI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI4MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2JzXzA5MDBfYXNfY3MiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyODIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9iZ18wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjgzIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfYmdfMDkwMF9hc19jcyI+CisgICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgorICAgIDwvY29sbGF0aW9uPgorICAgIDxjb2xsYXRpb24gaWQ9IjI4NCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2dsXzA5MDBfYWlfY2kiPgorICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KKyAgICA8L2NvbGxhdGlvbj4KKyAgICA8Y29sbGF0aW9uIGlkPSIyODUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9nbF8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjg2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbW5fY3lybF8wOTAwX2FpX2NpIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPGNvbGxhdGlvbiBpZD0iMjg3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbW5fY3lybF8wOTAwX2FzX2NzIj4KKyAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+CisgICAgPC9jb2xsYXRpb24+CisgICAgPHNjaGVtYSBpZD0iMjg4IiBwYXJlbnQ9IjEiIG5hbWU9Im15c3FsIj4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3NjaGVtYT4KKyAgICA8c2NoZW1hIGlkPSIyODkiIHBhcmVudD0iMSIgbmFtZT0iaW5mb3JtYXRpb25fc2NoZW1hIj4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjNfZ2VuZXJhbF9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3NjaGVtYT4KKyAgICA8c2NoZW1hIGlkPSIyOTAiIHBhcmVudD0iMSIgbmFtZT0icGVyZm9ybWFuY2Vfc2NoZW1hIj4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3NjaGVtYT4KKyAgICA8c2NoZW1hIGlkPSIyOTEiIHBhcmVudD0iMSIgbmFtZT0ic3lzIj4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3NjaGVtYT4KKyAgICA8c2NoZW1hIGlkPSIyOTIiIHBhcmVudD0iMSIgbmFtZT0iemhpaHVpIj4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3NjaGVtYT4KKyAgICA8c2NoZW1hIGlkPSIyOTMiIHBhcmVudD0iMSIgbmFtZT0ic2NwIj4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3NjaGVtYT4KKyAgICA8c2NoZW1hIGlkPSIyOTQiIHBhcmVudD0iMSIgbmFtZT0ic3AiPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF8wOTAwX2FpX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvc2NoZW1hPgorICAgIDxzY2hlbWEgaWQ9IjI5NSIgcGFyZW50PSIxIiBuYW1lPSJlbmdsaXNoX2FwcCI+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0XzA5MDBfYWlfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC9zY2hlbWE+CisgICAgPHNjaGVtYSBpZD0iMjk2IiBwYXJlbnQ9IjEiIG5hbWU9InB0cHJvamVjdCI+CisgICAgICA8Q3VycmVudD4xPC9DdXJyZW50PgorICAgICAgPExhc3RJbnRyb3NwZWN0aW9uTG9jYWxUaW1lc3RhbXA+MjAyNS0wNS0yNi4wNDoxMTo0NjwvTGFzdEludHJvc3BlY3Rpb25Mb2NhbFRpbWVzdGFtcD4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3NjaGVtYT4KKyAgICA8dXNlciBpZD0iMjk3IiBwYXJlbnQ9IjEiIG5hbWU9Im15c3FsLmluZm9zY2hlbWEiPgorICAgICAgPENhbkxvZ2luPjA8L0NhbkxvZ2luPgorICAgICAgPEhvc3Q+bG9jYWxob3N0PC9Ib3N0PgorICAgICAgPFBsdWdpbj5jYWNoaW5nX3NoYTJfcGFzc3dvcmQ8L1BsdWdpbj4KKyAgICA8L3VzZXI+CisgICAgPHVzZXIgaWQ9IjI5OCIgcGFyZW50PSIxIiBuYW1lPSJteXNxbC5zZXNzaW9uIj4KKyAgICAgIDxDYW5Mb2dpbj4wPC9DYW5Mb2dpbj4KKyAgICAgIDxIb3N0PmxvY2FsaG9zdDwvSG9zdD4KKyAgICAgIDxQbHVnaW4+Y2FjaGluZ19zaGEyX3Bhc3N3b3JkPC9QbHVnaW4+CisgICAgPC91c2VyPgorICAgIDx1c2VyIGlkPSIyOTkiIHBhcmVudD0iMSIgbmFtZT0ibXlzcWwuc3lzIj4KKyAgICAgIDxDYW5Mb2dpbj4wPC9DYW5Mb2dpbj4KKyAgICAgIDxIb3N0PmxvY2FsaG9zdDwvSG9zdD4KKyAgICAgIDxQbHVnaW4+Y2FjaGluZ19zaGEyX3Bhc3N3b3JkPC9QbHVnaW4+CisgICAgPC91c2VyPgorICAgIDx1c2VyIGlkPSIzMDAiIHBhcmVudD0iMSIgbmFtZT0icm9vdCI+CisgICAgICA8SG9zdD5sb2NhbGhvc3Q8L0hvc3Q+CisgICAgICA8UGx1Z2luPmNhY2hpbmdfc2hhMl9wYXNzd29yZDwvUGx1Z2luPgorICAgIDwvdXNlcj4KKyAgICA8dGFibGUgaWQ9IjMwMSIgcGFyZW50PSIyOTYiIG5hbWU9ImNvbGxlY3Rpb25zIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMwMiIgcGFyZW50PSIyOTYiIG5hbWU9ImNvbW1lbnRfbGlrZXMiPgorICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBpZD0iMzAzIiBwYXJlbnQ9IjI5NiIgbmFtZT0iY29tbWVudHMiPgorICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBpZD0iMzA0IiBwYXJlbnQ9IjI5NiIgbmFtZT0iZG93bmxvYWRzIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMwNSIgcGFyZW50PSIyOTYiIG5hbWU9ImR5bmFtaWNfY29tbWVudCI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMDYiIHBhcmVudD0iMjk2IiBuYW1lPSJkeW5hbWljX2xpa2VzIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMwNyIgcGFyZW50PSIyOTYiIG5hbWU9ImV4cGVyaWVuY2VfaGlzdG9yeSI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMDgiIHBhcmVudD0iMjk2IiBuYW1lPSJmb2xsb3ciPgorICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBpZD0iMzA5IiBwYXJlbnQ9IjI5NiIgbmFtZT0iZnJpZW5kX3JlbGF0aW9uIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMxMCIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX2NvbW1lbnRzIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMxMSIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX2ludGVyZXN0cyI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMTIiIHBhcmVudD0iMjk2IiBuYW1lPSJncm91cF9tZW1iZXJzIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMxMyIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX3Bvc3QiPgorICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBpZD0iMzE0IiBwYXJlbnQ9IjI5NiIgbmFtZT0ibGV2ZWwiPgorICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBpZD0iMzE1IiBwYXJlbnQ9IjI5NiIgbmFtZT0ibGlrZXMiPgorICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBpZD0iMzE2IiBwYXJlbnQ9IjI5NiIgbmFtZT0icG9zdCI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMTciIHBhcmVudD0iMjk2IiBuYW1lPSJwcm9tb3Rpb25zIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMxOCIgcGFyZW50PSIyOTYiIG5hbWU9InNlZWRfY29tbWVudF9saWtlcyI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMTkiIHBhcmVudD0iMjk2IiBuYW1lPSJzZWVkX2NvbW1lbnRzIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMyMCIgcGFyZW50PSIyOTYiIG5hbWU9InNlZWRjb21tZW50bGlrZSI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMjEiIHBhcmVudD0iMjk2IiBuYW1lPSJzZWVkcyI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMjIiIHBhcmVudD0iMjk2IiBuYW1lPSJ0YXNrcyI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMjMiIHBhcmVudD0iMjk2IiBuYW1lPSJ0b3JyZW50cyI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMjQiIHBhcmVudD0iMjk2IiBuYW1lPSJ1c2VyIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMyNSIgcGFyZW50PSIyOTYiIG5hbWU9InVzZXJfZHluYW1pYyI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGlkPSIzMjYiIHBhcmVudD0iMjk2IiBuYW1lPSJ1c2VyX2ludml0ZV9jb2RlIj4KKyAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+CisgICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgaWQ9IjMyNyIgcGFyZW50PSIyOTYiIG5hbWU9InVzZXJfbWVzc2FnZXMiPgorICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KKyAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBpZD0iMzI4IiBwYXJlbnQ9IjI5NiIgbmFtZT0idXNlcl90YXNrX3N0YXR1cyI+CisgICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgorICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgorICAgIDwvdGFibGU+CisgICAgPGNvbHVtbiBpZD0iMzI5IiBwYXJlbnQ9IjMwMSIgbmFtZT0iY29sbGVjdGlvbklkIj4KKyAgICAgIDxBdXRvSW5jcmVtZW50PjE8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjMzMCIgcGFyZW50PSIzMDEiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzMzEiIHBhcmVudD0iMzAxIiBuYW1lPSJwb3N0Tm8iPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjMzMiIgcGFyZW50PSIzMDEiIG5hbWU9ImNvbGxlY3Rpb25zX2liZmtfMSI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iMzMzIiBwYXJlbnQ9IjMwMSIgbmFtZT0iY29sbGVjdGlvbnNfaWJma18yIj4KKyAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgorICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgorICAgICAgPE9uVXBkYXRlPmNhc2NhZGU8L09uVXBkYXRlPgorICAgICAgPFJlZkNvbE5hbWVzPnBvc3RObzwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnBvc3Q8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iMzM0IiBwYXJlbnQ9IjMwMSIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+Y29sbGVjdGlvbklkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjMzNSIgcGFyZW50PSIzMDEiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjMzNiIgcGFyZW50PSIzMDEiIG5hbWU9InBvc3RObyI+CisgICAgICA8Q29sTmFtZXM+cG9zdE5vPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iMzM3IiBwYXJlbnQ9IjMwMSIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGNvbHVtbiBpZD0iMzM4IiBwYXJlbnQ9IjMwMiIgbmFtZT0iY29tbWVudF9pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjMzOSIgcGFyZW50PSIzMDIiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNDAiIHBhcmVudD0iMzAyIiBuYW1lPSJpc19saWtlZCI+CisgICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iMzQxIiBwYXJlbnQ9IjMwMiIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzEwIj4KKyAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkPC9Db2xOYW1lcz4KKyAgICAgIDxSZWZDb2xOYW1lcz5jb21tZW50X2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+Y29tbWVudHM8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iMzQyIiBwYXJlbnQ9IjMwMiIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzExIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSIzNDMiIHBhcmVudD0iMzAyIiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkCit1c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjM0NCIgcGFyZW50PSIzMDIiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8xMSI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjM0NSIgcGFyZW50PSIzMDIiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjM0NiIgcGFyZW50PSIzMDMiIG5hbWU9ImNvbW1lbnRfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MTU8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjM0NyIgcGFyZW50PSIzMDMiIG5hbWU9InBvc3RfaWQiPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjM0OCIgcGFyZW50PSIzMDMiIG5hbWU9ImNvbV9jb21tZW50X2lkIj4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNDkiIHBhcmVudD0iMzAzIiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNTAiIHBhcmVudD0iMzAzIiBuYW1lPSJjb250ZW50Ij4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iMzUxIiBwYXJlbnQ9IjMwMyIgbmFtZT0iaXNfYW5vbnltb3VzIj4KKyAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnRpbnlpbnQoMSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iMzUyIiBwYXJlbnQ9IjMwMyIgbmFtZT0ibGlrZXNfY291bnQiPgorICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjM1MyIgcGFyZW50PSIzMDMiIG5hbWU9InJlcGx5X2NvdW50Ij4KKyAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNTQiIHBhcmVudD0iMzAzIiBuYW1lPSJjb21tZW50X3RpbWUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj45PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iMzU1IiBwYXJlbnQ9IjMwMyIgbmFtZT0iZmtfcG9zdF9pZCI+CisgICAgICA8Q29sTmFtZXM+cG9zdF9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+cG9zdE5vPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+cG9zdDwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSIzNTYiIHBhcmVudD0iMzAzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfNiI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iMzU3IiBwYXJlbnQ9IjMwMyIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSIzNTgiIHBhcmVudD0iMzAzIiBuYW1lPSJma19wb3N0X2lkIj4KKyAgICAgIDxDb2xOYW1lcz5wb3N0X2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSIzNTkiIHBhcmVudD0iMzAzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfOSI+CisgICAgICA8Q29sTmFtZXM+Y29tX2NvbW1lbnRfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjM2MCIgcGFyZW50PSIzMDMiIG5hbWU9ImZrX3VzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSIzNjEiIHBhcmVudD0iMzAzIiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSIzNjIiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF9pZCI+CisgICAgICA8QXV0b0luY3JlbWVudD4zPC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNjMiIHBhcmVudD0iMzA0IiBuYW1lPSJ0b3JyZW50X2lkIj4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNjQiIHBhcmVudD0iMzA0IiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNjUiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF90aW1lIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNjYiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF9zaXplIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjM2NyIgcGFyZW50PSIzMDQiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF81Ij4KKyAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KKyAgICAgIDxSZWZDb2xOYW1lcz50b3JyZW50X2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dG9ycmVudHM8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iMzY4IiBwYXJlbnQ9IjMwNCIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjM2OSIgcGFyZW50PSIzMDQiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPmRvd25sb2FkX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjM3MCIgcGFyZW50PSIzMDQiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF81Ij4KKyAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSIzNzEiIHBhcmVudD0iMzA0IiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfNCI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjM3MiIgcGFyZW50PSIzMDQiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjM3MyIgcGFyZW50PSIzMDUiIG5hbWU9ImNvbW1lbnRfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iMzc0IiBwYXJlbnQ9IjMwNSIgbmFtZT0iZHluYW1pY19pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjM3NSIgcGFyZW50PSIzMDUiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzNzYiIHBhcmVudD0iMzA1IiBuYW1lPSJjb21tZW50X2NvbnRlbnQiPgorICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjM3NyIgcGFyZW50PSIzMDUiIG5hbWU9ImNvbW1lbnRfdGltZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iMzc4IiBwYXJlbnQ9IjMwNSIgbmFtZT0iaXNfYW5vbnltb3VzIj4KKyAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KKyAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnRpbnlpbnQoMSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iMzc5IiBwYXJlbnQ9IjMwNSIgbmFtZT0icGFyZW50X2NvbW1lbnRfaWQiPgorICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iMzgwIiBwYXJlbnQ9IjMwNSIgbmFtZT0iZHluYW1pY19jb21tZW50X2liZmtfMSI+CisgICAgICA8Q29sTmFtZXM+ZHluYW1pY19pZDwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8UmVmQ29sTmFtZXM+ZHluYW1pY19pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXJfZHluYW1pYzwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSIzODEiIHBhcmVudD0iMzA1IiBuYW1lPSJkeW5hbWljX2NvbW1lbnRfaWJma18yIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSIzODIiIHBhcmVudD0iMzA1IiBuYW1lPSJkeW5hbWljX2NvbW1lbnRfaWJma18zIj4KKyAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPmR5bmFtaWNfY29tbWVudDwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSIzODMiIHBhcmVudD0iMzA1IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjM4NCIgcGFyZW50PSIzMDUiIG5hbWU9ImR5bmFtaWNfaWQiPgorICAgICAgPENvbE5hbWVzPmR5bmFtaWNfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjM4NSIgcGFyZW50PSIzMDUiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjM4NiIgcGFyZW50PSIzMDUiIG5hbWU9InBhcmVudF9jb21tZW50X2lkIj4KKyAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjM4NyIgcGFyZW50PSIzMDUiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjM4OCIgcGFyZW50PSIzMDYiIG5hbWU9Imxpa2VfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iMzg5IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjM5MCIgcGFyZW50PSIzMDYiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSIzOTEiIHBhcmVudD0iMzA2IiBuYW1lPSJsaWtlX3RpbWUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iMzkyIiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19saWtlc19pYmZrXzEiPgorICAgICAgPENvbE5hbWVzPmR5bmFtaWNfaWQ8L0NvbE5hbWVzPgorICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgorICAgICAgPFJlZkNvbE5hbWVzPmR5bmFtaWNfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT51c2VyX2R5bmFtaWM8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iMzkzIiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19saWtlc19pYmZrXzIiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgorICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjM5NCIgcGFyZW50PSIzMDYiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPmxpa2VfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iMzk1IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+CisgICAgICA8Q29sTmFtZXM+ZHluYW1pY19pZAordXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSIzOTYiIHBhcmVudD0iMzA2IiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iMzk3IiBwYXJlbnQ9IjMwNiIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGtleSBpZD0iMzk4IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5keW5hbWljX2lkPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjM5OSIgcGFyZW50PSIzMDciIG5hbWU9Imhpc3RvcnlfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MTwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDAwIiBwYXJlbnQ9IjMwNyIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQwMSIgcGFyZW50PSIzMDciIG5hbWU9ImV4cGVyaWVuY2VfY2hhbmdlIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDAyIiBwYXJlbnQ9IjMwNyIgbmFtZT0ic291cmNlIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDAzIiBwYXJlbnQ9IjMwNyIgbmFtZT0idXBkYXRlX3RpbWUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iNDA0IiBwYXJlbnQ9IjMwNyIgbmFtZT0iZXhwZXJpZW5jZV9oaXN0b3J5X2liZmtfMSI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iNDA1IiBwYXJlbnQ9IjMwNyIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+aGlzdG9yeV9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI0MDYiIHBhcmVudD0iMzA3IiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iNDA3IiBwYXJlbnQ9IjMwNyIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGNvbHVtbiBpZD0iNDA4IiBwYXJlbnQ9IjMwOCIgbmFtZT0icmVjb3JkX2lkIj4KKyAgICAgIDxBdXRvSW5jcmVtZW50PjU8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQwOSIgcGFyZW50PSIzMDgiIG5hbWU9ImZvbGxvd2VyX2lkIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDEwIiBwYXJlbnQ9IjMwOCIgbmFtZT0iZm9sbG93ZWRfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0MTEiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dfdGltZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI0MTIiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dfaWJma18xIj4KKyAgICAgIDxDb2xOYW1lcz5mb2xsb3dlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iNDEzIiBwYXJlbnQ9IjMwOCIgbmFtZT0iZm9sbG93X2liZmtfMiI+CisgICAgICA8Q29sTmFtZXM+Zm9sbG93ZWRfaWQ8L0NvbE5hbWVzPgorICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjQxNCIgcGFyZW50PSIzMDgiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPnJlY29yZF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI0MTUiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dlcl9pZCI+CisgICAgICA8Q29sTmFtZXM+Zm9sbG93ZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjQxNiIgcGFyZW50PSIzMDgiIG5hbWU9ImZvbGxvd2VkX2lkIj4KKyAgICAgIDxDb2xOYW1lcz5mb2xsb3dlZF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjQxNyIgcGFyZW50PSIzMDgiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjQxOCIgcGFyZW50PSIzMDkiIG5hbWU9InJlbGF0aW9uX2lkIj4KKyAgICAgIDxBdXRvSW5jcmVtZW50PjI8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQxOSIgcGFyZW50PSIzMDkiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0MjAiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0MjEiIHBhcmVudD0iMzA5IiBuYW1lPSJjcmVhdGVfdGltZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI0MjIiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfcmVsYXRpb25faWJma18xIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI0MjMiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfcmVsYXRpb25faWJma18yIj4KKyAgICAgIDxDb2xOYW1lcz5mcmllbmRfaWQ8L0NvbE5hbWVzPgorICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgorICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjQyNCIgcGFyZW50PSIzMDkiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPnJlbGF0aW9uX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjQyNSIgcGFyZW50PSIzMDkiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjQyNiIgcGFyZW50PSIzMDkiIG5hbWU9ImZyaWVuZF9pZCI+CisgICAgICA8Q29sTmFtZXM+ZnJpZW5kX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iNDI3IiBwYXJlbnQ9IjMwOSIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGNvbHVtbiBpZD0iNDI4IiBwYXJlbnQ9IjMxMCIgbmFtZT0iY29tbWVudF9pZCI+CisgICAgICA8QXV0b0luY3JlbWVudD41PC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0MjkiIHBhcmVudD0iMzEwIiBuYW1lPSJncm91cF9wb3N0X2lkIj4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0MzAiIHBhcmVudD0iMzEwIiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0MzEiIHBhcmVudD0iMzEwIiBuYW1lPSJjb250ZW50Ij4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0MzIiIHBhcmVudD0iMzEwIiBuYW1lPSJwYXJlbnRfY29tbWVudF9pZCI+CisgICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDMzIiBwYXJlbnQ9IjMxMCIgbmFtZT0idGltZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjY8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI0MzQiIHBhcmVudD0iMzEwIiBuYW1lPSJncm91cF9jb21tZW50c19pYmZrXzEiPgorICAgICAgPENvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L0NvbE5hbWVzPgorICAgICAgPFJlZkNvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT5ncm91cF9wb3N0PC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjQzNSIgcGFyZW50PSIzMTAiIG5hbWU9Imdyb3VwX2NvbW1lbnRzX2liZmtfMiI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iNDM2IiBwYXJlbnQ9IjMxMCIgbmFtZT0iZ3JvdXBfY29tbWVudHNfaWJma18zIj4KKyAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPmdyb3VwX2NvbW1lbnRzPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjQzNyIgcGFyZW50PSIzMTAiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPmNvbW1lbnRfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDM4IiBwYXJlbnQ9IjMxMCIgbmFtZT0iZ3JvdXBfcG9zdF9pZCI+CisgICAgICA8Q29sTmFtZXM+Z3JvdXBfcG9zdF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDM5IiBwYXJlbnQ9IjMxMCIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDQwIiBwYXJlbnQ9IjMxMCIgbmFtZT0icGFyZW50X2NvbW1lbnRfaWQiPgorICAgICAgPENvbE5hbWVzPnBhcmVudF9jb21tZW50X2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iNDQxIiBwYXJlbnQ9IjMxMCIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGNvbHVtbiBpZD0iNDQyIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+NDwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDQzIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfbmFtZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ0NCIgcGFyZW50PSIzMTEiIG5hbWU9ImRlc2NyaXB0aW9uIj4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NDUiIHBhcmVudD0iMzExIiBuYW1lPSJjcmVhdGVfdGltZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDQ2IiBwYXJlbnQ9IjMxMSIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDQ3IiBwYXJlbnQ9IjMxMSIgbmFtZT0ibWVtYmVyX2NvdW50Ij4KKyAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KKyAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NDgiIHBhcmVudD0iMzExIiBuYW1lPSJjYXRlZ29yeSI+CisgICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDQ5IiBwYXJlbnQ9IjMxMSIgbmFtZT0iY292ZXJfaW1hZ2UiPgorICAgICAgPFBvc2l0aW9uPjg8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iNDUwIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfaW50ZXJlc3RzX2liZmtfMSI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iNDUxIiBwYXJlbnQ9IjMxMSIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+Z3JvdXBfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDUyIiBwYXJlbnQ9IjMxMSIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjQ1MyIgcGFyZW50PSIzMTEiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjQ1NCIgcGFyZW50PSIzMTIiIG5hbWU9InJlbGF0aW9uX2lkIj4KKyAgICAgIDxBdXRvSW5jcmVtZW50PjQ8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ1NSIgcGFyZW50PSIzMTIiIG5hbWU9Imdyb3VwX2lkIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDU2IiBwYXJlbnQ9IjMxMiIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iNDU3IiBwYXJlbnQ9IjMxMiIgbmFtZT0iZ3JvdXBfbWVtYmVyc19pYmZrXzEiPgorICAgICAgPENvbE5hbWVzPmdyb3VwX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KKyAgICAgIDxSZWZDb2xOYW1lcz5ncm91cF9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPmdyb3VwX2ludGVyZXN0czwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI0NTgiIHBhcmVudD0iMzEyIiBuYW1lPSJncm91cF9tZW1iZXJzX2liZmtfMiI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iNDU5IiBwYXJlbnQ9IjMxMiIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+cmVsYXRpb25faWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDYwIiBwYXJlbnQ9IjMxMiIgbmFtZT0idW5pcXVlX2dyb3VwX3VzZXIiPgorICAgICAgPENvbE5hbWVzPmdyb3VwX2lkCit1c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjQ2MSIgcGFyZW50PSIzMTIiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI0NjIiIHBhcmVudD0iMzEyIiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8a2V5IGlkPSI0NjMiIHBhcmVudD0iMzEyIiBuYW1lPSJ1bmlxdWVfZ3JvdXBfdXNlciI+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT51bmlxdWVfZ3JvdXBfdXNlcjwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI0NjQiIHBhcmVudD0iMzEzIiBuYW1lPSJncm91cF9wb3N0X2lkIj4KKyAgICAgIDxBdXRvSW5jcmVtZW50PjU8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ2NSIgcGFyZW50PSIzMTMiIG5hbWU9Imdyb3VwX2lkIj4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NjYiIHBhcmVudD0iMzEzIiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NjciIHBhcmVudD0iMzEzIiBuYW1lPSJjb250ZW50Ij4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NjgiIHBhcmVudD0iMzEzIiBuYW1lPSJ0aXRsZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ2OSIgcGFyZW50PSIzMTMiIG5hbWU9ImltYWdlIj4KKyAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NzAiIHBhcmVudD0iMzEzIiBuYW1lPSJsaWtlX2NvdW50Ij4KKyAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NzEiIHBhcmVudD0iMzEzIiBuYW1lPSJjb21tZW50X2NvdW50Ij4KKyAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0NzIiIHBhcmVudD0iMzEzIiBuYW1lPSJ0aW1lIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+OTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjQ3MyIgcGFyZW50PSIzMTMiIG5hbWU9Imdyb3VwX3Bvc3RfaWJma18xIj4KKyAgICAgIDxDb2xOYW1lcz5ncm91cF9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+Z3JvdXBfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT5ncm91cF9pbnRlcmVzdHM8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iNDc0IiBwYXJlbnQ9IjMxMyIgbmFtZT0iZ3JvdXBfcG9zdF9pYmZrXzIiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjQ3NSIgcGFyZW50PSIzMTMiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDc2IiBwYXJlbnQ9IjMxMyIgbmFtZT0iZ3JvdXBfaWQiPgorICAgICAgPENvbE5hbWVzPmdyb3VwX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI0NzciIHBhcmVudD0iMzEzIiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iNDc4IiBwYXJlbnQ9IjMxMyIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGNvbHVtbiBpZD0iNDc5IiBwYXJlbnQ9IjMxNCIgbmFtZT0ibGV2ZWxfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0ODAiIHBhcmVudD0iMzE0IiBuYW1lPSJsZXZlbF9uYW1lIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDgxIiBwYXJlbnQ9IjMxNCIgbmFtZT0icmVxdWlyZWRfZXhwZXJpZW5jZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ4MiIgcGFyZW50PSIzMTQiIG5hbWU9InJlcXVpcmVkX3NoYXJlX3JhdGlvIj4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ4MyIgcGFyZW50PSIzMTQiIG5hbWU9InJlcXVpcmVkX3VwbG9hZF9nYiI+CisgICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI0ODQiIHBhcmVudD0iMzE0IiBuYW1lPSJyZXF1aXJlZF9zZWVkaW5nX2hvdXJzIj4KKyAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ4NSIgcGFyZW50PSIzMTQiIG5hbWU9InBlcm1pc3Npb25zIj4KKyAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8aW5kZXggaWQ9IjQ4NiIgcGFyZW50PSIzMTQiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPmxldmVsX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI0ODciIHBhcmVudD0iMzE0IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI0ODgiIHBhcmVudD0iMzE1IiBuYW1lPSJsaWtlSWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDg5IiBwYXJlbnQ9IjMxNSIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ5MCIgcGFyZW50PSIzMTUiIG5hbWU9InBvc3RObyI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iNDkxIiBwYXJlbnQ9IjMxNSIgbmFtZT0ibGlrZXNfaWJma18xIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KKyAgICAgIDxPblVwZGF0ZT5jYXNjYWRlPC9PblVwZGF0ZT4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI0OTIiIHBhcmVudD0iMzE1IiBuYW1lPSJsaWtlc19pYmZrXzIiPgorICAgICAgPENvbE5hbWVzPnBvc3RObzwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+CisgICAgICA8UmVmQ29sTmFtZXM+cG9zdE5vPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+cG9zdDwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSI0OTMiIHBhcmVudD0iMzE1IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5saWtlSWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDk0IiBwYXJlbnQ9IjMxNSIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNDk1IiBwYXJlbnQ9IjMxNSIgbmFtZT0icG9zdE5vIj4KKyAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI0OTYiIHBhcmVudD0iMzE1IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI0OTciIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0Tm8iPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+Mjc8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjQ5OCIgcGFyZW50PSIzMTYiIG5hbWU9InVzZXJJZCI+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNDk5IiBwYXJlbnQ9IjMxNiIgbmFtZT0icG9zdENvbnRlbnQiPgorICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjUwMCIgcGFyZW50PSIzMTYiIG5hbWU9ImltYWdlVXJsIj4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MDEiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0VGltZSI+CisgICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MDIiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0TGlrZU51bSI+CisgICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTAzIiBwYXJlbnQ9IjMxNiIgbmFtZT0icG9zdENvbGxlY3ROdW0iPgorICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjUwNCIgcGFyZW50PSIzMTYiIG5hbWU9InRpdGxlIj4KKyAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MDUiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0VHlwZSI+CisgICAgICA8UG9zaXRpb24+OTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI1MDYiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0X2liZmtfMSI+CisgICAgICA8Q29sTmFtZXM+dXNlcklkPC9Db2xOYW1lcz4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSI1MDciIHBhcmVudD0iMzE2IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNTA4IiBwYXJlbnQ9IjMxNiIgbmFtZT0idXNlcklkIj4KKyAgICAgIDxDb2xOYW1lcz51c2VySWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI1MDkiIHBhcmVudD0iMzE2IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI1MTAiIHBhcmVudD0iMzE3IiBuYW1lPSJwcm9tb19pZCI+CisgICAgICA8QXV0b0luY3JlbWVudD4zPC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MTEiIHBhcmVudD0iMzE3IiBuYW1lPSJuYW1lIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTEyIiBwYXJlbnQ9IjMxNyIgbmFtZT0idXBsb2FkX2NvZWZmIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MTMiIHBhcmVudD0iMzE3IiBuYW1lPSJkb3dubG9hZF9jb2VmZiI+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MTQiIHBhcmVudD0iMzE3IiBuYW1lPSJ0aW1lX3JhbmdlIj4KKyAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MTUiIHBhcmVudD0iMzE3IiBuYW1lPSJjcml0ZXJpYSI+CisgICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTE2IiBwYXJlbnQ9IjMxNyIgbmFtZT0icF9zdGFydF90aW1lIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MTciIHBhcmVudD0iMzE3IiBuYW1lPSJwX2VuZF90aW1lIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8aW5kZXggaWQ9IjUxOCIgcGFyZW50PSIzMTciIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPnByb21vX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI1MTkiIHBhcmVudD0iMzE3IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI1MjAiIHBhcmVudD0iMzE4IiBuYW1lPSJpZCI+CisgICAgICA8QXV0b0luY3JlbWVudD4xPC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MjEiIHBhcmVudD0iMzE4IiBuYW1lPSJjb21tZW50X2lkIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTIyIiBwYXJlbnQ9IjMxOCIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjUyMyIgcGFyZW50PSIzMTgiIG5hbWU9ImlzX2xpa2VkIj4KKyAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4xPC9EZWZhdWx0RXhwcmVzc2lvbj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iNTI0IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfY29tbWVudCI+CisgICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnNlZWRfY29tbWVudHM8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxmb3JlaWduLWtleSBpZD0iNTI1IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfdXNlciI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iNTI2IiBwYXJlbnQ9IjMxOCIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+aWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNTI3IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfY29tbWVudCI+CisgICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNTI4IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfdXNlciI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjUyOSIgcGFyZW50PSIzMTgiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjUzMCIgcGFyZW50PSIzMTkiIG5hbWU9ImNvbW1lbnRfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MTwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTMxIiBwYXJlbnQ9IjMxOSIgbmFtZT0ic2VlZF9pZCI+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTMyIiBwYXJlbnQ9IjMxOSIgbmFtZT0iY29tX2NvbW1lbnRfaWQiPgorICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjUzMyIgcGFyZW50PSIzMTkiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjUzNCIgcGFyZW50PSIzMTkiIG5hbWU9ImNvbnRlbnQiPgorICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjUzNSIgcGFyZW50PSIzMTkiIG5hbWU9ImlzX2Fub255bW91cyI+CisgICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT50aW55aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjUzNiIgcGFyZW50PSIzMTkiIG5hbWU9Imxpa2VzX2NvdW50Ij4KKyAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KKyAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1MzciIHBhcmVudD0iMzE5IiBuYW1lPSJyZXBseV9jb3VudCI+CisgICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+CisgICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTM4IiBwYXJlbnQ9IjMxOSIgbmFtZT0iY29tbWVudF90aW1lIj4KKyAgICAgIDxQb3NpdGlvbj45PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxmb3JlaWduLWtleSBpZD0iNTM5IiBwYXJlbnQ9IjMxOSIgbmFtZT0ic2VlZF9jb21tZW50c19pYmZrXzEiPgorICAgICAgPENvbE5hbWVzPnNlZWRfaWQ8L0NvbE5hbWVzPgorICAgICAgPFJlZkNvbE5hbWVzPnNlZWRfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT5zZWVkczwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI1NDAiIHBhcmVudD0iMzE5IiBuYW1lPSJzZWVkX2NvbW1lbnRzX2liZmtfMiI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iNTQxIiBwYXJlbnQ9IjMxOSIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI1NDIiIHBhcmVudD0iMzE5IiBuYW1lPSJzZWVkX2lkIj4KKyAgICAgIDxDb2xOYW1lcz5zZWVkX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI1NDMiIHBhcmVudD0iMzE5IiBuYW1lPSJjb21fY29tbWVudF9pZCI+CisgICAgICA8Q29sTmFtZXM+Y29tX2NvbW1lbnRfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjU0NCIgcGFyZW50PSIzMTkiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI1NDUiIHBhcmVudD0iMzE5IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI1NDYiIHBhcmVudD0iMzIwIiBuYW1lPSJpZCI+CisgICAgICA8QXV0b0luY3JlbWVudD4xPC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NDciIHBhcmVudD0iMzIwIiBuYW1lPSJjb21tZW50X2lkIj4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NDgiIHBhcmVudD0iMzIwIiBuYW1lPSJpc19saWtlZCI+CisgICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaXQoMSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTQ5IiBwYXJlbnQ9IjMyMCIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGluZGV4IGlkPSI1NTAiIHBhcmVudD0iMzIwIiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iNTUxIiBwYXJlbnQ9IjMyMCIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGNvbHVtbiBpZD0iNTUyIiBwYXJlbnQ9IjMyMSIgbmFtZT0ic2VlZF9pZCI+CisgICAgICA8QXV0b0luY3JlbWVudD40PC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NTMiIHBhcmVudD0iMzIxIiBuYW1lPSJ0b3JyZW50X2lkIj4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NTQiIHBhcmVudD0iMzIxIiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NTUiIHBhcmVudD0iMzIxIiBuYW1lPSJzdGFydF90aW1lIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NTYiIHBhcmVudD0iMzIxIiBuYW1lPSJlbmRfdGltZSI+CisgICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NTciIHBhcmVudD0iMzIxIiBuYW1lPSJkdXJhdGlvbiI+CisgICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI1NTgiIHBhcmVudD0iMzIxIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMyI+CisgICAgICA8Q29sTmFtZXM+dG9ycmVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dG9ycmVudF9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnRvcnJlbnRzPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjU1OSIgcGFyZW50PSIzMjEiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8yIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSI1NjAiIHBhcmVudD0iMzIxIiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5zZWVkX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjU2MSIgcGFyZW50PSIzMjEiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8zIj4KKyAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI1NjIiIHBhcmVudD0iMzIxIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMiI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjU2MyIgcGFyZW50PSIzMjEiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjU2NCIgcGFyZW50PSIzMjIiIG5hbWU9InRhc2tfaWQiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoNTApfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU2NSIgcGFyZW50PSIzMjIiIG5hbWU9InRpdGxlIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTY2IiBwYXJlbnQ9IjMyMiIgbmFtZT0iZGVzY3JpcHRpb24iPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NjciIHBhcmVudD0iMzIyIiBuYW1lPSJyZXdhcmRfZXhwZXJpZW5jZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU2OCIgcGFyZW50PSIzMjIiIG5hbWU9InJld2FyZF9wb2ludHMiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8aW5kZXggaWQ9IjU2OSIgcGFyZW50PSIzMjIiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPnRhc2tfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjU3MCIgcGFyZW50PSIzMjIiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjU3MSIgcGFyZW50PSIzMjMiIG5hbWU9InRvcnJlbnRfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTcyIiBwYXJlbnQ9IjMyMyIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTczIiBwYXJlbnQ9IjMyMyIgbmFtZT0idGl0bGUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NzQiIHBhcmVudD0iMzIzIiBuYW1lPSJkZXNjcmlwdGlvbiI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dGV4dHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NzUiIHBhcmVudD0iMzIzIiBuYW1lPSJ0YWdzIj4KKyAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NzYiIHBhcmVudD0iMzIzIiBuYW1lPSJjYXRlZ29yeSI+CisgICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDUwKXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1NzciIHBhcmVudD0iMzIzIiBuYW1lPSJ1cGxvYWRfdGltZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI1NzgiIHBhcmVudD0iMzIzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMSI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KKyAgICA8L2ZvcmVpZ24ta2V5PgorICAgIDxpbmRleCBpZD0iNTc5IiBwYXJlbnQ9IjMyMyIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8Q29sTmFtZXM+dG9ycmVudF9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI1ODAiIHBhcmVudD0iMzIzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMSI+CisgICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjU4MSIgcGFyZW50PSIzMjMiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjU4MiIgcGFyZW50PSIzMjQiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+NTwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTgzIiBwYXJlbnQ9IjMyNCIgbmFtZT0idXNlcm5hbWUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1ODQiIHBhcmVudD0iMzI0IiBuYW1lPSJhdmF0YXJfdXJsIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTg1IiBwYXJlbnQ9IjMyNCIgbmFtZT0iZW1haWwiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1ODYiIHBhcmVudD0iMzI0IiBuYW1lPSJwYXNzd29yZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU4NyIgcGFyZW50PSIzMjQiIG5hbWU9InJvbGUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1ODgiIHBhcmVudD0iMzI0IiBuYW1lPSJpbnZpdGVfY291bnQiPgorICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU4OSIgcGFyZW50PSIzMjQiIG5hbWU9ImxldmVsIj4KKyAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1OTAiIHBhcmVudD0iMzI0IiBuYW1lPSJ1cGxvYWRfY291bnQiPgorICAgICAgPFBvc2l0aW9uPjk8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZmxvYXR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTkxIiBwYXJlbnQ9IjMyNCIgbmFtZT0iZG93bmxvYWRfY291bnQiPgorICAgICAgPFBvc2l0aW9uPjEwPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU5MiIgcGFyZW50PSIzMjQiIG5hbWU9InNoYXJlX3JhdGUiPgorICAgICAgPFBvc2l0aW9uPjExPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU5MyIgcGFyZW50PSIzMjQiIG5hbWU9InJlZ2lzdHJhdGlvbl9kYXRlIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNTk0IiBwYXJlbnQ9IjMyNCIgbmFtZT0ibGFzdF9sb2dpbl90aW1lIj4KKyAgICAgIDxQb3NpdGlvbj4xMzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1OTUiIHBhcmVudD0iMzI0IiBuYW1lPSJ1c2VyX3BvaW50cyI+CisgICAgICA8UG9zaXRpb24+MTQ8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU5NiIgcGFyZW50PSIzMjQiIG5hbWU9ImlzX3Byb21vIj4KKyAgICAgIDxQb3NpdGlvbj4xNTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjU5NyIgcGFyZW50PSIzMjQiIG5hbWU9ImN1cnJlbnRfZXhwZXJpZW5jZSI+CisgICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE2PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI1OTgiIHBhcmVudD0iMzI0IiBuYW1lPSJjdXJyZW50X3NlZWRpbmdfaG91cnMiPgorICAgICAgPERlZmF1bHRFeHByZXNzaW9uPjA8L0RlZmF1bHRFeHByZXNzaW9uPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xNzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjU5OSIgcGFyZW50PSIzMjQiIG5hbWU9ImZrX3VzZXJfbGV2ZWwiPgorICAgICAgPENvbE5hbWVzPmxldmVsPC9Db2xOYW1lcz4KKyAgICAgIDxPbkRlbGV0ZT5zZXQtbnVsbDwvT25EZWxldGU+CisgICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+CisgICAgICA8UmVmQ29sTmFtZXM+bGV2ZWxfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT5sZXZlbDwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSI2MDAiIHBhcmVudD0iMzI0IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjYwMSIgcGFyZW50PSIzMjQiIG5hbWU9ImZrX3VzZXJfbGV2ZWwiPgorICAgICAgPENvbE5hbWVzPmxldmVsPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iNjAyIiBwYXJlbnQ9IjMyNCIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgICAgPGNvbHVtbiBpZD0iNjAzIiBwYXJlbnQ9IjMyNSIgbmFtZT0iZHluYW1pY19pZCI+CisgICAgICA8QXV0b0luY3JlbWVudD41PC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI2MDQiIHBhcmVudD0iMzI1IiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjA1IiBwYXJlbnQ9IjMyNSIgbmFtZT0idGl0bGUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI2MDYiIHBhcmVudD0iMzI1IiBuYW1lPSJjb250ZW50Ij4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI2MDciIHBhcmVudD0iMzI1IiBuYW1lPSJpbWFnZV91cmwiPgorICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjYwOCIgcGFyZW50PSIzMjUiIG5hbWU9InRpbWUiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjYwOSIgcGFyZW50PSIzMjUiIG5hbWU9Imxpa2VzX2NvdW50Ij4KKyAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KKyAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI2MTAiIHBhcmVudD0iMzI1IiBuYW1lPSJjb21tZW50c19jb3VudCI+CisgICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+CisgICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI2MTEiIHBhcmVudD0iMzI1IiBuYW1lPSJ1c2VyX2R5bmFtaWNfaWJma18xIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSI2MTIiIHBhcmVudD0iMzI1IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5keW5hbWljX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjYxMyIgcGFyZW50PSIzMjUiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI2MTQiIHBhcmVudD0iMzI1IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI2MTUiIHBhcmVudD0iMzI2IiBuYW1lPSJpbnZpdGVfaWQiPgorICAgICAgPEF1dG9JbmNyZW1lbnQ+MjwvQXV0b0luY3JlbWVudD4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjE2IiBwYXJlbnQ9IjMyNiIgbmFtZT0idXNlcl9pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjYxNyIgcGFyZW50PSIzMjYiIG5hbWU9Imludml0ZV9jb2RlIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjE4IiBwYXJlbnQ9IjMyNiIgbmFtZT0iaXNfdXNlZCI+CisgICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjYxOSIgcGFyZW50PSIzMjYiIG5hbWU9ImNyZWF0ZWRfYXQiPgorICAgICAgPERlZmF1bHRFeHByZXNzaW9uPkNVUlJFTlRfVElNRVNUQU1QPC9EZWZhdWx0RXhwcmVzc2lvbj4KKyAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPnRpbWVzdGFtcHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjYyMCIgcGFyZW50PSIzMjYiIG5hbWU9InVzZXJfaW52aXRlX2NvZGVfaWJma18xIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGluZGV4IGlkPSI2MjEiIHBhcmVudD0iMzI2IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxDb2xOYW1lcz5pbnZpdGVfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNjIyIiBwYXJlbnQ9IjMyNiIgbmFtZT0iaW52aXRlX2NvZGUiPgorICAgICAgPENvbE5hbWVzPmludml0ZV9jb2RlPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjYyMyIgcGFyZW50PSIzMjYiIG5hbWU9InVzZXJfaWQiPgorICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8a2V5IGlkPSI2MjQiIHBhcmVudD0iMzI2IiBuYW1lPSJQUklNQVJZIj4KKyAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+CisgICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgorICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8a2V5IGlkPSI2MjUiIHBhcmVudD0iMzI2IiBuYW1lPSJpbnZpdGVfY29kZSI+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5pbnZpdGVfY29kZTwvVW5kZXJseWluZ0luZGV4TmFtZT4KKyAgICA8L2tleT4KKyAgICA8Y29sdW1uIGlkPSI2MjYiIHBhcmVudD0iMzI3IiBuYW1lPSJtZXNzYWdlX2lkIj4KKyAgICAgIDxBdXRvSW5jcmVtZW50PjE8L0F1dG9JbmNyZW1lbnQ+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjYyNyIgcGFyZW50PSIzMjciIG5hbWU9InNlbmRlcl9pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjYyOCIgcGFyZW50PSIzMjciIG5hbWU9InJlY2VpdmVyX2lkIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjI5IiBwYXJlbnQ9IjMyNyIgbmFtZT0iY29udGVudCI+CisgICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjMwIiBwYXJlbnQ9IjMyNyIgbmFtZT0idGltZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI2MzEiIHBhcmVudD0iMzI3IiBuYW1lPSJ1c2VyX21lc3NhZ2VzX2liZmtfMSI+CisgICAgICA8Q29sTmFtZXM+c2VuZGVyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI2MzIiIHBhcmVudD0iMzI3IiBuYW1lPSJ1c2VyX21lc3NhZ2VzX2liZmtfMiI+CisgICAgICA8Q29sTmFtZXM+cmVjZWl2ZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgorICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjYzMyIgcGFyZW50PSIzMjciIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPm1lc3NhZ2VfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KKyAgICA8L2luZGV4PgorICAgIDxpbmRleCBpZD0iNjM0IiBwYXJlbnQ9IjMyNyIgbmFtZT0ic2VuZGVyX2lkIj4KKyAgICAgIDxDb2xOYW1lcz5zZW5kZXJfaWQ8L0NvbE5hbWVzPgorICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+CisgICAgPC9pbmRleD4KKyAgICA8aW5kZXggaWQ9IjYzNSIgcGFyZW50PSIzMjciIG5hbWU9InJlY2VpdmVyX2lkIj4KKyAgICAgIDxDb2xOYW1lcz5yZWNlaXZlcl9pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICA8L2luZGV4PgorICAgIDxrZXkgaWQ9IjYzNiIgcGFyZW50PSIzMjciIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KKyAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+CisgICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgorICAgIDwva2V5PgorICAgIDxjb2x1bW4gaWQ9IjYzNyIgcGFyZW50PSIzMjgiIG5hbWU9InN0YXR1c19pZCI+CisgICAgICA8QXV0b0luY3JlbWVudD4yPC9BdXRvSW5jcmVtZW50PgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Y29sdW1uIGlkPSI2MzgiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjM5IiBwYXJlbnQ9IjMyOCIgbmFtZT0idGFza19pZCI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjY0MCIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfcHJvZ3Jlc3MiPgorICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KKyAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KKyAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjY0MSIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfZXhwZXJpZW5jZSI+CisgICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgorICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgorICAgIDwvY29sdW1uPgorICAgIDxjb2x1bW4gaWQ9IjY0MiIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfcG9pbnRzIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjQzIiBwYXJlbnQ9IjMyOCIgbmFtZT0ic3RhdHVzIj4KKyAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+CisgICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+CisgICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+CisgICAgPC9jb2x1bW4+CisgICAgPGNvbHVtbiBpZD0iNjQ0IiBwYXJlbnQ9IjMyOCIgbmFtZT0iaXNfcmV3YXJkX2NsYWltZWQiPgorICAgICAgPERlZmF1bHRFeHByZXNzaW9uPjA8L0RlZmF1bHRFeHByZXNzaW9uPgorICAgICAgPFBvc2l0aW9uPjg8L1Bvc2l0aW9uPgorICAgICAgPFN0b3JlZFR5cGU+dGlueWludCgxKXwwczwvU3RvcmVkVHlwZT4KKyAgICA8L2NvbHVtbj4KKyAgICA8Zm9yZWlnbi1rZXkgaWQ9IjY0NSIgcGFyZW50PSIzMjgiIG5hbWU9InVzZXJfdGFza19zdGF0dXNfaWJma18xIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KKyAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KKyAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgorICAgIDwvZm9yZWlnbi1rZXk+CisgICAgPGZvcmVpZ24ta2V5IGlkPSI2NDYiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX3Rhc2tfc3RhdHVzX2liZmtfMiI+CisgICAgICA8Q29sTmFtZXM+dGFza19pZDwvQ29sTmFtZXM+CisgICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+CisgICAgICA8UmVmQ29sTmFtZXM+dGFza19pZDwvUmVmQ29sTmFtZXM+CisgICAgICA8UmVmVGFibGVOYW1lPnRhc2tzPC9SZWZUYWJsZU5hbWU+CisgICAgPC9mb3JlaWduLWtleT4KKyAgICA8aW5kZXggaWQ9IjY0NyIgcGFyZW50PSIzMjgiIG5hbWU9IlBSSU1BUlkiPgorICAgICAgPENvbE5hbWVzPnN0YXR1c19pZDwvQ29sTmFtZXM+CisgICAgICA8VHlwZT5idHJlZTwvVHlwZT4KKyAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI2NDgiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX2lkIj4KKyAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGluZGV4IGlkPSI2NDkiIHBhcmVudD0iMzI4IiBuYW1lPSJ0YXNrX2lkIj4KKyAgICAgIDxDb2xOYW1lcz50YXNrX2lkPC9Db2xOYW1lcz4KKyAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgorICAgIDwvaW5kZXg+CisgICAgPGtleSBpZD0iNjUwIiBwYXJlbnQ9IjMyOCIgbmFtZT0iUFJJTUFSWSI+CisgICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgorICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KKyAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+CisgICAgPC9rZXk+CisgIDwvZGF0YWJhc2UtbW9kZWw+Cis8L2RhdGFTb3VyY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL2luZm9ybWF0aW9uX3NjaGVtYS5GTlJ3TFEubWV0YSBiLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9pbmZvcm1hdGlvbl9zY2hlbWEuRk5Sd0xRLm1ldGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmM2RiMgotLS0gL2Rldi9udWxsCisrKyBiLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9pbmZvcm1hdGlvbl9zY2hlbWEuRk5Sd0xRLm1ldGEKQEAgLTAsMCArMSwyIEBACisjbjppbmZvcm1hdGlvbl9zY2hlbWEKKyE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvbXlzcWwub3NBNEJnLm1ldGEgYi8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvbXlzcWwub3NBNEJnLm1ldGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhNTNmMQotLS0gL2Rldi9udWxsCisrKyBiLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9teXNxbC5vc0E0QmcubWV0YQpAQCAtMCwwICsxLDIgQEAKKyNuOm15c3FsCishPG1kPiBbbnVsbCwgMCwgbnVsbCwgbnVsbCwgLTIxNDc0ODM2NDgsIC0yMTQ3NDgzNjQ4XQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3BlcmZvcm1hbmNlX3NjaGVtYS5rSXcwbncubWV0YSBiLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9wZXJmb3JtYW5jZV9zY2hlbWEua0l3MG53Lm1ldGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5NGRiMQotLS0gL2Rldi9udWxsCisrKyBiLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9wZXJmb3JtYW5jZV9zY2hlbWEua0l3MG53Lm1ldGEKQEAgLTAsMCArMSwyIEBACisjbjpwZXJmb3JtYW5jZV9zY2hlbWEKKyE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcHRwcm9qZWN0LmxUQ0ozUS5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3B0cHJvamVjdC5sVENKM1EubWV0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjVjM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3B0cHJvamVjdC5sVENKM1EubWV0YQpAQCAtMCwwICsxLDIgQEAKKyNuOnB0cHJvamVjdAorITxtZD4gWzAsIDAsIG51bGwsIG51bGwsIC0yMTQ3NDgzNjQ4LCAtMjE0NzQ4MzY0OF0KZGlmZiAtLWdpdCBhLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9zeXMuemI0QkFBLm1ldGEgYi8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvc3lzLnpiNEJBQS5tZXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDQ3MGIKLS0tIC9kZXYvbnVsbAorKysgYi8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvc3lzLnpiNEJBQS5tZXRhCkBAIC0wLDAgKzEsMiBAQAorI246c3lzCishPG1kPiBbbnVsbCwgMCwgbnVsbCwgbnVsbCwgLTIxNDc0ODM2NDgsIC0yMTQ3NDgzNjQ4XQpkaWZmIC0tZ2l0IGEvLmlkZWEvbWlzYy54bWwgYi8uaWRlYS9taXNjLnhtbAppbmRleCA4MmRiZWM4Li5mNThlMWUyIDEwMDY0NAotLS0gYS8uaWRlYS9taXNjLnhtbAorKysgYi8uaWRlYS9taXNjLnhtbApAQCAtOCw2ICs4LDEwIEBACiAgICAgICA8L2xpc3Q+CiAgICAgPC9vcHRpb24+CiAgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlBXQSI+CisgICAgPG9wdGlvbiBuYW1lPSJlbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Indhc0VuYWJsZWRBdExlYXN0T25jZSIgdmFsdWU9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiIgbGFuZ3VhZ2VMZXZlbD0iSkRLXzE3IiBkZWZhdWx0PSJ0cnVlIiBwcm9qZWN0LWpkay1uYW1lPSIxNyIgcHJvamVjdC1qZGstdHlwZT0iSmF2YVNESyI+CiAgICAgPG91dHB1dCB1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL291dCIgLz4KICAgPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS8uaWRlYS9tb2R1bGVzLnhtbCBiLy5pZGVhL21vZHVsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjNiZjkKLS0tIC9kZXYvbnVsbAorKysgYi8uaWRlYS9tb2R1bGVzLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+CisgICAgPG1vZHVsZXM+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL2VjaG8tYmFja2VuZC5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2VjaG8tYmFja2VuZC5pbWwiIC8+CisgICAgPC9tb2R1bGVzPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS9zcWxEYXRhU291cmNlcy54bWwgYi8uaWRlYS9zcWxEYXRhU291cmNlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2MWZmMAotLS0gL2Rldi9udWxsCisrKyBiLy5pZGVhL3NxbERhdGFTb3VyY2VzLnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iRGRsTWFwcGluZ3MiPgorICAgIDxtYXBwaW5nIHV1aWQ9IjVlZDUxNjNmLWVkYTgtNGY4ZS04MjgwLTY4ZWE3Y2NmMTkzNyIgbmFtZT0icHRQcm9qZWN0QGxvY2FsaG9zdCBNYXBwaW5nIj4KKyAgICAgIDxkYXRhLXNvdXJjZXMgZGI9IjY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMiIgZGRsPSI5YzJmNjM0Zi1kZGIwLTRkY2ItYmNlZC0yNzE1MDZjOWU2NDkiIC8+CisgICAgICA8c2NvcGU+CisgICAgICAgIDxub2RlIGtpbmQ9ImRhdGFiYXNlIiBxbmFtZT0iQCIgLz4KKyAgICAgIDwvc2NvcGU+CisgICAgPC9tYXBwaW5nPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS92Y3MueG1sIGIvLmlkZWEvdmNzLnhtbAppbmRleCA5NGEyNWY3Li45ZjY2YTU0IDEwMDY0NAotLS0gYS8uaWRlYS92Y3MueG1sCisrKyBiLy5pZGVhL3Zjcy54bWwKQEAgLTIsNSArMiw2IEBACiA8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KICAgPGNvbXBvbmVudCBuYW1lPSJWY3NEaXJlY3RvcnlNYXBwaW5ncyI+CiAgICAgPG1hcHBpbmcgZGlyZWN0b3J5PSIkUFJPSkVDVF9ESVIkIiB2Y3M9IkdpdCIgLz4KKyAgICA8bWFwcGluZyBkaXJlY3Rvcnk9IiRQUk9KRUNUX0RJUiQvdHRvcnJlbnQiIHZjcz0iR2l0IiAvPgogICA8L2NvbXBvbmVudD4KIDwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS93b3Jrc3BhY2UueG1sIGIvLmlkZWEvd29ya3NwYWNlLnhtbAppbmRleCBhZTNlZjNmLi41YzIxNWNiIDEwMDY0NAotLS0gYS8uaWRlYS93b3Jrc3BhY2UueG1sCisrKyBiLy5pZGVhL3dvcmtzcGFjZS54bWwKQEAgLTUsMzggKzUsNDQgQEAKICAgPC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlTGlzdE1hbmFnZXIiPgogICAgIDxsaXN0IGRlZmF1bHQ9InRydWUiIGlkPSJmMDA4ZmUzMC0wNzExLTQyZTItYmIzMy0xN2RjZmRiYWQzODciIG5hbWU9IkNoYW5nZXMiIGNvbW1lbnQ9IiI+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvZGJuYXZpZ2F0b3IueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvZGJuYXZpZ2F0b3IueG1sIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL21pc2MueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvbWlzYy54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS92Y3MueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvdmNzLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgogICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL3dvcmtzcGFjZS54bWwiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS93b3Jrc3BhY2UueG1sIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvY3JlYXRlLnNxbCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9wb20ueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvcG9tLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzdWx0LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvTXlNZXRhT2JqZWN0SGFuZGxlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9JbnZpdGVDb250cm9sbGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL0ludml0ZVBhcmFtLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRVcGxvYWRQYXJhbS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRVcGxvYWRQYXJhbS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FbnRpdHlCYXNlLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvSW52aXRhdGlvbkVudGl0eS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL0ludml0YXRpb25NYXBwZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvSW52aXRhdGlvblNlcnZpY2UuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvSW52aXRhdGlvblNlcnZpY2UuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2Vycy5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJzLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL0ludml0YXRpb25TZXJ2aWNlSW1wbC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVG9ycmVudFNlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1RvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMiIGJlZm9yZURpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyU2VydmljZUltcGwuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvZmlsZXMvZmlsZXMudG9ycmVudCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvRmF2b3JpdGVNYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL21hcHBlci9Qcm9tb3Rpb25NYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL21hcHBlci9Ub3JyZW50TWFwcGVyLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVXNlck1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIub3JpZ2luYWwiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIub3JpZ2luYWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2lucHV0RmlsZXMubHN0IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0IiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9pbnB1dEZpbGVzLmxzdCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC90ZXN0LWNsYXNzZXMvY2xhc3NwYXRoLmluZGV4IiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0JDEuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIC8+CiAgICAgPC9saXN0PgogICAgIDxvcHRpb24gbmFtZT0iU0hPV19ESUFMT0ciIHZhbHVlPSJmYWxzZSIgLz4KICAgICA8b3B0aW9uIG5hbWU9IkhJR0hMSUdIVF9DT05GTElDVFMiIHZhbHVlPSJ0cnVlIiAvPgpAQCAtNTIsMTkgKzU4LDEzIEBACiAgIDwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IkdpdC5TZXR0aW5ncyI+CiAgICAgPG9wdGlvbiBuYW1lPSJSRUNFTlRfR0lUX1JPT1RfUEFUSCIgdmFsdWU9IiRQUk9KRUNUX0RJUiQiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJST09UX1NZTkMiIHZhbHVlPSJTWU5DIiAvPgogICA8L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJNYXJrZG93blNldHRpbmdzTWlncmF0aW9uIj4KICAgICA8b3B0aW9uIG5hbWU9InN0YXRlVmVyc2lvbiIgdmFsdWU9IjEiIC8+CiAgIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9Ik1hdmVuSW1wb3J0UHJlZmVyZW5jZXMiPgotICAgIDxvcHRpb24gbmFtZT0iaW1wb3J0aW5nU2V0dGluZ3MiPgotICAgICAgPE1hdmVuSW1wb3J0aW5nU2V0dGluZ3M+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0id29ya3NwYWNlSW1wb3J0RW5hYmxlZCIgdmFsdWU9InRydWUiIC8+Ci0gICAgICA8L01hdmVuSW1wb3J0aW5nU2V0dGluZ3M+Ci0gICAgPC9vcHRpb24+Ci0gIDwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IlByb2JsZW1zVmlld1N0YXRlIj4KLSAgICA8b3B0aW9uIG5hbWU9InNlbGVjdGVkVGFiSWQiIHZhbHVlPSJDdXJyZW50RmlsZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9InNlbGVjdGVkVGFiSWQiIHZhbHVlPSJQcm9qZWN0RXJyb3JzIiAvPgogICA8L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0SWQiIGlkPSIydlpOZk5URUZ5SEFwZHhtSFo3WTBybEpqS0IiIC8+CiAgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdExldmVsVmNzTWFuYWdlciIgc2V0dGluZ3NFZGl0ZWRNYW51YWxseT0idHJ1ZSIgLz4KQEAgLTcyLDE5ICs3MiwzMiBAQAogICAgIDxvcHRpb24gbmFtZT0iaGlkZUVtcHR5TWlkZGxlUGFja2FnZXMiIHZhbHVlPSJ0cnVlIiAvPgogICAgIDxvcHRpb24gbmFtZT0ic2hvd0xpYnJhcnlDb250ZW50cyIgdmFsdWU9InRydWUiIC8+CiAgIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlByb3BlcnRpZXNDb21wb25lbnQiPnsKLSAgJnF1b3Q7a2V5VG9TdHJpbmcmcXVvdDs6IHsKLSAgICAmcXVvdDtSdW5PbmNlQWN0aXZpdHkuT3BlblByb2plY3RWaWV3T25TdGFydCZxdW90OzogJnF1b3Q7dHJ1ZSZxdW90OywKLSAgICAmcXVvdDtSdW5PbmNlQWN0aXZpdHkuU2hvd1JlYWRtZU9uU3RhcnQmcXVvdDs6ICZxdW90O3RydWUmcXVvdDssCi0gICAgJnF1b3Q7bGFzdF9vcGVuZWRfZmlsZV9wYXRoJnF1b3Q7OiAmcXVvdDtEOi9zdHVkeS/lrabkuaDotYTmupAv5aSn5LiJ5LiLL3p5MSZxdW90OworICA8Y29tcG9uZW50IG5hbWU9IlByb3BlcnRpZXNDb21wb25lbnQiPjwhW0NEQVRBW3sKKyAgImtleVRvU3RyaW5nIjogeworICAgICJKVW5pdC5Vc2VyQ29udHJvbGxlclRlc3QuZXhlY3V0b3IiOiAiUnVuIiwKKyAgICAiUmVxdWVzdE1hcHBpbmdzUGFuZWxPcmRlcjAiOiAiMCIsCisgICAgIlJlcXVlc3RNYXBwaW5nc1BhbmVsT3JkZXIxIjogIjEiLAorICAgICJSZXF1ZXN0TWFwcGluZ3NQYW5lbFdpZHRoMCI6ICI3NSIsCisgICAgIlJlcXVlc3RNYXBwaW5nc1BhbmVsV2lkdGgxIjogIjc1IiwKKyAgICAiUnVuT25jZUFjdGl2aXR5Lk9wZW5Qcm9qZWN0Vmlld09uU3RhcnQiOiAidHJ1ZSIsCisgICAgIlJ1bk9uY2VBY3Rpdml0eS5TaG93UmVhZG1lT25TdGFydCI6ICJ0cnVlIiwKKyAgICAiU3ByaW5nIEJvb3QuTXlQcm9qZWN0QXBwbGljYXRpb24uZXhlY3V0b3IiOiAiUnVuIiwKKyAgICAiZ2l0LXdpZGdldC1wbGFjZWhvbGRlciI6ICJtYXN0ZXIiLAorICAgICJsYXN0X29wZW5lZF9maWxlX3BhdGgiOiAiRDovUFQvZWNoby1iYWNrZW5kL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UiLAorICAgICJub2RlLmpzLnNlbGVjdGVkLnBhY2thZ2UudHNsaW50IjogIihhdXRvZGV0ZWN0KSIsCisgICAgIuW6lOeUqOeoi+W6jy5NeVByb2plY3RBcHBsaWNhdGlvbi5leGVjdXRvciI6ICJSdW4iCiAgIH0KLX08L2NvbXBvbmVudD4KK31dXT48L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJSZWNlbnRzTWFuYWdlciI+CisgICAgPGtleSBuYW1lPSJDb3B5RmlsZS5SRUNFTlRfS0VZUyI+CisgICAgICA8cmVjZW50IG5hbWU9IkQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlIiAvPgorICAgICAgPHJlY2VudCBuYW1lPSJEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlciIgLz4KKyAgICA8L2tleT4KICAgICA8a2V5IG5hbWU9Ik1vdmVGaWxlLlJFQ0VOVF9LRVlTIj4KICAgICAgIDxyZWNlbnQgbmFtZT0iRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xzY2hvb2xcZWNoby1iYWNrZW5kXHNyY1xtYWluXHJlc291cmNlc1xtYXBwZXIiIC8+CiAgICAgPC9rZXk+CiAgIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlJ1bk1hbmFnZXIiIHNlbGVjdGVkPSLlupTnlKjnqIvluo8uTXlQcm9qZWN0QXBwbGljYXRpb24iPgorICA8Y29tcG9uZW50IG5hbWU9IlJ1bk1hbmFnZXIiIHNlbGVjdGVkPSJKVW5pdC5Vc2VyQ29udHJvbGxlclRlc3QiPgogICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IkJ0Q2xpZW50IiB0eXBlPSJBcHBsaWNhdGlvbiIgZmFjdG9yeU5hbWU9IkFwcGxpY2F0aW9uIiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+CiAgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jbGllbnQuQnRDbGllbnQiIC8+CiAgICAgICA8bW9kdWxlIG5hbWU9ImVjaG8tYmFja2VuZCIgLz4KQEAgLTE1Miw4ICsxNjUsMzEgQEAKICAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgogICAgICAgPC9tZXRob2Q+CiAgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IlVzZXJDb250cm9sbGVyVGVzdCIgdHlwZT0iSlVuaXQiIGZhY3RvcnlOYW1lPSJKVW5pdCIgdGVtcG9yYXJ5PSJ0cnVlIiBuYW1lSXNHZW5lcmF0ZWQ9InRydWUiPgorICAgICAgPG1vZHVsZSBuYW1lPSJlY2hvLWJhY2tlbmQiIC8+CisgICAgICA8ZXh0ZW5zaW9uIG5hbWU9ImNvdmVyYWdlIj4KKyAgICAgICAgPHBhdHRlcm4+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJQQVRURVJOIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuKiIgLz4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRUQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8L3BhdHRlcm4+CisgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDxvcHRpb24gbmFtZT0iUEFDS0FHRV9OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLlVzZXJDb250cm9sbGVyVGVzdCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iVEVTVF9PQkpFQ1QiIHZhbHVlPSJjbGFzcyIgLz4KKyAgICAgIDxtZXRob2Qgdj0iMiI+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTWFrZSIgZW5hYmxlZD0idHJ1ZSIgLz4KKyAgICAgIDwvbWV0aG9kPgorICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJNeVByb2plY3RBcHBsaWNhdGlvbiIgdHlwZT0iU3ByaW5nQm9vdEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvblR5cGUiIGZhY3RvcnlOYW1lPSJTcHJpbmcgQm9vdCIgbmFtZUlzR2VuZXJhdGVkPSJ0cnVlIj4KKyAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJTUFJJTkdfQk9PVF9NQUlOX0NMQVNTIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lk15UHJvamVjdEFwcGxpY2F0aW9uIiAvPgorICAgICAgPG1ldGhvZCB2PSIyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgogICAgIDxyZWNlbnRfdGVtcG9yYXJ5PgogICAgICAgPGxpc3Q+CisgICAgICAgIDxpdGVtIGl0ZW12YWx1ZT0iSlVuaXQuVXNlckNvbnRyb2xsZXJUZXN0IiAvPgogICAgICAgICA8aXRlbSBpdGVtdmFsdWU9IuW6lOeUqOeoi+W6jy5NeVByb2plY3RBcHBsaWNhdGlvbiIgLz4KICAgICAgICAgPGl0ZW0gaXRlbXZhbHVlPSJKVW5pdC5Ub3JyZW50Q29udHJvbGxlclRlc3QiIC8+CiAgICAgICA8L2xpc3Q+CkBAIC0xNzAsNCArMjA2LDE1IEBACiAgICAgPC90YXNrPgogICAgIDxzZXJ2ZXJzIC8+CiAgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlZjcy5Mb2cuVGFicy5Qcm9wZXJ0aWVzIj4KKyAgICA8b3B0aW9uIG5hbWU9IlRBQl9TVEFURVMiPgorICAgICAgPG1hcD4KKyAgICAgICAgPGVudHJ5IGtleT0iTUFJTiI+CisgICAgICAgICAgPHZhbHVlPgorICAgICAgICAgICAgPFN0YXRlIC8+CisgICAgICAgICAgPC92YWx1ZT4KKyAgICAgICAgPC9lbnRyeT4KKyAgICAgIDwvbWFwPgorICAgIDwvb3B0aW9uPgorICA8L2NvbXBvbmVudD4KIDwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2hvLWJhY2tlbmQuaW1sIGIvZWNoby1iYWNrZW5kLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGNlNzIyCi0tLSAvZGV2L251bGwKKysrIGIvZWNoby1iYWNrZW5kLmltbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IkFkZGl0aW9uYWxNb2R1bGVFbGVtZW50cyI+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIiBkdW1iPSJ0cnVlIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYy9tYWluL3Jlc291cmNlcyIgdHlwZT0iamF2YS1yZXNvdXJjZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbG9ncy9teWFwcC5sb2cgYi9sb2dzL215YXBwLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbG9ncy9teWFwcC5sb2cKZGlmZiAtLWdpdCBhL3BvbS54bWwgYi9wb20ueG1sCmluZGV4IDIwYjhlNzEuLjYwMmUxZGIgMTAwNjQ0Ci0tLSBhL3BvbS54bWwKKysrIGIvcG9tLnhtbApAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CiAgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCiAgICAgPGdyb3VwSWQ+Z3JvdXBJZDwvZ3JvdXBJZD4KQEAgLTEwLDE0ICsxMCwxNCBAQAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuNi4wPC92ZXJzaW9uPiA8IS0tIOS9v+eUqOS9oOW4jOacm+eahFNwcmluZyBCb29054mI5pysIC0tPgotICAgICAgICA8cmVsYXRpdmVQYXRoIC8+IDwhLS0gbG9va3VwIHBhcmVudCBmcm9tIHJlcG9zaXRvcnkgLS0+CisgICAgICAgIDx2ZXJzaW9uPjIuNi4wPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoLz4gPCEtLSBsb29rdXAgcGFyZW50IGZyb20gcmVwb3NpdG9yeSAtLT4KICAgICA8L3BhcmVudD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8bWF2ZW4uY29tcGlsZXIuc291cmNlPjE3PC9tYXZlbi5jb21waWxlci5zb3VyY2U+CiAgICAgICAgIDxtYXZlbi5jb21waWxlci50YXJnZXQ+MTc8L21hdmVuLmNvbXBpbGVyLnRhcmdldD4KICAgICAgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+Ci0gICAgICAgIDxzYS10b2tlbi52ZXJzaW9uPjEuMzcuMDwvc2EtdG9rZW4udmVyc2lvbj4KICAgICA8L3Byb3BlcnRpZXM+CiAKICAgICA8ZGVwZW5kZW5jaWVzPgpAQCAtNzgsMTYgKzc4LDYgQEAKICAgICAgICAgICAgIDxncm91cElkPmphdmF4LnhtbC5iaW5kPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4Yi1hcGk8L2FydGlmYWN0SWQ+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLnhpYW95bWluPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+a25pZmU0ai1vcGVuYXBpMy1qYWthcnRhLXNwcmluZy1ib290LXN0YXJ0ZXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjUuMDwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmphdmF4LnZhbGlkYXRpb248L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD52YWxpZGF0aW9uLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC4xLkZpbmFsPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDwhLS0gU3ByaW5nIFdlYiBNVkMgLS0+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KQEAgLTExOCwxNyArMTA4LDExIEBACiAgICAgICAgICAgICA8dmVyc2lvbj4xLjE4LjMwPC92ZXJzaW9uPiA8IS0tIOehruS/neS9v+eUqOeahOaYr+acgOaWsOeJiOacrCAtLT4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLnBhZ2VoZWxwZXI8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYWdlaGVscGVyLXNwcmluZy1ib290LXN0YXJ0ZXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjQuNzwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCiAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbGY0ai1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjcuMzI8L3ZlcnNpb24+IDwhLS0g54mI5pys5Y+v5Lul5qC55o2u6ZyA6KaB6LCD5pW0IC0tPgorICAgICAgICAgICAgPHZlcnNpb24+MS43LjMwPC92ZXJzaW9uPiA8IS0tIOeJiOacrOWPr+S7peagueaNrumcgOimgeiwg+aVtCAtLT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNoLnFvcy5sb2diYWNrPC9ncm91cElkPgpAQCAtMTM2LDYgKzEyMCw3IEBACiAgICAgICAgICAgICA8dmVyc2lvbj4xLjIuMzwvdmVyc2lvbj4gPCEtLSDniYjmnKzlj6/ku6XmoLnmja7pnIDopoHosIPmlbQgLS0+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CisKICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtZmlsZXVwbG9hZDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtZmlsZXVwbG9hZDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNDwvdmVyc2lvbj4KQEAgLTE0NSw3ICsxMzAsMTEgQEAKICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItdmFsaWRhdGlvbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmJhaWR1YmNlPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cWlhbmZhbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjAuMS4xPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci13ZWJmbHV4PC9hcnRpZmFjdElkPgpAQCAtMTU2LDE4ICsxNDUsNTEgQEAKICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTI8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLQorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5tb2NraXRvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bW9ja2l0by1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci10ZXN0PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnBlcnNpc3RlbmNlPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amFrYXJ0YS5wZXJzaXN0ZW5jZS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjEuMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1kYXRhLWpwYTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+amFrYXJ0YS50cmFuc2FjdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpha2FydGEudHJhbnNhY3Rpb24tYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLjA8L3ZlcnNpb24+IDwhLS0g5L2/55So5pyA5paw54mI5pysIC0tPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuaGliZXJuYXRlPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aGliZXJuYXRlLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj41LjYuNy5GaW5hbDwvdmVyc2lvbj4gPCEtLSDkuI4gSmFrYXJ0YSDlhbzlrrnnmoTniYjmnKwgLS0+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm15c3FsPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bXlzcWwtY29ubmVjdG9yLWphdmE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj44LjAuMjc8L3ZlcnNpb24+IDwhLS0g5L2/55So6YCC5ZCI5L2g55qE54mI5pysIC0tPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LWNvbW1vbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KICAgICAgICAgPCEtLSB0dG9ycmVudCAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KQEAgLTIwNCwzMCArMjI2LDI2IEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dG9ycmVudC10cmFja2VyPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKwogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIueGlhb3ltaW48L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5rbmlmZTRqLW9wZW5hcGkzLWpha2FydGEtc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuNS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5wYWdlaGVscGVyPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGFnZWhlbHBlci1zcHJpbmctYm9vdC1zdGFydGVyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS40Ljc8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNuLmRldjMzPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2EtdG9rZW4tc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2EtdG9rZW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjM4LjA8L3ZlcnNpb24+IDwhLS0g6K+356Gu6K6k5L2/55So5pyA5paw54mI5pys5oiW5LiO5L2g55qEU3ByaW5nIEJvb3TniYjmnKzljLnphY0gLS0+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogCiAKLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmpha2FydGEucGVyc2lzdGVuY2U8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWthcnRhLnBlcnNpc3RlbmNlLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMS4wPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KICAgICA8L2RlcGVuZGVuY2llcz4KIAogCisKKwogICAgIDxidWlsZD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICA8cGx1Z2luPgpAQCAtMjcyLDggKzI5MCw3IEBACiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPCEtLXN1cHByZXNzCi0gICAgICAgICAgICAgICAgICAgIFVucmVzb2x2ZWRNYXZlblByb3BlcnR5IC0tPgorICAgICAgICAgICAgICAgICAgICA8IS0tc3VwcHJlc3MgVW5yZXNvbHZlZE1hdmVuUHJvcGVydHkgLS0+CiAgICAgICAgICAgICAgICAgICAgIDxhcmdMaW5lPiR7c3VyZWZpcmVBcmdMaW5lfTwvYXJnTGluZT4KICAgICAgICAgICAgICAgICAgICAgPHNraXBUZXN0cz5mYWxzZTwvc2tpcFRlc3RzPgogICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CkBAIC0yOTIsMjIgKzMwOSwxNCBAQAogICAgICAgICAgICAgPC9wbHVnaW4+CiAKICAgICAgICAgPC9wbHVnaW5zPgotPCEtLSAgICAgICAgICAgICAgICA8cmVzb3VyY2VzPi0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgPHJlc291cmNlPi0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5Pi0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4tLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi54bWw8L2luY2x1ZGU+LS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4tLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2U+LS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICA8cmVzb3VyY2U+LS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5saWJzPC9kaXJlY3Rvcnk+LS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPi0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qLmphcjwvaW5jbHVkZT4tLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPi0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgPC9yZXNvdXJjZT4tLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2VzPi0tPgotCi0KKyAgICAgICAgPHJlc291cmNlcz4KKyAgICAgICAgICAgIDxyZXNvdXJjZT4KKyAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL2phdmE8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPioqLyoueG1sPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICA8L3Jlc291cmNlPgorICAgICAgICA8L3Jlc291cmNlcz4KICAgICA8L2J1aWxkPgogCiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmphdmEKaW5kZXggZWI1ODA4Mi4uNDljZDVmMCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhCkBAIC01LDE0ICs1LDEwIEBACiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LlNwcmluZ0FwcGxpY2F0aW9uOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5hdXRvY29uZmlndXJlLlNwcmluZ0Jvb3RBcHBsaWNhdGlvbjsKIAotCi0KIEBTcHJpbmdCb290QXBwbGljYXRpb24KIEBNYXBwZXJTY2FuKCJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyIikgIC8vIOaJq+aPjyBNYXBwZXIg5o6l5Y+jCi0KIHB1YmxpYyBjbGFzcyBNeVByb2plY3RBcHBsaWNhdGlvbiB7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTcHJpbmdBcHBsaWNhdGlvbi5ydW4oTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MsIGFyZ3MpOwogICAgIH0KIH0KLQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZWIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSwzMyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuQ29tbWVudHM7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuQ29tbWVudFNlcnZpY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworQFJlc3RDb250cm9sbGVyCitAUmVxdWVzdE1hcHBpbmcoIi9lY2hvL2ZvcnVtL3Bvc3RzIikKK3B1YmxpYyBjbGFzcyBDb21tZW50Q29udHJvbGxlciB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBDb21tZW50U2VydmljZSBjb21tZW50U2VydmljZTsKKworICAgIC8vIOa3u+WKoOivhOiuugorICAgIEBQb3N0TWFwcGluZygiL3twb3N0X2lkfS9jb21tZW50cyIpCisgICAgcHVibGljIFN0cmluZyBhZGRDb21tZW50KEBQYXRoVmFyaWFibGUoInBvc3RfaWQiKSBMb25nIHBvc3RJZCwgQFJlcXVlc3RCb2R5IENvbW1lbnRzIGNvbW1lbnQpIHsKKyAgICAgICAgLy8g5re75Yqg6K+E6K66CisgICAgICAgIGNvbW1lbnRTZXJ2aWNlLmFkZENvbW1lbnQocG9zdElkLCBjb21tZW50KTsKKyAgICAgICAgcmV0dXJuICJDb21tZW50IGFkZGVkIHN1Y2Nlc3NmdWxseSEiOworICAgIH0KKworICAgIC8v6I635Y+W5omA5pyJ6K+E6K66CisgICAgQEdldE1hcHBpbmcoIi97cG9zdF9pZH0vZ2V0QWxsQ29tbWVudHMiKQorICAgIHB1YmxpYyBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldENvbW1lbnRzQnlQb3N0SWQoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkKSB7CisgICAgICAgIC8vIOiOt+WPluivhOiuuuW5tuWhq+WFheeUqOaIt+S/oeaBrworICAgICAgICByZXR1cm4gY29tbWVudFNlcnZpY2UuZ2V0Q29tbWVudHNCeVBvc3RJZChwb3N0SWQpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWQwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJEeW5hbWljOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkR5bmFtaWNTZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitAUmVzdENvbnRyb2xsZXIKK0BSZXF1ZXN0TWFwcGluZygiL2VjaG8vZHluYW1pYyIpCitwdWJsaWMgY2xhc3MgRHluYW1pY0NvbnRyb2xsZXIgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgRHluYW1pY1NlcnZpY2UgZHluYW1pY1NlcnZpY2U7CisKKyAgICAvLyDliJvlu7rlpb3lj4vliqjmgIHmjqXlj6MKKyAgICBAUG9zdE1hcHBpbmcoIi97dXNlcl9pZH0vY3JlYXRlRHluYW1pYyIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY3JlYXRlRHluYW1pYyhAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gInRpdGxlIiwgcmVxdWlyZWQgPSBmYWxzZSkgU3RyaW5nIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSh2YWx1ZSA9ICJjb250ZW50IikgU3RyaW5nIGNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gImltYWdlX3VybCIsIHJlcXVpcmVkID0gZmFsc2UpIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7CisgICAgICAgIHJldHVybiBkeW5hbWljU2VydmljZS5jcmVhdGVEeW5hbWljKHVzZXJJZCwgdGl0bGUsIGNvbnRlbnQsIGltYWdlRmlsZXMpOworICAgIH0KKworICAgIC8v5Yig6Zmk5aW95Y+L5Yqo5oCBCisgICAgQERlbGV0ZU1hcHBpbmcoIi9tZS9kZWxldGVEeW5hbWljL3tkeW5hbWljX2lkfSIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PFN0cmluZz4gZGVsZXRlRHluYW1pYyhAUGF0aFZhcmlhYmxlKCJkeW5hbWljX2lkIikgTG9uZyBkeW5hbWljSWQpIHsKKyAgICAgICAgZHluYW1pY1NlcnZpY2UuZGVsZXRlRHluYW1pYyhkeW5hbWljSWQpOworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2soIuWKqOaAgeWIoOmZpOaIkOWKnyIpOworICAgIH0KKworICAgIC8v5aW95Y+L5Yqo5oCB6K+E6K66CisgICAgQFBvc3RNYXBwaW5nKCIve3VzZXJfaWR9L2ZlZWRzL3tkeW5hbWljX2lkfS9jb21tZW50cyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGFkZENvbW1lbnQoCisgICAgICAgICAgICBAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQsCisgICAgICAgICAgICBAUGF0aFZhcmlhYmxlKCJkeW5hbWljX2lkIikgTG9uZyBkeW5hbWljSWQsCisgICAgICAgICAgICBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgU3RyaW5nPiBjb250ZW50KSB7CisKKyAgICAgICAgU3RyaW5nIGNvbW1lbnRDb250ZW50ID0gY29udGVudC5nZXQoImNvbnRlbnQiKTsgIC8vIOiOt+WPluivhOiuuuWGheWuuQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZHluYW1pY1NlcnZpY2UuYWRkQ29tbWVudCh1c2VySWQsIGR5bmFtaWNJZCwgY29tbWVudENvbnRlbnQpOworCisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7CisgICAgfQorCisgICAgLy/ojrflj5bmn5DkuKrlpb3lj4vnmoTmiYDmnInliqjmgIEKKyAgICBAR2V0TWFwcGluZygiL3t1c2VyX2lkfS9nZXRBZHluYW1pYyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldEFsbFVzZXJEeW5hbWljcyhAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGR5bmFtaWNTZXJ2aWNlLmdldEFsbFVzZXJEeW5hbWljcyh1c2VySWQpOworCisgICAgICAgIGlmIChyZXNwb25zZSA9PSBudWxsIHx8IHJlc3BvbnNlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm5vQ29udGVudCgpLmJ1aWxkKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyDov5Tlm57lk43lupQKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBAR2V0TWFwcGluZygiL3t1c2VyX2lkfS9nZXRBbGxEeW5hbWljcyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3MoQFBhdGhWYXJpYWJsZSgidXNlcl9pZCIpIExvbmcgdXNlcklkKSB7CisgICAgICAgIC8vIOiOt+WPluW9k+WJjeeUqOaIt+aJgOacieWlveWPi+eahElECisgICAgICAgIExpc3Q8TG9uZz4gZnJpZW5kSWRzID0gZHluYW1pY1NlcnZpY2UuZ2V0QWxsRnJpZW5kSWRzKHVzZXJJZCk7CisgICAgICAgIGZyaWVuZElkcy5hZGQodXNlcklkKTsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGR5bmFtaWNTZXJ2aWNlLmdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3MoZnJpZW5kSWRzKTsKKworICAgICAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCB8fCByZXNwb25zZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5ub0NvbnRlbnQoKS5idWlsZCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICAvL+eCuei1nuWlveWPi+WKqOaAgQorICAgIEBQb3N0TWFwcGluZygiL2xpa2UiKQorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxTdHJpbmc+IGxpa2VEeW5hbWljKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdC5nZXQoInVzZXJJZCIpOworICAgICAgICBMb25nIGR5bmFtaWNJZCA9IHJlcXVlc3QuZ2V0KCJkeW5hbWljSWQiKTsKKyAgICAgICAgLy8g5omn6KGM54K56LWeCisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGR5bmFtaWNTZXJ2aWNlLmxpa2VEeW5hbWljKHVzZXJJZCwgZHluYW1pY0lkKTsKKworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKCJMaWtlIHN1Y2Nlc3NmdWwiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5iYWRSZXF1ZXN0KCkuYm9keSgiTGlrZSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBEZWxldGVNYXBwaW5nKCIvdW5saWtlIikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8U3RyaW5nPiB1bmxpa2VEeW5hbWljKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdC5nZXQoInVzZXJJZCIpOworICAgICAgICBMb25nIGR5bmFtaWNJZCA9IHJlcXVlc3QuZ2V0KCJkeW5hbWljSWQiKTsKKworICAgICAgICAvLyDmiafooYzlj5bmtojngrnotZ4KKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZHluYW1pY1NlcnZpY2UudW5saWtlRHluYW1pYyh1c2VySWQsIGR5bmFtaWNJZCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygiVW5saWtlIHN1Y2Nlc3NmdWwiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5iYWRSZXF1ZXN0KCkuYm9keSgiVW5saWtlIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorCisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODMwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlci5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwQ29tbWVudHM7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuR3JvdXBTZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitAUmVzdENvbnRyb2xsZXIKK0BSZXF1ZXN0TWFwcGluZygiL2VjaG8vZ3JvdXBzIikKK3B1YmxpYyBjbGFzcyBHcm91cENvbnRyb2xsZXIgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgR3JvdXBTZXJ2aWNlIGdyb3VwU2VydmljZTsKKworICAgIEBQb3N0TWFwcGluZygiL2NyZWF0ZUdyb3VwIikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlR3JvdXAoQFJlcXVlc3RCb2R5IEdyb3VwIGdyb3VwUmVxdWVzdCkgeworICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLmlrnms5XliJvlu7rlsI/nu4QKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBncm91cCBuYW1lOiAiICsgZ3JvdXBSZXF1ZXN0LmdldEdyb3VwTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIGdyb3VwU2VydmljZS5jcmVhdGVHcm91cChncm91cFJlcXVlc3QpOworICAgIH0KKworCisgICAgLy8g5Yqg5YWl5bCP57uE5o6l5Y+jCisgICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9qb2luIikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gam9pbkdyb3VwKEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7CisgICAgICAgIHJldHVybiBncm91cFNlcnZpY2Uuam9pbkdyb3VwKGdyb3VwSWQsIHVzZXJJZCk7CisgICAgfQorCisgICAgLy8g6YCA5Ye65bCP57uE5o6l5Y+jCisgICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9sZWF2ZSIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxlYXZlR3JvdXAoQFBhdGhWYXJpYWJsZSgiZ3JvdXBfaWQiKSBMb25nIGdyb3VwSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7CisgICAgICAgIHJldHVybiBncm91cFNlcnZpY2UubGVhdmVHcm91cChncm91cElkLCB1c2VySWQpOworICAgIH0KKworICAgIC8vIOiOt+WPluWwj+e7hOaIkOWRmOaOpeWPoworICAgIEBHZXRNYXBwaW5nKCIve2dyb3VwX2lkfS9tZW1iZXJzIikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0R3JvdXBNZW1iZXJzKEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkKSB7CisgICAgICAgIHJldHVybiBncm91cFNlcnZpY2UuZ2V0R3JvdXBNZW1iZXJzKGdyb3VwSWQpOworICAgIH0KKworICAgIC8v5Y+R5biD5biW5a2QCisgICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9jcmVhdGVQb3N0IikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlUG9zdCgKKyAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkLAorICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgidXNlcl9pZCIpIExvbmcgdXNlcklkLAorICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgiY29udGVudCIpIFN0cmluZyBjb250ZW50LAorICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgidGl0bGUiKSBTdHJpbmcgdGl0bGUsCisgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gImltYWdlcyIsIHJlcXVpcmVkID0gZmFsc2UpIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7CisKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgY29udGVudCwgdGl0bGUsIGltYWdlRmlsZXMpOworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOworICAgIH0KKworICAgIC8v6I635Y+W5p+Q5Liq5bCP57uE5YaF55qE5omA5pyJ5biW5a2QCisgICAgQEdldE1hcHBpbmcoIi97Z3JvdXBfaWR9L2dldEFsbFBvc3RzIikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsUG9zdHMoQFBhdGhWYXJpYWJsZSgiZ3JvdXBfaWQiKSBMb25nIGdyb3VwSWQpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5nZXRBbGxQb3N0cyhncm91cElkKTsKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICAvL+iOt+WPluaJgOacieWwj+e7hOWQjeensAorICAgIEBQb3N0TWFwcGluZygiL2dldEFsbEdyb3VwcyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHNlYXJjaEdyb3VwcyhAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5zZWFyY2hHcm91cHMocGFyYW1zKTsKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICAvLyDngrnotZ7luJblrZAKKyAgICBAUG9zdE1hcHBpbmcoIi97Z3JvdXBfcG9zdF9pZH0vbGlrZSIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxpa2VQb3N0KAorICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgiZ3JvdXBfcG9zdF9pZCIpIExvbmcgZ3JvdXBQb3N0SWQpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5saWtlUG9zdChncm91cFBvc3RJZCk7CisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7CisgICAgfQorCisgICAgLy8g5Y+W5raI54K56LWeCisgICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX3Bvc3RfaWR9L3VubGlrZSIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHVubGlrZVBvc3QoCisgICAgICAgICAgICBAUGF0aFZhcmlhYmxlKCJncm91cF9wb3N0X2lkIikgTG9uZyBncm91cFBvc3RJZCkgeworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZ3JvdXBTZXJ2aWNlLnVubGlrZVBvc3QoZ3JvdXBQb3N0SWQpOworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOworICAgIH0KKworICAgIC8vIOa3u+WKoOivhOiuuuaOpeWPoworICAgIEBQb3N0TWFwcGluZygiL3tncm91cF9wb3N0X2lkfS9jb21tZW50IikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gYWRkQ29tbWVudCgKKworICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgiZ3JvdXBfcG9zdF9pZCIpIExvbmcgcG9zdElkLAorICAgICAgICAgICAgQFJlcXVlc3RCb2R5IEdyb3VwQ29tbWVudHMgY29tbWVudCkgeworCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBncm91cFNlcnZpY2UuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpOworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4MTI0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSw0MiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkxldmVsU2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitAUmVxdWVzdE1hcHBpbmcoIi9lY2hvL2xldmVsIikKK0BSZXN0Q29udHJvbGxlcgorcHVibGljIGNsYXNzIExldmVsQ29udHJvbGxlciB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBMZXZlbFNlcnZpY2UgbGV2ZWxTZXJ2aWNlOworCisgICAgQEdldE1hcHBpbmcoIi9nZXRFeHBlcmllbmNlIikKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRFeHBlcmllbmNlKEBSZXF1ZXN0UGFyYW0gTG9uZyB1c2VyX2lkKSB7CisgICAgICAgIHJldHVybiBsZXZlbFNlcnZpY2UuZ2V0VXNlckV4cGVyaWVuY2UodXNlcl9pZCk7CisgICAgfQorCisgICAgQFBvc3RNYXBwaW5nKCIvdXBkYXRlRXhwZXJpZW5jZSIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdXBkYXRlRXhwZXJpZW5jZShAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMpIHsKKyAgICAgICAgTG9uZyB1c2VySWQgPSBMb25nLnZhbHVlT2YocGFyYW1zLmdldCgidXNlcl9pZCIpLnRvU3RyaW5nKCkpOworICAgICAgICBJbnRlZ2VyIGV4cGVyaWVuY2UgPSBJbnRlZ2VyLnZhbHVlT2YocGFyYW1zLmdldCgiZXhwZXJpZW5jZSIpLnRvU3RyaW5nKCkpOworICAgICAgICBTdHJpbmcgc291cmNlID0gcGFyYW1zLmdldCgic291cmNlIikudG9TdHJpbmcoKTsKKworICAgICAgICByZXR1cm4gbGV2ZWxTZXJ2aWNlLnVwZGF0ZUV4cGVyaWVuY2UodXNlcklkLCBleHBlcmllbmNlLCBzb3VyY2UpOworICAgIH0KKworICAgIC8vIOajgOafpeeUqOaIt+aYr+WQpua7oei2s+WNh+e6p+adoeS7tgorICAgIEBHZXRNYXBwaW5nKCIvdXBncmFkZS1jaGVjayIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY2hlY2tVcGdyYWRlKEBSZXF1ZXN0UGFyYW0gTG9uZyB1c2VyX2lkKSB7CisgICAgICAgIHJldHVybiBsZXZlbFNlcnZpY2UuY2hlY2tVcGdyYWRlKHVzZXJfaWQpOworICAgIH0KKworICAgIEBQb3N0TWFwcGluZygiL3VwZ3JhZGVzIikKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1cGdyYWRlVXNlckxldmVsKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QpIHsKKyAgICAgICAgTG9uZyB1c2VySWQgPSBMb25nLnZhbHVlT2YocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKKyAgICAgICAgQm9vbGVhbiBjYW5VcGdyYWRlID0gKEJvb2xlYW4pIHJlcXVlc3QuZ2V0KCJjYW5fdXBncmFkZSIpOworICAgICAgICByZXR1cm4gbGV2ZWxTZXJ2aWNlLnVwZ3JhZGVVc2VyTGV2ZWwodXNlcklkLCBjYW5VcGdyYWRlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Bvc3RDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Bvc3RDb250cm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmY2JlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXIuamF2YQpAQCAtMCwwICsxLDk0IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qb3N0OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlBvc3RTZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOworCitAUmVzdENvbnRyb2xsZXIKK0BSZXF1ZXN0TWFwcGluZygiL2VjaG8vZm9ydW0vcG9zdHMiKQorcHVibGljIGNsYXNzIFBvc3RDb250cm9sbGVyIHsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFBvc3RTZXJ2aWNlIHBvc3RTZXJ2aWNlOworCisgICAgLy/liJvlu7rmlrDluJblrZDvvIjlt7LlrozmiJDvvIkKKyAgICBAUG9zdE1hcHBpbmcoIi97dXNlcl9pZH0vY3JlYXRlUG9zdCIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY3JlYXRlUG9zdCgKKyAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCwKKyAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0odmFsdWUgPSAicG9zdENvbnRlbnQiKSBTdHJpbmcgcG9zdENvbnRlbnQsCisgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gInRpdGxlIiwgcmVxdWlyZWQgPSBmYWxzZSkgU3RyaW5nIHRpdGxlLAorICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSh2YWx1ZSA9ICJpbWFnZVVybCIpIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7CisgICAgICAgIHJldHVybiBwb3N0U2VydmljZS5jcmVhdGVQb3N0KHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBpbWFnZUZpbGVzKTsKKyAgICB9CisKKyAgICAvL+e8lui+keW4luWtkO+8iOW3suWujOaIkO+8iQorICAgIEBQdXRNYXBwaW5nKCIve3Bvc3RfaWR9L2VkaXRQb3N0IikKKyAgICBwdWJsaWMgU3RyaW5nIHVwZGF0ZVBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkLCBAUmVxdWVzdEJvZHkgUG9zdCBwb3N0KSB7CisgICAgICAgIHBvc3RTZXJ2aWNlLnVwZGF0ZVBvc3QocG9zdElkLCBwb3N0KTsKKyAgICAgICAgcmV0dXJuICJQb3N0IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ISI7CisgICAgfQorCisgICAgLy/liKDpmaTluJblrZDvvIjlt7LlrozmiJDvvIkKKyAgICBARGVsZXRlTWFwcGluZygiL3twb3N0X2lkfS9kZWxldGVQb3N0IikKKyAgICBwdWJsaWMgU3RyaW5nIGRlbGV0ZVBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkKSB7CisgICAgICAgIHBvc3RTZXJ2aWNlLmRlbGV0ZVBvc3QocG9zdElkKTsKKyAgICAgICAgcmV0dXJuICJQb3N0IGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5ISI7CisgICAgfQorCisgICAgLy/ngrnotZ7luJblrZDvvIjlt7LlrozmiJDvvIkKKyAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vbGlrZSIpCisgICAgcHVibGljIFN0cmluZyBsaWtlUG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSkgeworCisgICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7CisgICAgICAgIHBvc3RTZXJ2aWNlLmxpa2VQb3N0KHBvc3RJZCwgdXNlcklkKTsKKworICAgICAgICByZXR1cm4gIlBvc3QgbGlrZWQgc3VjY2Vzc2Z1bGx5ISI7CisgICAgfQorCisgICAgLy/lj5bmtojngrnotZ7vvIjlt7LlrozmiJDvvIkKKyAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vdW5saWtlIikKKyAgICBwdWJsaWMgU3RyaW5nIHVubGlrZVBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkLCBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdEJvZHkpIHsKKyAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0Qm9keS5nZXQoInVzZXJfaWQiKTsKKyAgICAgICAgcG9zdFNlcnZpY2UudW5saWtlUG9zdChwb3N0SWQsIHVzZXJJZCk7CisKKyAgICAgICAgcmV0dXJuICJQb3N0IHVubGlrZWQgc3VjY2Vzc2Z1bGx5ISI7CisgICAgfQorCisgICAgLy/ojrflj5bluJblrZDliJfooajvvIjlt7LlrozmiJDvvIkKKyAgICBAR2V0TWFwcGluZygiL2dldEFsbFBvc3RzIikKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxQb3N0cygpIHsKKyAgICAgICAgcmV0dXJuIHBvc3RTZXJ2aWNlLmdldEFsbFBvc3RzKCk7ICAvLyDosIPnlKjmnI3liqHlsYLnmoQgZ2V0QWxsUG9zdHMg5pa55rOVCisgICAgfQorCisgICAgQEdldE1hcHBpbmcoIi97cG9zdElkfS9nZXRQb3N0IikKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQb3N0QnlJZChAUGF0aFZhcmlhYmxlIExvbmcgcG9zdElkKSB7CisgICAgICAgIHJldHVybiBwb3N0U2VydmljZS5nZXRQb3N0QnlJZChwb3N0SWQpOworICAgIH0KKworCisgICAgLy/mlLbol4/luJblrZDvvIjlt7LlrozmiJDvvIkKKyAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vY29sbGVjdCIpCisgICAgcHVibGljIFN0cmluZyBjb2xsZWN0UG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSkgeworICAgICAgICBMb25nIHVzZXJJZCA9IHJlcXVlc3RCb2R5LmdldCgidXNlcl9pZCIpOworICAgICAgICBwb3N0U2VydmljZS5jb2xsZWN0UG9zdChwb3N0SWQsIHVzZXJJZCk7CisKKyAgICAgICAgcmV0dXJuICJQb3N0IGNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIjsKKyAgICB9CisKKworICAgIC8v5Y+W5raI5pS26JeP77yI5bey5a6M5oiQ77yJCisgICAgQERlbGV0ZU1hcHBpbmcoIi97cG9zdF9pZH0vdW5jb2xsZWN0IikKKyAgICBwdWJsaWMgU3RyaW5nIHVuY29sbGVjdFBvc3QoQFBhdGhWYXJpYWJsZSgicG9zdF9pZCIpIExvbmcgcG9zdElkLCBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdEJvZHkpIHsKKyAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0Qm9keS5nZXQoInVzZXJfaWQiKTsKKyAgICAgICAgcG9zdFNlcnZpY2UudW5jb2xsZWN0UG9zdChwb3N0SWQsIHVzZXJJZCk7CisgICAgICAgIHJldHVybiAiUG9zdCB1bmNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIjsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDFiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSw2OCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlRhc2tTZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK0BSZXN0Q29udHJvbGxlcgorQFJlcXVlc3RNYXBwaW5nKCIvZWNoby90YXNrL3R1dG9yaWFsIikKK3B1YmxpYyBjbGFzcyBUYXNrQ29udHJvbGxlciB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBUYXNrU2VydmljZSB0YXNrU2VydmljZTsKKworICAgIC8v6I635Y+W5b2T5YmN55So5oi355qE5paw5omL5Lu75Yqh5YiX6KGoCisgICAgQEdldE1hcHBpbmcoIi9nZXRBbGxUYXNrcyIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsVGFza3MoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB0YXNrU2VydmljZS5nZXRBbGxUYXNrc0ZvclVzZXIodXNlcklkKTsKKyAgICB9CisKKyAgICBAUG9zdE1hcHBpbmcoIi91cGRhdGVTdGF0dXMiKQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZVRhc2tTdGF0dXMoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7CisgICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0YXNrU2VydmljZS51cGRhdGVUYXNrU3RhdHVzKHVzZXJJZCwgdGFza0lkKTsKKyAgICB9CisKKyAgICAvL+iOt+WPluW9k+WJjee7j+mqjOWSjOS7u+WKoeWlluWKsQorICAgIEBHZXRNYXBwaW5nKCIvZ2V0RXhwZXJpZW5jZSIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0RXhwZXJpZW5jZShAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHRhc2tTZXJ2aWNlLmdldFVzZXJFeHBlcmllbmNlKHVzZXJJZCk7CisgICAgfQorCisgICAgLy/ojrflj5blvZPliY3nmoTmjIflvJXmraXpqqQKKyAgICBAR2V0TWFwcGluZygiL2dldE5ld1N0ZXAiKQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldE5ld1N0ZXAoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB0YXNrU2VydmljZS5nZXROZXdTdGVwKHVzZXJJZCk7CisgICAgfQorCisgICAgLy/mm7TmlrDov5vluqYKKyAgICBAUG9zdE1hcHBpbmcoIi91cGRhdGVQcm9ncmVzcyIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdXBkYXRlUHJvZ3Jlc3MoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7CisgICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7CisgICAgICAgIEludGVnZXIgcHJvZ3Jlc3MgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0KCJwcm9ncmVzcyIpLnRvU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdGFza1NlcnZpY2UudXBkYXRlVGFza1Byb2dyZXNzKHVzZXJJZCwgdGFza0lkLCBwcm9ncmVzcyk7CisgICAgfQorCisgICAgLy/pooblj5bku7vliqHlpZblirEKKyAgICBAUG9zdE1hcHBpbmcoIi9yZXdhcmRDbGFpbSIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gcmV3YXJkQ2xhaW0oQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7CisgICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0YXNrU2VydmljZS5jbGFpbVJld2FyZCh1c2VySWQsIHRhc2tJZCk7CisgICAgfQorCisgICAgLy/mo4Dmn6Xku7vliqHlpZblirHnirbmgIEKKyAgICBAUG9zdE1hcHBpbmcoIi9yZXdhcmRSZXZpZXciKQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHJld2FyZFJldmlldyhAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKKyAgICAgICAgU3RyaW5nIHRhc2tJZCA9IHJlcXVlc3QuZ2V0KCJ0YXNrX2lkIikudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRhc2tTZXJ2aWNlLmNoZWNrUmV3YXJkU3RhdHVzKHVzZXJJZCwgdGFza0lkKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEKaW5kZXggYWNkYTQwMy4uMjI0YzEzOCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuamF2YQpAQCAtMSwxOTAgKzEsMTU1IEBACiBwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwogCi1pbXBvcnQgY24uZGV2MzMuc2F0b2tlbi5hbm5vdGF0aW9uLlNhQ2hlY2tMb2dpbjsKLWltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuY29yZS5jb25kaXRpb25zLnF1ZXJ5LlF1ZXJ5V3JhcHBlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuUGFnZVV0aWw7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0by5wYXJhbS5Ub3JyZW50UGFyYW07Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0by52by5Ub3JyZW50Vk87Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlZlcmlmaWNhdGlvblRva2VuTWFwcGVyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlZlcmlmaWNhdGlvblRva2VuOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkVtYWlsU2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkR5bmFtaWNTZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlRhc2tTZXJ2aWNlOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJTZXJ2aWNlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5SZXN1bHQ7Ci1pbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGk7Ci1pbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlPcGVyYXRpb247Ci1pbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlQYXJhbTsKLWltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5PcGVyYXRpb247Ci1pbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMubWVkaWEuQ29udGVudDsKLWltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7Ci1pbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMucmVzcG9uc2VzLkFwaVJlc3BvbnNlOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuSHR0cFN0YXR1czsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5BdXRoZW50aWNhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5Vc2VybmFtZVBhc3N3b3JkQXV0aGVudGljYXRpb25Ub2tlbjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuQXV0aGVudGljYXRpb247Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5jb250ZXh0LlNlY3VyaXR5Q29udGV4dEhvbGRlcjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKIAotaW1wb3J0IGphdmF4LmFubm90YXRpb24uUmVzb3VyY2U7Ci1pbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7Ci1pbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLkNocm9ub1VuaXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CisKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCiAKIEBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvdXNlciIpCi1AQXBpKHZhbHVlID0gIueUqOaIt+euoeeQhuaOpeWPoyIsIHRhZ3MgPSB7IueUqOaIt+euoeeQhiJ9KQorQFJlcXVlc3RNYXBwaW5nKCIvZWNoby91c2VyIikKIHB1YmxpYyBjbGFzcyBVc2VyQ29udHJvbGxlciB7CiAKLSAgICBAUmVzb3VyY2UKKyAgICBAQXV0b3dpcmVkCiAgICAgcHJpdmF0ZSBVc2VyU2VydmljZSB1c2VyU2VydmljZTsKIAogICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEF1dGhlbnRpY2F0aW9uTWFuYWdlciBhdXRoZW50aWNhdGlvbk1hbmFnZXI7CisgICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKIAogICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJNYXBwZXIgdXNlck1hcHBlcjsgLy8g5L2/55SoIE15QmF0aXMtUGx1cworICAgIHByaXZhdGUgRHluYW1pY1NlcnZpY2UgZHluYW1pY1NlcnZpY2U7CiAKLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBWZXJpZmljYXRpb25Ub2tlbk1hcHBlciB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlcjsgLy8g5pu/5o2iIEpQQQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFVzZXJDb250cm9sbGVyLmNsYXNzKTsKLQotICAgIEBQb3N0TWFwcGluZygiL2xvZ2luIikKLSAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIueUqOaIt+eZu+W9lSIsIG5vdGVzID0gIuS9v+eUqOeUqOaIt+WQjeWSjOWvhueggei/m+ihjOeZu+W9lSIpCi0gICAgcHVibGljIFJlc3VsdCBsb2dpbkNvbnRyb2xsZXIoQFJlcXVlc3RQYXJhbSBAQXBpUGFyYW0odmFsdWUgPSAi55So5oi35ZCNIiwgcmVxdWlyZWQgPSB0cnVlKSBTdHJpbmcgdXNlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSBAQXBpUGFyYW0odmFsdWUgPSAi5a+G56CBIiwgcmVxdWlyZWQgPSB0cnVlKSBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uIGF1dGhlbnRpY2F0aW9uID0gYXV0aGVudGljYXRpb25NYW5hZ2VyLmF1dGhlbnRpY2F0ZSgKLSAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJuYW1lUGFzc3dvcmRBdXRoZW50aWNhdGlvblRva2VuKHVzZXJuYW1lLCBwYXNzd29yZCkKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBTZWN1cml0eUNvbnRleHRIb2xkZXIuZ2V0Q29udGV4dCgpLnNldEF1dGhlbnRpY2F0aW9uKGF1dGhlbnRpY2F0aW9uKTsKLQotICAgICAgICAgICAgLy8g5L2/55SoIE15QmF0aXMtUGx1cyDmn6Xor6IKLSAgICAgICAgICAgIFVzZXIgdXNlciA9IHVzZXJNYXBwZXIuc2VsZWN0T25lKG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgidXNlcm5hbWUiLCB1c2VybmFtZSkpOwotCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvZ2luIHN1Y2Nlc3NmdWwgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKHVzZXIpOwotICAgICAgICB9IGNhdGNoIChBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLnmbvlvZXlpLHotKUiKTsKLSAgICAgICAgfQorICAgIC8vIOaOpeWPo++8mueUn+aIkOmCgOivt+eggQorICAgIEBQb3N0TWFwcGluZygiL2dldEludml0ZUNvZGUiKQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdlbmVyYXRlSW52aXRlQ29kZShAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHVzZXJTZXJ2aWNlLmdlbmVyYXRlSW52aXRlQ29kZSh1c2VySWQpOwogICAgIH0KIAorICAgIC8v5rOo5YaMCiAgICAgQFBvc3RNYXBwaW5nKCIvcmVnaXN0ZXIiKQotICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAi55So5oi35rOo5YaMIiwgbm90ZXMgPSAi5L2/55So55So5oi35L+h5oGv6L+b6KGM5rOo5YaMIikKLSAgICBwdWJsaWMgUmVzdWx0IHJlZ2lzdGVyQ29udHJvbGxlcihAUmVxdWVzdEJvZHkgQEFwaVBhcmFtKHZhbHVlID0gIuaWsOeUqOaIt+S/oeaBryIsIHJlcXVpcmVkID0gdHJ1ZSkgVXNlciBuZXdVc2VyKSB7Ci0gICAgICAgIGlmICh1c2VyU2VydmljZS5jaGVja0VtYWlsRXhpc3RzKG5ld1VzZXIuZ2V0RW1haWwoKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoICLpgq7nrrHlt7Looqvkvb/nlKjvvIzor7fkvb/nlKjlhbbku5bpgq7nrrHms6jlhozmiJbmib7lm57lr4bnoIHvvIEiKTsKLSAgICAgICAgfQotICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSB1c2VyU2VydmljZS5wcmVSZWdpc3RlclVzZXIobmV3VXNlcik7Ci0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICBVc2VyIHJlc3BvbnNlVXNlciA9IG5ldyBVc2VyKCk7Ci0gICAgICAgICAgICByZXNwb25zZVVzZXIuc2V0RW1haWwobmV3VXNlci5nZXRFbWFpbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2soKTsKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiByZWdpc3RlcihAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7CisgICAgICAgIFN0cmluZyB1c2VybmFtZSA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0KCJ1c2VybmFtZSIpOworICAgICAgICBTdHJpbmcgZW1haWwgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgiZW1haWwiKTsKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZykgcmVxdWVzdC5nZXQoInBhc3N3b3JkIik7CisgICAgICAgIFN0cmluZyByb2xlID0gKFN0cmluZykgcmVxdWVzdC5nZXQoInJvbGUiKTsKKyAgICAgICAgU3RyaW5nIGludml0ZUNvZGUgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgiaW52aXRlQ29kZSIpOworCisgICAgICAgIC8vIOiwg+eUqOacjeWKoeWxgueahOazqOWGjOaWueazlQorICAgICAgICBTdHJpbmcgcmVzdWx0TWVzc2FnZSA9IHVzZXJTZXJ2aWNlLnJlZ2lzdGVyVXNlcih1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkLCByb2xlLCBpbnZpdGVDb2RlKTsKKworICAgICAgICAvLyDov5Tlm57ms6jlhoznu5PmnpwKKyAgICAgICAgcmV0dXJuIE1hcC5vZigibXNnIiwgcmVzdWx0TWVzc2FnZSk7CisgICAgfQorCisgICAgLy/nmbvlvZUKKyAgICBAUG9zdE1hcHBpbmcoIi9sb2dpbiIpCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gbG9naW4oQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgeworICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgidXNlcm5hbWUiKTsKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZykgcmVxdWVzdC5nZXQoInBhc3N3b3JkIik7CisKKyAgICAgICAgLy8g6LCD55So5pyN5Yqh5bGC55qE55m75b2V5pa55rOVCisgICAgICAgIFN0cmluZyByZXN1bHRNZXNzYWdlID0gdXNlclNlcnZpY2UubG9naW5Vc2VyKHVzZXJuYW1lLCBwYXNzd29yZCk7CisKKyAgICAgICAgLy8g5qC55o2u55m75b2V57uT5p6c6L+U5Zue5LiN5ZCM55qE5ZON5bqUCisgICAgICAgIGlmIChyZXN1bHRNZXNzYWdlLmVxdWFscygi55m75b2V5oiQ5YqfIikpIHsKKyAgICAgICAgICAgIC8vIOafpeivoueUqOaIt+S/oeaBrworICAgICAgICAgICAgT3B0aW9uYWw8VXNlcnM+IHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlVc2VybmFtZSh1c2VybmFtZSk7CisgICAgICAgICAgICBpZiAodXNlci5pc1ByZXNlbnQoKSkgeworICAgICAgICAgICAgICAgIC8vIOWwhueUqOaIt+eahOaJgOacieS/oeaBr+S9nOS4uui/lOWbnuWAvAorICAgICAgICAgICAgICAgIHJldHVybiBNYXAub2YoIm1zZyIsIHJlc3VsdE1lc3NhZ2UsICJ1c2VyIiwgdXNlci5nZXQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXAub2YoIm1zZyIsICLnlKjmiLfkv6Hmga/mn6Xor6LlpLHotKUiKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIui0puWPt+W3suWtmOWcqOaIluazqOWGjOWksei0pe+8gSIpOworICAgICAgICAgICAgcmV0dXJuIE1hcC5vZigibXNnIiwgcmVzdWx0TWVzc2FnZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFZlcmlmaWNhdGlvblJlcXVlc3QgewotICAgICAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgY29kZTsKKyAgICAvL+S/ruaUueWvhueggQorICAgIEBQb3N0TWFwcGluZygiL3Bhc3N3b3JkIikKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjaGFuZ2VQYXNzd29yZChAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7CisgICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKKyAgICAgICAgU3RyaW5nIG9sZFBhc3N3b3JkID0gKFN0cmluZykgcmVxdWVzdC5nZXQoIm9sZF9wYXNzd29yZCIpOworICAgICAgICBTdHJpbmcgbmV3UGFzc3dvcmQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgibmV3X3Bhc3N3b3JkIik7CisgICAgICAgIFN0cmluZyBjb25maXJtUGFzc3dvcmQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgiY29uZmlybV9wYXNzd29yZCIpOwogCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKSB7IHJldHVybiBlbWFpbDsgfQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRFbWFpbChTdHJpbmcgZW1haWwpIHsgdGhpcy5lbWFpbCA9IGVtYWlsOyB9Ci0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsgcmV0dXJuIGNvZGU7IH0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgY29kZSkgeyB0aGlzLmNvZGUgPSBjb2RlOyB9CisgICAgICAgIC8vIOiwg+eUqOacjeWKoeWxgueahOS/ruaUueWvhueggeaWueazlQorICAgICAgICBTdHJpbmcgcmVzdWx0TWVzc2FnZSA9IHVzZXJTZXJ2aWNlLmNoYW5nZVBhc3N3b3JkKHVzZXJJZCwgb2xkUGFzc3dvcmQsIG5ld1Bhc3N3b3JkLCBjb25maXJtUGFzc3dvcmQpOworCisgICAgICAgIC8vIOi/lOWbnuS/ruaUuee7k+aenAorICAgICAgICByZXR1cm4gTWFwLm9mKCJtZXNzYWdlIiwgcmVzdWx0TWVzc2FnZSwgInN0YXR1cyIsIHJlc3VsdE1lc3NhZ2UuZXF1YWxzKCLlr4bnoIHkv67mlLnmiJDlip8iKSA/ICJzdWNjZXNzIiA6ICJlcnJvciIpOwogICAgIH0KIAotICAgIEBQb3N0TWFwcGluZygiL3ZlcmlmeS1jb2RlIikKLSAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIumqjOivgemCrueusemqjOivgeeggSIsIG5vdGVzID0gIumqjOivgeeUqOaIt+mCrueuseeahOmqjOivgeeggSIpCi0gICAgcHVibGljIFJlc3VsdCB2ZXJpZnlFbWFpbENvZGUoQFJlcXVlc3RCb2R5IEBBcGlQYXJhbSh2YWx1ZSA9ICLpqozor4Hor7fmsYLkv6Hmga8iLCByZXF1aXJlZCA9IHRydWUpIFZlcmlmaWNhdGlvblJlcXVlc3QgdmVyaWZpY2F0aW9uUmVxdWVzdCkgewotICAgICAgICBTdHJpbmcgZW1haWwgPSB2ZXJpZmljYXRpb25SZXF1ZXN0LmdldEVtYWlsKCk7Ci0gICAgICAgIFN0cmluZyBjb2RlID0gdmVyaWZpY2F0aW9uUmVxdWVzdC5nZXRDb2RlKCk7Ci0gICAgICAgIGJvb2xlYW4gaXNWZXJpZmllZCA9IHVzZXJTZXJ2aWNlLnZlcmlmeUVtYWlsKGVtYWlsLCBjb2RlKTsKLSAgICAgICAgaWYgKGlzVmVyaWZpZWQpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2soKTsKKyAgICAvLyDojrflj5bnlKjmiLfkuKrkurrotYTmlpkKKyAgICBAR2V0TWFwcGluZygiL3t1c2VySWR9L2dldFByb2ZpbGUiKQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFByb2ZpbGUoQFBhdGhWYXJpYWJsZSgidXNlcklkIikgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgcmV0dXJuIHVzZXJTZXJ2aWNlLmdldFByb2ZpbGUodXNlcklkKTsKKyAgICB9CisKKyAgICAvLyDkv67mlLnnlKjmiLfkuKrkurrotYTmlpkKKyAgICBAUHV0TWFwcGluZygiL3t1c2VySWR9L2VkaXRQcm9maWxlIikKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBlZGl0UHJvZmlsZSgKKyAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoInVzZXJJZCIpIExvbmcgdXNlcklkLAorICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcHJvZmlsZURhdGEpIHsKKworICAgICAgICAvLyDojrflj5bor7fmsYLkvZPkuK3nmoTkv67mlLnmlbDmja4KKyAgICAgICAgU3RyaW5nIGF2YXRhclVybCA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgiYXZhdGFyVXJsIik7CisgICAgICAgIFN0cmluZyBuaWNrbmFtZSA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgibmlja25hbWUiKTsKKyAgICAgICAgU3RyaW5nIGdlbmRlciA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgiZ2VuZGVyIik7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgiZGVzY3JpcHRpb24iKTsKKyAgICAgICAgU3RyaW5nIGhvYmJpZXMgPSAoU3RyaW5nKSBwcm9maWxlRGF0YS5nZXQoImhvYmJpZXMiKTsKKworICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLmlrnms5Xov5vooYzkv67mlLkKKyAgICAgICAgYm9vbGVhbiB1cGRhdGVkID0gdXNlclNlcnZpY2UuZWRpdFByb2ZpbGUodXNlcklkLCBhdmF0YXJVcmwsIG5pY2tuYW1lLCBnZW5kZXIsIGRlc2NyaXB0aW9uLCBob2JiaWVzKTsKKworICAgICAgICAvLyDov5Tlm57mk43kvZznu5Pmnpzmtojmga8KKyAgICAgICAgaWYgKHVwZGF0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXAub2YoIm1lc3NhZ2UiLCAi55So5oi36LWE5paZ5pu05paw5oiQ5YqfIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCAi6aqM6K+B56CB6ZSZ6K+v5oiW5bey6L+H5pyf77yBIik7CisgICAgICAgICAgICByZXR1cm4gTWFwLm9mKCJtZXNzYWdlIiwgIueUqOaIt+S4jeWtmOWcqCIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgRW1haWxTZXJ2aWNlIGVtYWlsU2VydmljZTsKLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRW1haWxSZXF1ZXN0IHsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZW1haWw7Ci0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKSB7IHJldHVybiBlbWFpbDsgfQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRFbWFpbChTdHJpbmcgZW1haWwpIHsgdGhpcy5lbWFpbCA9IGVtYWlsOyB9CisgICAgLy8g6K6h566X5YiG5Lqr546HCisgICAgQEdldE1hcHBpbmcoIi97dXNlcl9pZH0vY2FsY3VsYXRlLXNoYXJlLXJhdGUiKQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNhbGN1bGF0ZVNoYXJlUmF0ZShAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgcmV0dXJuIHVzZXJTZXJ2aWNlLmNhbGN1bGF0ZVNoYXJlUmF0ZSh1c2VySWQpOwogICAgIH0KIAotICAgIEBQb3N0TWFwcGluZygiL2dldC12ZXJpZmljYXRpb24tZW1haWwiKQotICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAi5Y+R6YCB6aqM6K+B6YKu5Lu2Iiwgbm90ZXMgPSAi6YCa6L+H55S15a2Q6YKu5Lu25Y+R6YCB6aqM6K+B6YKu5Lu2IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8UmVzdWx0PiBzZW5kVmVyaWZpY2F0aW9uRW1haWwoQFJlcXVlc3RCb2R5IEBBcGlQYXJhbSh2YWx1ZSA9ICLlj5HpgIHpqozor4Hor7fmsYIiLCByZXF1aXJlZCA9IHRydWUpIEVtYWlsUmVxdWVzdCBlbWFpbFZlcmlmaWNhdGlvblJlcXVlc3QpIHsKLSAgICAgICAgU3RyaW5nIGVtYWlsID0gZW1haWxWZXJpZmljYXRpb25SZXF1ZXN0LmdldEVtYWlsKCk7Ci0gICAgICAgIFVzZXIgdXNlciA9IHVzZXJNYXBwZXIuc2VsZWN0T25lKG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgiZW1haWwiLCBlbWFpbCkpOwotICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIuacquaJvuWIsOS4juivpemCrueuseWcsOWdgOebuOWFs+iBlOeahOeUqOaItzoge30iLCBlbWFpbCk7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKEh0dHBTdGF0dXMuQkFEX1JFUVVFU1QpCi0gICAgICAgICAgICAgICAgICAgIC5ib2R5KFJlc3VsdC5lcnJvcigi5pyq5om+5Yiw5LiO6K+l6YKu566x5Zyw5Z2A55u45YWz6IGU55qE55So5oi3IikpOworICAgIC8vIOiOt+WPlueUqOaIt+aJgOacieWlveWPi+eahOWfuuacrOS/oeaBrworICAgIEBHZXRNYXBwaW5nKCIve3VzZXJJZH0vZnJpZW5kcyIpCisgICAgcHVibGljIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0VXNlckZyaWVuZHMoQFBhdGhWYXJpYWJsZSgidXNlcklkIikgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgTGlzdDxMb25nPiBmcmllbmRJZHMgPSBkeW5hbWljU2VydmljZS5nZXRBbGxGcmllbmRJZHModXNlcklkKTsgIC8vIOazqOaEj+i/memHjOeUqOeahOaYr+WunuS+i+WvueixoQorICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGZyaWVuZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBmb3IgKExvbmcgZnJpZW5kSWQgOiBmcmllbmRJZHMpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0ID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQoZnJpZW5kSWQpOworICAgICAgICAgICAgaWYgKHVzZXJPcHQuaXNQcmVzZW50KCkpIHsKKyAgICAgICAgICAgICAgICBVc2VycyB1c2VyID0gdXNlck9wdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGZyaWVuZEluZm8gPSBNYXAub2YoCisgICAgICAgICAgICAgICAgICAgICAgICAiaWQiLCB1c2VyLmdldFVzZXJJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgImF2YXRhciIsIHVzZXIuZ2V0QXZhdGFyVXJsKCkgIT0gbnVsbCA/IHVzZXIuZ2V0QXZhdGFyVXJsKCkgOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9kZWZhdWx0LWF2YXRhci5qcGciLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5pY2tuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpICE9IG51bGwgPyB1c2VyLmdldFVzZXJuYW1lKCkgOiAi5pyq55+l55So5oi3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlbWFpbCIsIHVzZXIuZ2V0RW1haWwoKSAhPSBudWxsID8gdXNlci5nZXRFbWFpbCgpIDogIuacquWhq+WGmSIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGZyaWVuZHMuYWRkKGZyaWVuZEluZm8pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8g55Sf5oiQ6aqM6K+B56CBCi0gICAgICAgIFN0cmluZyB0b2tlbiA9IFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbU51bWVyaWMoNik7Ci0gICAgICAgIEluc3RhbnQgZXhwaXJ5RGF0ZSA9IEluc3RhbnQubm93KCkucGx1cygxLCBDaHJvbm9Vbml0LkhPVVJTKTsKLSAgICAgICAgbG9nZ2VyLmluZm8oIueUn+aIkOeahOmqjOivgeS7pOeJjDoge30sIOi/h+acn+aXtumXtDoge30iLCB0b2tlbiwgZXhwaXJ5RGF0ZSk7Ci0KLSAgICAgICAgVmVyaWZpY2F0aW9uVG9rZW4gdmVyaWZpY2F0aW9uVG9rZW4gPSBuZXcgVmVyaWZpY2F0aW9uVG9rZW4odG9rZW4sIHVzZXIuZ2V0VXNlcm5hbWUoKSwgZW1haWwsIHVzZXIuZ2V0UGFzc3dvcmQoKSwgZXhwaXJ5RGF0ZSk7Ci0KLSAgICAgICAgLy8g5L+d5a2Y5YiwIE15QmF0aXMtUGx1cyDmlbDmja7lupMKLSAgICAgICAgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuaW5zZXJ0KHZlcmlmaWNhdGlvblRva2VuKTsKLQotICAgICAgICBsb2dnZXIuaW5mbygi6aqM6K+B5Luk54mM5bey5L+d5a2Y77yM55So5oi3OiB7fSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSk7Ci0gICAgICAgIGVtYWlsU2VydmljZS5zZW5kVmVyaWZpY2F0aW9uRW1haWwoZW1haWwsIHRva2VuKTsKLQotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2soUmVzdWx0Lm9rKCkpOworICAgICAgICByZXR1cm4gZnJpZW5kczsKICAgICB9Ci0gICAgQFBvc3RNYXBwaW5nKCIvY2hlY2tQYXNzd29yZCIpCi0gICAgcHVibGljIFJlc3VsdDxTdHJpbmc+IGNoZWNrUGFzc3dvcmQoQFJlcXVlc3RQYXJhbSBMb25nIHVzZXJJZCwgQFJlcXVlc3RQYXJhbSBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgYm9vbGVhbiBpc1Bhc3N3b3JkQ29ycmVjdCA9IHVzZXJTZXJ2aWNlLmNoZWNrUGFzc3dvcmQodXNlcklkLCBwYXNzd29yZCk7Ci0gICAgICAgIGlmIChpc1Bhc3N3b3JkQ29ycmVjdCkgewotICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5Y6f5aeL5a+G56CB6L6T5YWl6ZSZ6K+vIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotLy8gICAgQFNhQ2hlY2tMb2dpbgotLy8gICAgQE9wZXJhdGlvbihzdW1tYXJ5ID0gIueUqOaIt+aUtuiXj+WIl+ihqCIsIGRlc2NyaXB0aW9uID0gIuiOt+WPlueUqOaIt+aUtuiXj+eahOenjeWtkOWIl+ihqC3liIbpobUt5o6S5bqPIikKLS8vICAgIEBBcGlSZXNwb25zZShyZXNwb25zZUNvZGUgPSAiMCIsIGRlc2NyaXB0aW9uID0gIuaTjeS9nOaIkOWKnyIsCi0vLyAgICAgICAgICAgIGNvbnRlbnQgPSB7QENvbnRlbnQobWVkaWFUeXBlID0gImFwcGxpY2F0aW9uL2pzb24iLAotLy8gICAgICAgICAgICAgICAgICAgIHNjaGVtYSA9IEBTY2hlbWEoaW1wbGVtZW50YXRpb24gPSBUb3JyZW50Vk8uY2xhc3MpKQotLy8gICAgICAgICAgICB9KQotLy8gICAgQFBvc3RNYXBwaW5nKCIvZmF2b3JpdGUvbGlzdCIpCi0vLyAgICBwdWJsaWMgUmVzdWx0IGxpc3RGYXZvcml0ZXMoQFJlcXVlc3RCb2R5IEZhdm9yaXRlUGFyYW0gcGFyYW0pIHsKLS8vICAgICAgICBpZiAocGFyYW0uZ2V0VXNlcklkKCkgPT0gbnVsbCkgewotLy8gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLnvLrlsJEgdXNlcklkIik7Ci0vLyAgICAgICAgfQotLy8KLS8vICAgICAgICAvLyDmoKHpqozmjpLluo/lrZfmrrXmmK/lkKblkIjnkIbvvIjlj6/pgInvvIkKLS8vICAgICAgICBwYXJhbS52YWxpZE9yZGVyKHBhcmFtLmdldE9yZGVyS2V5KFRvcnJlbnRFbnRpdHkuY2xhc3MpKTsKLS8vCi0vLyAgICAgICAgUGFnZVV0aWwuc3RhcnRQYWdlKHBhcmFtKTsKLS8vCi0vLyAgICAgICAgTGlzdDxUb3JyZW50RW50aXR5PiBsaXN0ID0gZmF2b3JpdGVTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZXNQYWdlZChwYXJhbS5nZXRVc2VySWQoKSk7Ci0vLwotLy8gICAgICAgIHJldHVybiBSZXN1bHQub2sobGlzdCwgUGFnZVV0aWwuZ2V0UGFnZShsaXN0KSk7Ci0vLyAgICB9Ci0vLwotCiAKIAogfQorCisKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUwYmViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlci5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyRm9sbG93U2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworQFJlc3RDb250cm9sbGVyCitAUmVxdWVzdE1hcHBpbmcoIi9lY2hvL3VzZXJzIikKK3B1YmxpYyBjbGFzcyBVc2VyRm9sbG93Q29udHJvbGxlciB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyRm9sbG93U2VydmljZSB1c2VyRm9sbG93U2VydmljZTsKKworICAgIC8vIOeUqOaIt+WFs+azqOaOpeWPoworICAgIEBQb3N0TWFwcGluZygiL3tmb2xsb3dlZF9pZH0vZm9sbG93IikKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZm9sbG93KEBQYXRoVmFyaWFibGUoImZvbGxvd2VkX2lkIikgTG9uZyBmb2xsb3dlZElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QpIHsKKyAgICAgICAgTG9uZyBmb2xsb3dlcklkID0gcmVxdWVzdC5nZXQoImZvbGxvd2VyX2lkIik7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyRm9sbG93U2VydmljZS5mb2xsb3coZm9sbG93ZXJJZCwgZm9sbG93ZWRJZCk7CisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7CisgICAgfQorCisgICAgLy8g5Y+W5raI5YWz5rOo5o6l5Y+jCisgICAgQFBvc3RNYXBwaW5nKCIve2ZvbGxvd2VkX2lkfS91bmZvbGxvdyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHVuZm9sbG93KEBQYXRoVmFyaWFibGUoImZvbGxvd2VkX2lkIikgTG9uZyBmb2xsb3dlZElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdCkgeworICAgICAgICBMb25nIGZvbGxvd2VySWQgPSByZXF1ZXN0LmdldCgiZm9sbG93ZXJfaWQiKTsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHVzZXJGb2xsb3dTZXJ2aWNlLnVuZm9sbG93KGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpOworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOworICAgIH0KKworICAgIC8vIOiOt+WPluafkOS4queUqOaIt+eahOeyieS4neWIl+ihqAorICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2ZvbGxvd2VycyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldEZvbGxvd2VycyhAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2Vycyh1c2VySWQpOworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOworICAgIH0KKworICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2ZvbGxvd2luZyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldEZvbGxvd2luZyhAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2luZyh1c2VySWQpOworICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDE0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlci5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyTWVzc2FnZVNlcnZpY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK0BSZXN0Q29udHJvbGxlcgorQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9tZXNzYWdlIikKK3B1YmxpYyBjbGFzcyBVc2VyTWVzc2FnZUNvbnRyb2xsZXIgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlck1lc3NhZ2VTZXJ2aWNlIHVzZXJNZXNzYWdlU2VydmljZTsKKworICAgIEBQb3N0TWFwcGluZygiL3NlbmRNZXNzYWdlcyIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHNlbmRNZXNzYWdlKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcykgeworICAgICAgICAvLyDlsIblj4LmlbDovazmjaLkuLogTG9uZyDnsbvlnosKKyAgICAgICAgTG9uZyBzZW5kZXJJZCA9IExvbmcudmFsdWVPZihwYXJhbXMuZ2V0KCJzZW5kZXJfaWQiKS50b1N0cmluZygpKTsKKyAgICAgICAgTG9uZyByZWNlaXZlcklkID0gTG9uZy52YWx1ZU9mKHBhcmFtcy5nZXQoInJlY2VpdmVyX2lkIikudG9TdHJpbmcoKSk7CisgICAgICAgIFN0cmluZyBjb250ZW50ID0gKFN0cmluZykgcGFyYW1zLmdldCgiY29udGVudCIpOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlck1lc3NhZ2VTZXJ2aWNlLnNlbmRNZXNzYWdlKHNlbmRlcklkLCByZWNlaXZlcklkLCBjb250ZW50KTsKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBAR2V0TWFwcGluZygiL3t1c2VyX2lkfS9nZXRVc2VyTWVzc2FnZXMiKQorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRVc2VyTWVzc2FnZXMoQFBhdGhWYXJpYWJsZSgidXNlcl9pZCIpIExvbmcgdXNlcklkKSB7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyTWVzc2FnZVNlcnZpY2UuZ2V0VXNlck1lc3NhZ2VzKHVzZXJJZCk7CisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7CisgICAgfQorCisgICAgLy8g6I635Y+W5Y2V5p2h5raI5oGv55qE6K+m5oOFCisgICAgQEdldE1hcHBpbmcoIi97bWVzc2FnZV9pZH0vZ2V0QU1lc3NhZ2UiKQorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRNZXNzYWdlKEBQYXRoVmFyaWFibGUoIm1lc3NhZ2VfaWQiKSBMb25nIG1lc3NhZ2VJZCkgeworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlck1lc3NhZ2VTZXJ2aWNlLmdldE1lc3NhZ2UobWVzc2FnZUlkKTsKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db2xsZWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTg3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJjb2xsZWN0aW9ucyIpCitwdWJsaWMgY2xhc3MgQ29sbGVjdGlvbnMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gImNvbGxlY3Rpb25JZCIpCisgICAgcHJpdmF0ZSBMb25nIGNvbGxlY3Rpb25JZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKKyAgICBwcml2YXRlIExvbmcgdXNlcklkOworCisgICAgQENvbHVtbihuYW1lID0gInBvc3RObyIpCisgICAgcHJpdmF0ZSBMb25nIHBvc3RObzsKKworICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKKyAgICBwdWJsaWMgTG9uZyBnZXRDb2xsZWN0aW9uSWQoKSB7CisgICAgICAgIHJldHVybiBjb2xsZWN0aW9uSWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29sbGVjdGlvbklkKExvbmcgY29sbGVjdGlvbklkKSB7CisgICAgICAgIHRoaXMuY29sbGVjdGlvbklkID0gY29sbGVjdGlvbklkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKKyAgICAgICAgcmV0dXJuIHVzZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKKyAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0UG9zdE5vKCkgeworICAgICAgICByZXR1cm4gcG9zdE5vOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBvc3RObyhMb25nIHBvc3RObykgeworICAgICAgICB0aGlzLnBvc3RObyA9IHBvc3RObzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db21tZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjg5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuamF2YQpAQCAtMCwwICsxLDExNiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbkJhY2tSZWZlcmVuY2U7CitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAiY29tbWVudHMiKQorcHVibGljIGNsYXNzIENvbW1lbnRzIHsKKworICAgIEBJZAorICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQorICAgIEBDb2x1bW4obmFtZSA9ICJjb21tZW50X2lkIikKKyAgICBwcml2YXRlIExvbmcgY29tbWVudElkOworCisgICAgQE1hbnlUb09uZQorICAgIEBKb2luQ29sdW1uKG5hbWUgPSAicG9zdF9pZCIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgQEpzb25CYWNrUmVmZXJlbmNlCisgICAgcHJpdmF0ZSBQb3N0IHBvc3Q7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiY29udGVudCIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJpc19hbm9ueW1vdXMiKQorICAgIHByaXZhdGUgQm9vbGVhbiBpc0Fub255bW91czsgIC8vIOaYr+WQpuWMv+WQjQorCisgICAgQENvbHVtbihuYW1lID0gImxpa2VzX2NvdW50IikKKyAgICBwcml2YXRlIEludGVnZXIgbGlrZXNDb3VudCA9IDA7ICAvLyDngrnotZ7mlbAKKworICAgIEBDb2x1bW4obmFtZSA9ICJyZXBseV9jb3VudCIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIHJlcGx5Q291bnQgPSAwOyAgLy8g5Zue5aSN5pWwCisKKyAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF90aW1lIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIERhdGUgY29tbWVudFRpbWU7ICAvLyDor4Torrrml7bpl7QKKworICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIExvbmcgdXNlcklkOyAgLy8g6K+E6K666ICF55qEIHVzZXJfaWQKKworCisgICAgQENvbHVtbihuYW1lID0gImNvbV9jb21tZW50X2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIExvbmcgY29tX2NvbW1lbnRfaWQ7CisKKyAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCisKKyAgICBwdWJsaWMgTG9uZyBnZXRDb21tZW50SWQoKSB7CisgICAgICAgIHJldHVybiBjb21tZW50SWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29tbWVudElkKExvbmcgY29tbWVudElkKSB7CisgICAgICAgIHRoaXMuY29tbWVudElkID0gY29tbWVudElkOworICAgIH0KKworICAgIHB1YmxpYyBQb3N0IGdldFBvc3QoKSB7CisgICAgICAgIHJldHVybiBwb3N0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBvc3QoUG9zdCBwb3N0KSB7CisgICAgICAgIHRoaXMucG9zdCA9IHBvc3Q7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgeworICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7CisgICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7CisgICAgfQorCisgICAgcHVibGljIEJvb2xlYW4gZ2V0SXNBbm9ueW1vdXMoKSB7CisgICAgICAgIHJldHVybiBpc0Fub255bW91czsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJc0Fub255bW91cyhCb29sZWFuIGlzQW5vbnltb3VzKSB7CisgICAgICAgIHRoaXMuaXNBbm9ueW1vdXMgPSBpc0Fub255bW91czsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRMaWtlc0NvdW50KCkgeworICAgICAgICByZXR1cm4gbGlrZXNDb3VudDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRMaWtlc0NvdW50KEludGVnZXIgbGlrZXNDb3VudCkgeworICAgICAgICB0aGlzLmxpa2VzQ291bnQgPSBsaWtlc0NvdW50OworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldFJlcGx5Q291bnQoKSB7CisgICAgICAgIHJldHVybiByZXBseUNvdW50OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlcGx5Q291bnQoSW50ZWdlciByZXBseUNvdW50KSB7CisgICAgICAgIHRoaXMucmVwbHlDb3VudCA9IHJlcGx5Q291bnQ7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0Q29tbWVudFRpbWUoKSB7CisgICAgICAgIHJldHVybiBjb21tZW50VGltZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50VGltZShEYXRlIGNvbW1lbnRUaW1lKSB7CisgICAgICAgIHRoaXMuY29tbWVudFRpbWUgPSBjb21tZW50VGltZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldFBhcmVudENvbW1lbnQoKSB7CisgICAgICAgIHJldHVybiBjb21fY29tbWVudF9pZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRDb21tZW50KExvbmcgY29tX2NvbW1lbnRfaWQpIHsKKyAgICAgICAgdGhpcy5jb21fY29tbWVudF9pZCA9IGNvbV9jb21tZW50X2lkOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljQ29tbWVudC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNDb21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjODRkMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljQ29tbWVudC5qYXZhCkBAIC0wLDAgKzEsODkgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKKworaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK0BFbnRpdHkKK0BUYWJsZShuYW1lID0gImR5bmFtaWNfY29tbWVudCIpCitwdWJsaWMgY2xhc3MgRHluYW1pY0NvbW1lbnQgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfaWQiKQorICAgIHByaXZhdGUgTG9uZyBjb21tZW50SWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZHluYW1pY19pZCIpCisgICAgcHJpdmF0ZSBMb25nIGR5bmFtaWNJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKKyAgICBwcml2YXRlIExvbmcgdXNlcklkOworCisgICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfY29udGVudCIpCisgICAgcHJpdmF0ZSBTdHJpbmcgY29tbWVudENvbnRlbnQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF90aW1lIikKKyAgICBwcml2YXRlIERhdGUgY29tbWVudFRpbWU7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiaXNfYW5vbnltb3VzIikKKyAgICBwcml2YXRlIEJvb2xlYW4gaXNBbm9ueW1vdXMgPSBmYWxzZTsKKworICAgIEBDb2x1bW4obmFtZSA9ICJwYXJlbnRfY29tbWVudF9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHBhcmVudENvbW1lbnRJZDsKKworICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKKyAgICBwdWJsaWMgTG9uZyBnZXRDb21tZW50SWQoKSB7CisgICAgICAgIHJldHVybiBjb21tZW50SWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29tbWVudElkKExvbmcgY29tbWVudElkKSB7CisgICAgICAgIHRoaXMuY29tbWVudElkID0gY29tbWVudElkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldER5bmFtaWNJZCgpIHsKKyAgICAgICAgcmV0dXJuIGR5bmFtaWNJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREeW5hbWljSWQoTG9uZyBkeW5hbWljSWQpIHsKKyAgICAgICAgdGhpcy5keW5hbWljSWQgPSBkeW5hbWljSWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgeworICAgICAgICByZXR1cm4gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgeworICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldENvbW1lbnRDb250ZW50KCkgeworICAgICAgICByZXR1cm4gY29tbWVudENvbnRlbnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29tbWVudENvbnRlbnQoU3RyaW5nIGNvbW1lbnRDb250ZW50KSB7CisgICAgICAgIHRoaXMuY29tbWVudENvbnRlbnQgPSBjb21tZW50Q29udGVudDsKKyAgICB9CisKKyAgICBwdWJsaWMgRGF0ZSBnZXRDb21tZW50VGltZSgpIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUaW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRUaW1lKERhdGUgY29tbWVudFRpbWUpIHsKKyAgICAgICAgdGhpcy5jb21tZW50VGltZSA9IGNvbW1lbnRUaW1lOworICAgIH0KKworICAgIHB1YmxpYyBCb29sZWFuIGdldElzQW5vbnltb3VzKCkgeworICAgICAgICByZXR1cm4gaXNBbm9ueW1vdXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SXNBbm9ueW1vdXMoQm9vbGVhbiBpc0Fub255bW91cykgeworICAgICAgICB0aGlzLmlzQW5vbnltb3VzID0gaXNBbm9ueW1vdXM7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0UGFyZW50Q29tbWVudElkKCkgeworICAgICAgICByZXR1cm4gcGFyZW50Q29tbWVudElkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBhcmVudENvbW1lbnRJZChMb25nIHBhcmVudENvbW1lbnRJZCkgeworICAgICAgICB0aGlzLnBhcmVudENvbW1lbnRJZCA9IHBhcmVudENvbW1lbnRJZDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0xpa2VzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0xpa2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2ZjkwMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuamF2YQpAQCAtMCwwICsxLDU2IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJkeW5hbWljX2xpa2VzIikKK3B1YmxpYyBjbGFzcyBEeW5hbWljTGlrZXMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gImxpa2VfaWQiKQorICAgIHByaXZhdGUgTG9uZyBsaWtlSWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZHluYW1pY19pZCIpCisgICAgcHJpdmF0ZSBMb25nIGR5bmFtaWNJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKKyAgICBwcml2YXRlIExvbmcgdXNlcklkOworCisgICAgQENvbHVtbihuYW1lID0gImxpa2VfdGltZSIpCisgICAgcHJpdmF0ZSBEYXRlIGxpa2VUaW1lOworCisgICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycworICAgIHB1YmxpYyBMb25nIGdldExpa2VJZCgpIHsKKyAgICAgICAgcmV0dXJuIGxpa2VJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRMaWtlSWQoTG9uZyBsaWtlSWQpIHsKKyAgICAgICAgdGhpcy5saWtlSWQgPSBsaWtlSWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0RHluYW1pY0lkKCkgeworICAgICAgICByZXR1cm4gZHluYW1pY0lkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldER5bmFtaWNJZChMb25nIGR5bmFtaWNJZCkgeworICAgICAgICB0aGlzLmR5bmFtaWNJZCA9IGR5bmFtaWNJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldExpa2VUaW1lKCkgeworICAgICAgICByZXR1cm4gbGlrZVRpbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TGlrZVRpbWUoRGF0ZSBsaWtlVGltZSkgeworICAgICAgICB0aGlzLmxpa2VUaW1lID0gbGlrZVRpbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRXhwZXJpZW5jZUhpc3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzUyZjZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmphdmEKQEAgLTAsMCArMSw2NyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAiZXhwZXJpZW5jZV9oaXN0b3J5IikKK3B1YmxpYyBjbGFzcyBFeHBlcmllbmNlSGlzdG9yeSB7CisKKyAgICBASWQKKyAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKKyAgICBAQ29sdW1uKG5hbWUgPSAiaGlzdG9yeV9pZCIpCisgICAgcHJpdmF0ZSBMb25nIGhpc3RvcnlJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIExvbmcgdXNlcklkOworCisgICAgQENvbHVtbihuYW1lID0gImV4cGVyaWVuY2VfY2hhbmdlIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIEludGVnZXIgZXhwZXJpZW5jZUNoYW5nZTsgIC8vIOe7j+mqjOWAvOWPmOWMlumHjworCisgICAgQENvbHVtbihuYW1lID0gInNvdXJjZSIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBTdHJpbmcgc291cmNlOyAgLy8g5pu05paw5p2l5rqQCisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXBkYXRlX3RpbWUiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgRGF0ZSB1cGRhdGVUaW1lOyAgLy8g5pu05paw5pON5L2c55qE5pe26Ze0CisKKyAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCisgICAgcHVibGljIExvbmcgZ2V0SGlzdG9yeUlkKCkgeworICAgICAgICByZXR1cm4gaGlzdG9yeUlkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEhpc3RvcnlJZChMb25nIGhpc3RvcnlJZCkgeworICAgICAgICB0aGlzLmhpc3RvcnlJZCA9IGhpc3RvcnlJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEV4cGVyaWVuY2VDaGFuZ2UoKSB7CisgICAgICAgIHJldHVybiBleHBlcmllbmNlQ2hhbmdlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEV4cGVyaWVuY2VDaGFuZ2UoSW50ZWdlciBleHBlcmllbmNlQ2hhbmdlKSB7CisgICAgICAgIHRoaXMuZXhwZXJpZW5jZUNoYW5nZSA9IGV4cGVyaWVuY2VDaGFuZ2U7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRTb3VyY2UoKSB7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0U291cmNlKFN0cmluZyBzb3VyY2UpIHsKKyAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0VXBkYXRlVGltZSgpIHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZVRpbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXBkYXRlVGltZShEYXRlIHVwZGF0ZVRpbWUpIHsKKyAgICAgICAgdGhpcy51cGRhdGVUaW1lID0gdXBkYXRlVGltZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRnJpZW5kUmVsYXRpb24uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODYwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRnJpZW5kUmVsYXRpb24uamF2YQpAQCAtMCwwICsxLDU2IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJmcmllbmRfcmVsYXRpb24iKQorcHVibGljIGNsYXNzIEZyaWVuZFJlbGF0aW9uIHsKKworICAgIEBJZAorICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQorICAgIEBDb2x1bW4obmFtZSA9ICJyZWxhdGlvbl9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHJlbGF0aW9uSWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJmcmllbmRfaWQiKQorICAgIHByaXZhdGUgTG9uZyBmcmllbmRJZDsgIC8vIOWlveWPi0lECisKKyAgICBAQ29sdW1uKG5hbWUgPSAiY3JlYXRlX3RpbWUiKQorICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVUaW1lOyAgLy8g5aW95Y+L5YWz57O75Yib5bu65pe26Ze0CisKKyAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCisgICAgcHVibGljIExvbmcgZ2V0UmVsYXRpb25JZCgpIHsKKyAgICAgICAgcmV0dXJuIHJlbGF0aW9uSWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UmVsYXRpb25JZChMb25nIHJlbGF0aW9uSWQpIHsKKyAgICAgICAgdGhpcy5yZWxhdGlvbklkID0gcmVsYXRpb25JZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldEZyaWVuZElkKCkgeworICAgICAgICByZXR1cm4gZnJpZW5kSWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RnJpZW5kSWQoTG9uZyBmcmllbmRJZCkgeworICAgICAgICB0aGlzLmZyaWVuZElkID0gZnJpZW5kSWQ7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0Q3JlYXRlVGltZSgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlVGltZShEYXRlIGNyZWF0ZVRpbWUpIHsKKyAgICAgICAgdGhpcy5jcmVhdGVUaW1lID0gY3JlYXRlVGltZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGYyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuamF2YQpAQCAtMCwwICsxLDk4IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJncm91cF9pbnRlcmVzdHMiKQorcHVibGljIGNsYXNzIEdyb3VwIHsKKworICAgIEBJZAorICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQorICAgIEBDb2x1bW4obmFtZSA9ICJncm91cF9pZCIpCisgICAgcHJpdmF0ZSBMb25nIGdyb3VwSWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfbmFtZSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgZ3JvdXBOYW1lOworCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247ICAvLyDlsI/nu4TnroDku4sKKworICAgIEBDb2x1bW4obmFtZSA9ICJjcmVhdGVfdGltZSIpCisgICAgcHJpdmF0ZSBEYXRlIGNyZWF0ZVRpbWU7ICAvLyDliJvlu7rml7bpl7QKKworICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKKyAgICBwcml2YXRlIExvbmcgdXNlcklkOyAgLy8g5Yib5bu66K+l5bCP57uE55qE55So5oi3SUQKKworICAgIEBDb2x1bW4obmFtZSA9ICJtZW1iZXJfY291bnQiKQorICAgIHByaXZhdGUgSW50ZWdlciBtZW1iZXJDb3VudDsgIC8vIOWwj+e7hOaIkOWRmOS6uuaVsAorCisgICAgcHJpdmF0ZSBTdHJpbmcgY2F0ZWdvcnk7ICAvLyDlsI/nu4TnsbvliKsKKworICAgIEBDb2x1bW4obmFtZSA9ICJjb3Zlcl9pbWFnZSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgY292ZXJJbWFnZTsgIC8vIOWwj+e7hOWwgemdouWbvueJhworCisgICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycworICAgIHB1YmxpYyBMb25nIGdldEdyb3VwSWQoKSB7CisgICAgICAgIHJldHVybiBncm91cElkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwSWQoTG9uZyBncm91cElkKSB7CisgICAgICAgIHRoaXMuZ3JvdXBJZCA9IGdyb3VwSWQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRHcm91cE5hbWUoKSB7CisgICAgICAgIHJldHVybiBncm91cE5hbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0R3JvdXBOYW1lKFN0cmluZyBncm91cE5hbWUpIHsKKyAgICAgICAgdGhpcy5ncm91cE5hbWUgPSBncm91cE5hbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgeworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0Q3JlYXRlVGltZSgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlVGltZShEYXRlIGNyZWF0ZVRpbWUpIHsKKyAgICAgICAgdGhpcy5jcmVhdGVUaW1lID0gY3JlYXRlVGltZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldE1lbWJlckNvdW50KCkgeworICAgICAgICByZXR1cm4gbWVtYmVyQ291bnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TWVtYmVyQ291bnQoSW50ZWdlciBtZW1iZXJDb3VudCkgeworICAgICAgICB0aGlzLm1lbWJlckNvdW50ID0gbWVtYmVyQ291bnQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDYXRlZ29yeSgpIHsKKyAgICAgICAgcmV0dXJuIGNhdGVnb3J5OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENhdGVnb3J5KFN0cmluZyBjYXRlZ29yeSkgeworICAgICAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDb3ZlckltYWdlKCkgeworICAgICAgICByZXR1cm4gY292ZXJJbWFnZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb3ZlckltYWdlKFN0cmluZyBjb3ZlckltYWdlKSB7CisgICAgICAgIHRoaXMuY292ZXJJbWFnZSA9IGNvdmVySW1hZ2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwQ29tbWVudHMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmNDIwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmphdmEKQEAgLTAsMCArMSw3NyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAiZ3JvdXBfY29tbWVudHMiKQorcHVibGljIGNsYXNzIEdyb3VwQ29tbWVudHMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfaWQiKQorICAgIHByaXZhdGUgTG9uZyBjb21tZW50SWQ7ICAvLyDor4TorrpJRAorCisgICAgQENvbHVtbihuYW1lID0gImdyb3VwX3Bvc3RfaWQiKQorICAgIHByaXZhdGUgTG9uZyBncm91cFBvc3RJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKKyAgICBwcml2YXRlIExvbmcgdXNlcklkOworCisgICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJwYXJlbnRfY29tbWVudF9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHBhcmVudENvbW1lbnRJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJ0aW1lIikKKyAgICBwcml2YXRlIERhdGUgdGltZTsgIC8vIOivhOiuuuaXtumXtAorCisgICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycworICAgIHB1YmxpYyBMb25nIGdldENvbW1lbnRJZCgpIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50SWQoTG9uZyBjb21tZW50SWQpIHsKKyAgICAgICAgdGhpcy5jb21tZW50SWQgPSBjb21tZW50SWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0R3JvdXBQb3N0SWQoKSB7CisgICAgICAgIHJldHVybiBncm91cFBvc3RJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRHcm91cFBvc3RJZChMb25nIGdyb3VwUG9zdElkKSB7CisgICAgICAgIHRoaXMuZ3JvdXBQb3N0SWQgPSBncm91cFBvc3RJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgY29udGVudCkgeworICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldFBhcmVudENvbW1lbnRJZCgpIHsKKyAgICAgICAgcmV0dXJuIHBhcmVudENvbW1lbnRJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRDb21tZW50SWQoTG9uZyBwYXJlbnRDb21tZW50SWQpIHsKKyAgICAgICAgdGhpcy5wYXJlbnRDb21tZW50SWQgPSBwYXJlbnRDb21tZW50SWQ7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0VGltZSgpIHsKKyAgICAgICAgcmV0dXJuIHRpbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VGltZShEYXRlIHRpbWUpIHsKKyAgICAgICAgdGhpcy50aW1lID0gdGltZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBNZW1iZXJzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBNZW1iZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2ZTE4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJncm91cF9tZW1iZXJzIikKK3B1YmxpYyBjbGFzcyBHcm91cE1lbWJlcnMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gInJlbGF0aW9uX2lkIikKKyAgICBwcml2YXRlIExvbmcgcmVsYXRpb25JZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJncm91cF9pZCIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBMb25nIGdyb3VwSWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKKworICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKKyAgICBwdWJsaWMgTG9uZyBnZXRSZWxhdGlvbklkKCkgeworICAgICAgICByZXR1cm4gcmVsYXRpb25JZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbklkKExvbmcgcmVsYXRpb25JZCkgeworICAgICAgICB0aGlzLnJlbGF0aW9uSWQgPSByZWxhdGlvbklkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldEdyb3VwSWQoKSB7CisgICAgICAgIHJldHVybiBncm91cElkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwSWQoTG9uZyBncm91cElkKSB7CisgICAgICAgIHRoaXMuZ3JvdXBJZCA9IGdyb3VwSWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgeworICAgICAgICByZXR1cm4gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgeworICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4NjdmNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cFBvc3QuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAiZ3JvdXBfcG9zdCIpCitwdWJsaWMgY2xhc3MgR3JvdXBQb3N0IHsKKworICAgIEBJZAorICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQorICAgIEBDb2x1bW4obmFtZSA9ICJncm91cF9wb3N0X2lkIikKKyAgICBwcml2YXRlIExvbmcgZ3JvdXBQb3N0SWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfaWQiKQorICAgIHByaXZhdGUgTG9uZyBncm91cElkOworCisgICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQorICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7CisKKyAgICBwcml2YXRlIFN0cmluZyBjb250ZW50OworCisgICAgcHJpdmF0ZSBTdHJpbmcgaW1hZ2U7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAibGlrZV9jb3VudCIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGxpa2VDb3VudDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJjb21tZW50X2NvdW50IikKKyAgICBwcml2YXRlIEludGVnZXIgY29tbWVudENvdW50OyAgLy8g5biW5a2Q6K+E6K665pWwCisKKyAgICBAQ29sdW1uKG5hbWUgPSAidGltZSIpCisgICAgcHJpdmF0ZSBEYXRlIHRpbWU7ICAvLyDluJblrZDliJvlu7rml7bpl7QKKworICAgIHByaXZhdGUgU3RyaW5nIHRpdGxlOworCisKKyAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCisgICAgcHVibGljIExvbmcgZ2V0R3JvdXBQb3N0SWQoKSB7CisgICAgICAgIHJldHVybiBncm91cFBvc3RJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRHcm91cFBvc3RJZChMb25nIGdyb3VwUG9zdElkKSB7CisgICAgICAgIHRoaXMuZ3JvdXBQb3N0SWQgPSBncm91cFBvc3RJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRHcm91cElkKCkgeworICAgICAgICByZXR1cm4gZ3JvdXBJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRHcm91cElkKExvbmcgZ3JvdXBJZCkgeworICAgICAgICB0aGlzLmdyb3VwSWQgPSBncm91cElkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKKyAgICAgICAgcmV0dXJuIHVzZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKKyAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgeworICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7CisgICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRJbWFnZSgpIHsKKyAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEltYWdlKFN0cmluZyBpbWFnZSkgeworICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7CisgICAgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0TGlrZUNvdW50KCkgeworICAgICAgICByZXR1cm4gbGlrZUNvdW50OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldExpa2VDb3VudChJbnRlZ2VyIGxpa2VDb3VudCkgeworICAgICAgICB0aGlzLmxpa2VDb3VudCA9IGxpa2VDb3VudDsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRDb21tZW50Q291bnQoKSB7CisgICAgICAgIHJldHVybiBjb21tZW50Q291bnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29tbWVudENvdW50KEludGVnZXIgY29tbWVudENvdW50KSB7CisgICAgICAgIHRoaXMuY29tbWVudENvdW50ID0gY29tbWVudENvdW50OworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldFRpbWUoKSB7CisgICAgICAgIHJldHVybiB0aW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRpbWUoRGF0ZSB0aW1lKSB7CisgICAgICAgIHRoaXMudGltZSA9IHRpbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgeworICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGV2ZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODM3ZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmphdmEKQEAgLTAsMCArMSw4OSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCisKKworaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7CisKK0BFbnRpdHkKK0BUYWJsZShuYW1lID0gImxldmVsIikKK3B1YmxpYyBjbGFzcyBMZXZlbCB7CisKKyAgICBASWQKKyAgICBAQ29sdW1uKG5hbWUgPSAibGV2ZWxfaWQiKQorICAgIHByaXZhdGUgTG9uZyBsZXZlbElkOyAgLy8g562J57qn5ZSv5LiA5qCH6K+GCisKKyAgICBAQ29sdW1uKG5hbWUgPSAibGV2ZWxfbmFtZSIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBTdHJpbmcgbGV2ZWxOYW1lOyAgLy8g562J57qn5ZCN56ewCisKKyAgICBAQ29sdW1uKG5hbWUgPSAicmVxdWlyZWRfZXhwZXJpZW5jZSIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBMb25nIHJlcXVpcmVkRXhwZXJpZW5jZTsgIC8vIOaJgOmcgOe7j+mqjOWAvAorCisgICAgQENvbHVtbihuYW1lID0gInJlcXVpcmVkX3NoYXJlX3JhdGlvIikKKyAgICBwcml2YXRlIEZsb2F0IHJlcXVpcmVkU2hhcmVSYXRpbzsgIC8vIOaJgOmcgOWIhuS6q+eOhworCisgICAgQENvbHVtbihuYW1lID0gInJlcXVpcmVkX3VwbG9hZF9nYiIpCisgICAgcHJpdmF0ZSBGbG9hdCByZXF1aXJlZFVwbG9hZEdiOyAgLy8g5omA6ZyA5LiK5Lyg5pWw5o2u6YePCisKKyAgICBAQ29sdW1uKG5hbWUgPSAicmVxdWlyZWRfc2VlZGluZ19ob3VycyIpCisgICAgcHJpdmF0ZSBGbG9hdCByZXF1aXJlZFNlZWRpbmdIb3VyczsgIC8vIOaJgOmcgOWBmuenjeaXtumVvworCisgICAgQENvbHVtbihuYW1lID0gInBlcm1pc3Npb25zIikKKyAgICBwcml2YXRlIFN0cmluZyBwZXJtaXNzaW9uczsgIC8vIOaLpeacieeahOadg+mZkAorCisgICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycworICAgIHB1YmxpYyBMb25nIGdldExldmVsSWQoKSB7CisgICAgICAgIHJldHVybiBsZXZlbElkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldExldmVsSWQoTG9uZyBsZXZlbElkKSB7CisgICAgICAgIHRoaXMubGV2ZWxJZCA9IGxldmVsSWQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRMZXZlbE5hbWUoKSB7CisgICAgICAgIHJldHVybiBsZXZlbE5hbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TGV2ZWxOYW1lKFN0cmluZyBsZXZlbE5hbWUpIHsKKyAgICAgICAgdGhpcy5sZXZlbE5hbWUgPSBsZXZlbE5hbWU7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0UmVxdWlyZWRFeHBlcmllbmNlKCkgeworICAgICAgICByZXR1cm4gcmVxdWlyZWRFeHBlcmllbmNlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVkRXhwZXJpZW5jZShMb25nIHJlcXVpcmVkRXhwZXJpZW5jZSkgeworICAgICAgICB0aGlzLnJlcXVpcmVkRXhwZXJpZW5jZSA9IHJlcXVpcmVkRXhwZXJpZW5jZTsKKyAgICB9CisKKyAgICBwdWJsaWMgRmxvYXQgZ2V0UmVxdWlyZWRTaGFyZVJhdGlvKCkgeworICAgICAgICByZXR1cm4gcmVxdWlyZWRTaGFyZVJhdGlvOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVkU2hhcmVSYXRpbyhGbG9hdCByZXF1aXJlZFNoYXJlUmF0aW8pIHsKKyAgICAgICAgdGhpcy5yZXF1aXJlZFNoYXJlUmF0aW8gPSByZXF1aXJlZFNoYXJlUmF0aW87CisgICAgfQorCisgICAgcHVibGljIEZsb2F0IGdldFJlcXVpcmVkVXBsb2FkR2IoKSB7CisgICAgICAgIHJldHVybiByZXF1aXJlZFVwbG9hZEdiOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVkVXBsb2FkR2IoRmxvYXQgcmVxdWlyZWRVcGxvYWRHYikgeworICAgICAgICB0aGlzLnJlcXVpcmVkVXBsb2FkR2IgPSByZXF1aXJlZFVwbG9hZEdiOworICAgIH0KKworICAgIHB1YmxpYyBGbG9hdCBnZXRSZXF1aXJlZFNlZWRpbmdIb3VycygpIHsKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVkU2VlZGluZ0hvdXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVkU2VlZGluZ0hvdXJzKEZsb2F0IHJlcXVpcmVkU2VlZGluZ0hvdXJzKSB7CisgICAgICAgIHRoaXMucmVxdWlyZWRTZWVkaW5nSG91cnMgPSByZXF1aXJlZFNlZWRpbmdIb3VyczsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFBlcm1pc3Npb25zKCkgeworICAgICAgICByZXR1cm4gcGVybWlzc2lvbnM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UGVybWlzc2lvbnMoU3RyaW5nIHBlcm1pc3Npb25zKSB7CisgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGlrZXMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MaWtlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhM2RjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGlrZXMuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJsaWtlcyIpCitwdWJsaWMgY2xhc3MgTGlrZXMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpICAvLyDkvb/nlKjoh6rlop7kuLvplK4KKyAgICBAQ29sdW1uKG5hbWUgPSAibGlrZUlkIikKKyAgICBwcml2YXRlIExvbmcgbGlrZUlkOworCisgICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQorICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAicG9zdE5vIikKKyAgICBwcml2YXRlIExvbmcgcG9zdE5vOworCisgICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycworICAgIHB1YmxpYyBMb25nIGdldExpa2VJZCgpIHsKKyAgICAgICAgcmV0dXJuIGxpa2VJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRMaWtlSWQoTG9uZyBsaWtlSWQpIHsKKyAgICAgICAgdGhpcy5saWtlSWQgPSBsaWtlSWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgeworICAgICAgICByZXR1cm4gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgeworICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRQb3N0Tm8oKSB7CisgICAgICAgIHJldHVybiBwb3N0Tm87CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UG9zdE5vKExvbmcgcG9zdE5vKSB7CisgICAgICAgIHRoaXMucG9zdE5vID0gcG9zdE5vOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUG9zdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOTRhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUG9zdC5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uTWFuYWdlZFJlZmVyZW5jZTsKKworaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAicG9zdCIpCitwdWJsaWMgY2xhc3MgUG9zdCB7CisKKyAgICBASWQKKyAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKKyAgICBAQ29sdW1uKG5hbWUgPSAicG9zdE5vIikKKyAgICBwcml2YXRlIExvbmcgcG9zdE5vOworCisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXNlcklkIikKKyAgICBwcml2YXRlIExvbmcgdXNlcl9pZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJwb3N0Q29udGVudCIpCisgICAgcHJpdmF0ZSBTdHJpbmcgcG9zdENvbnRlbnQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiaW1hZ2VVcmwiKQorICAgIHByaXZhdGUgU3RyaW5nIGltYWdlVXJsOworCisgICAgQENvbHVtbihuYW1lID0gInBvc3RUaW1lIikKKyAgICBwcml2YXRlIERhdGUgcG9zdFRpbWU7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAicG9zdExpa2VOdW0iKQorICAgIHByaXZhdGUgSW50ZWdlciBwb3N0TGlrZU51bTsKKworICAgIEBDb2x1bW4obmFtZSA9ICJwb3N0Q29sbGVjdE51bSIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIHBvc3RDb2xsZWN0TnVtOworCisgICAgQENvbHVtbihuYW1lID0gInRpdGxlIikKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKworICAgIEBDb2x1bW4obmFtZSA9ICJwb3N0VHlwZSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgcG9zdFR5cGU7CisKKyAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCisgICAgcHVibGljIExvbmcgZ2V0UG9zdE5vKCkgeworICAgICAgICByZXR1cm4gcG9zdE5vOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBvc3RObyhMb25nIHBvc3RObykgeworICAgICAgICB0aGlzLnBvc3RObyA9IHBvc3RObzsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VyX2lkKCkgeworICAgICAgICByZXR1cm4gdXNlcl9pZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VyX2lkKExvbmcgdXNlcikgeworICAgICAgICB0aGlzLnVzZXJfaWQgPSB1c2VyOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9zdENvbnRlbnQoKSB7CisgICAgICAgIHJldHVybiBwb3N0Q29udGVudDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQb3N0Q29udGVudChTdHJpbmcgcG9zdENvbnRlbnQpIHsKKyAgICAgICAgdGhpcy5wb3N0Q29udGVudCA9IHBvc3RDb250ZW50OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW1hZ2VVcmwoKSB7CisgICAgICAgIHJldHVybiBpbWFnZVVybDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJbWFnZVVybChTdHJpbmcgaW1nVXJsKSB7CisgICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBpbWdVcmw7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0UG9zdFRpbWUoKSB7CisgICAgICAgIHJldHVybiBwb3N0VGltZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQb3N0VGltZShEYXRlIHBvc3RUaW1lKSB7CisgICAgICAgIHRoaXMucG9zdFRpbWUgPSBwb3N0VGltZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRQb3N0TGlrZU51bSgpIHsKKyAgICAgICAgcmV0dXJuIHBvc3RMaWtlTnVtOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBvc3RMaWtlTnVtKEludGVnZXIgcG9zdExpa2VOdW0pIHsKKyAgICAgICAgdGhpcy5wb3N0TGlrZU51bSA9IHBvc3RMaWtlTnVtOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldFBvc3RDb2xsZWN0TnVtKCkgeworICAgICAgICByZXR1cm4gcG9zdENvbGxlY3ROdW07CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UG9zdENvbGxlY3ROdW0oSW50ZWdlciBwb3N0Q29sbGVjdE51bSkgeworICAgICAgICB0aGlzLnBvc3RDb2xsZWN0TnVtID0gcG9zdENvbGxlY3ROdW07CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgeworICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRQb3N0VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIHBvc3RUeXBlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBvc3RUeXBlKFN0cmluZyBwb3N0VHlwZSkgeworICAgICAgICB0aGlzLnBvc3RUeXBlID0gcG9zdFR5cGU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Rhc2suamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9UYXNrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3OTZhMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9UYXNrLmphdmEKQEAgLTAsMCArMSw2NiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAidGFza3MiKQorcHVibGljIGNsYXNzIFRhc2sgeworCisgICAgQElkCisgICAgQENvbHVtbihuYW1lID0gInRhc2tfaWQiKQorICAgIHByaXZhdGUgU3RyaW5nIHRhc2tJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJ0aXRsZSIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGU7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZGVzY3JpcHRpb24iLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOworCisgICAgQENvbHVtbihuYW1lID0gInJld2FyZF9leHBlcmllbmNlIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIGludCByZXdhcmRFeHBlcmllbmNlOyAgLy8g5Lu75Yqh5aWW5Yqx55qE57uP6aqMCisKKyAgICBAQ29sdW1uKG5hbWUgPSAicmV3YXJkX3BvaW50cyIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBpbnQgcmV3YXJkUG9pbnRzOyAgLy8g5Lu75Yqh5aWW5Yqx55qE56ev5YiGCisKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFza0lkKCkgeworICAgICAgICByZXR1cm4gdGFza0lkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRhc2tJZChTdHJpbmcgdGFza0lkKSB7CisgICAgICAgIHRoaXMudGFza0lkID0gdGFza0lkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7CisgICAgICAgIHJldHVybiB0aXRsZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIHsKKyAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKworCisgICAgcHVibGljIGludCBnZXRSZXdhcmRFeHBlcmllbmNlKCkgeworICAgICAgICByZXR1cm4gcmV3YXJkRXhwZXJpZW5jZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRSZXdhcmRFeHBlcmllbmNlKGludCByZXdhcmRFeHBlcmllbmNlKSB7CisgICAgICAgIHRoaXMucmV3YXJkRXhwZXJpZW5jZSA9IHJld2FyZEV4cGVyaWVuY2U7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRSZXdhcmRQb2ludHMoKSB7CisgICAgICAgIHJldHVybiByZXdhcmRQb2ludHM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UmV3YXJkUG9pbnRzKGludCByZXdhcmRQb2ludHMpIHsKKyAgICAgICAgdGhpcy5yZXdhcmRQb2ludHMgPSByZXdhcmRQb2ludHM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEeW5hbWljLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckR5bmFtaWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRkM2FjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEeW5hbWljLmphdmEKQEAgLTAsMCArMSwxMDAgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKKworaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK0BFbnRpdHkKK0BUYWJsZShuYW1lID0gInVzZXJfZHluYW1pYyIpCitwdWJsaWMgY2xhc3MgVXNlckR5bmFtaWMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gImR5bmFtaWNfaWQiKQorICAgIHByaXZhdGUgTG9uZyBkeW5hbWljSWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsgIC8vIOWPkeW4g+WKqOaAgeeahOeUqOaIt0lECisKKyAgICBAQ29sdW1uKG5hbWUgPSAidGl0bGUiKQorICAgIHByaXZhdGUgU3RyaW5nIHRpdGxlOyAgLy8g5Yqo5oCB5qCH6aKYCisKKyAgICBAQ29sdW1uKG5hbWUgPSAiY29udGVudCIpCisgICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsgIC8vIOWKqOaAgeWGheWuuQorCisgICAgQENvbHVtbihuYW1lID0gImltYWdlX3VybCIpCisgICAgcHJpdmF0ZSBTdHJpbmcgaW1hZ2VVcmw7ICAvLyDlm77niYdVUkwKKworICAgIEBDb2x1bW4obmFtZSA9ICJ0aW1lIikKKyAgICBwcml2YXRlIERhdGUgdGltZTsgIC8vIOWPkeW4g+WKqOaAgeeahOaXtumXtAorCisgICAgQENvbHVtbihuYW1lID0gImxpa2VzX2NvdW50IikKKyAgICBwcml2YXRlIGludCBsaWtlc0NvdW50ID0gMDsgIC8vIOeCuei1nuaVsAorCisgICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRzX2NvdW50IikKKyAgICBwcml2YXRlIGludCBjb21tZW50c0NvdW50ID0gMDsgIC8vIOivhOiuuuaVsAorCisKKyAgICBwdWJsaWMgTG9uZyBnZXREeW5hbWljSWQoKSB7CisgICAgICAgIHJldHVybiBkeW5hbWljSWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RHluYW1pY0lkKExvbmcgZHluYW1pY0lkKSB7CisgICAgICAgIHRoaXMuZHluYW1pY0lkID0gZHluYW1pY0lkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKKyAgICAgICAgcmV0dXJuIHVzZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKKyAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgeworICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgeworICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7CisgICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRJbWFnZVVybCgpIHsKKyAgICAgICAgcmV0dXJuIGltYWdlVXJsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEltYWdlVXJsKFN0cmluZyBpbWFnZVVybCkgeworICAgICAgICB0aGlzLmltYWdlVXJsID0gaW1hZ2VVcmw7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0VGltZSgpIHsKKyAgICAgICAgcmV0dXJuIHRpbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VGltZShEYXRlIHRpbWUpIHsKKyAgICAgICAgdGhpcy50aW1lID0gdGltZTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldExpa2VzQ291bnQoKSB7CisgICAgICAgIHJldHVybiBsaWtlc0NvdW50OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldExpa2VzQ291bnQoaW50IGxpa2VzQ291bnQpIHsKKyAgICAgICAgdGhpcy5saWtlc0NvdW50ID0gbGlrZXNDb3VudDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldENvbW1lbnRzQ291bnQoKSB7CisgICAgICAgIHJldHVybiBjb21tZW50c0NvdW50OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRzQ291bnQoaW50IGNvbW1lbnRzQ291bnQpIHsKKyAgICAgICAgdGhpcy5jb21tZW50c0NvdW50ID0gY29tbWVudHNDb3VudDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJGb2xsb3cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMxNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJGb2xsb3cuamF2YQpAQCAtMCwwICsxLDU2IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJmb2xsb3ciKQorcHVibGljIGNsYXNzIFVzZXJGb2xsb3cgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gInJlY29yZF9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHJlY29yZElkOworCisgICAgQENvbHVtbihuYW1lID0gImZvbGxvd2VyX2lkIikKKyAgICBwcml2YXRlIExvbmcgZm9sbG93ZXJJZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJmb2xsb3dlZF9pZCIpCisgICAgcHJpdmF0ZSBMb25nIGZvbGxvd2VkSWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZm9sbG93X3RpbWUiKQorICAgIHByaXZhdGUgRGF0ZSBmb2xsb3dUaW1lOworCisgICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycworICAgIHB1YmxpYyBMb25nIGdldElkKCkgeworICAgICAgICByZXR1cm4gcmVjb3JkSWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SWQoTG9uZyByZWNvcmRJZCkgeworICAgICAgICB0aGlzLnJlY29yZElkID0gcmVjb3JkSWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0Rm9sbG93ZXJJZCgpIHsKKyAgICAgICAgcmV0dXJuIGZvbGxvd2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Rm9sbG93ZXJJZChMb25nIGZvbGxvd2VySWQpIHsKKyAgICAgICAgdGhpcy5mb2xsb3dlcklkID0gZm9sbG93ZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRGb2xsb3dlZElkKCkgeworICAgICAgICByZXR1cm4gZm9sbG93ZWRJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRGb2xsb3dlZElkKExvbmcgZm9sbG93ZWRJZCkgeworICAgICAgICB0aGlzLmZvbGxvd2VkSWQgPSBmb2xsb3dlZElkOworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldEZvbGxvd1RpbWUoKSB7CisgICAgICAgIHJldHVybiBmb2xsb3dUaW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEZvbGxvd1RpbWUoRGF0ZSBmb2xsb3dUaW1lKSB7CisgICAgICAgIHRoaXMuZm9sbG93VGltZSA9IGZvbGxvd1RpbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQzYzdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmphdmEKQEAgLTAsMCArMSw2NyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAidXNlcl9pbnZpdGVfY29kZSIpCitwdWJsaWMgY2xhc3MgVXNlckludml0ZUNvZGUgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gImludml0ZV9pZCIpCisgICAgcHJpdmF0ZSBMb25nIGludml0ZUlkOworCisgICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiaW52aXRlX2NvZGUiLCBudWxsYWJsZSA9IGZhbHNlLCB1bmlxdWUgPSB0cnVlKQorICAgIHByaXZhdGUgU3RyaW5nIGludml0ZUNvZGU7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiaXNfdXNlZCIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBCb29sZWFuIGlzVXNlZCA9IGZhbHNlOworCisgICAgQENvbHVtbihuYW1lID0gImNyZWF0ZWRfYXQiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgTG9jYWxEYXRlVGltZSBjcmVhdGVkQXQ7CisKKyAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCisgICAgcHVibGljIExvbmcgZ2V0SW52aXRlSWQoKSB7CisgICAgICAgIHJldHVybiBpbnZpdGVJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJbnZpdGVJZChMb25nIGludml0ZUlkKSB7CisgICAgICAgIHRoaXMuaW52aXRlSWQgPSBpbnZpdGVJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW52aXRlQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIGludml0ZUNvZGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SW52aXRlQ29kZShTdHJpbmcgaW52aXRlQ29kZSkgeworICAgICAgICB0aGlzLmludml0ZUNvZGUgPSBpbnZpdGVDb2RlOworICAgIH0KKworICAgIHB1YmxpYyBCb29sZWFuIGdldElzVXNlZCgpIHsKKyAgICAgICAgcmV0dXJuIGlzVXNlZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJc1VzZWQoQm9vbGVhbiBpc1VzZWQpIHsKKyAgICAgICAgdGhpcy5pc1VzZWQgPSBpc1VzZWQ7CisgICAgfQorCisgICAgcHVibGljIExvY2FsRGF0ZVRpbWUgZ2V0Q3JlYXRlZEF0KCkgeworICAgICAgICByZXR1cm4gY3JlYXRlZEF0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENyZWF0ZWRBdChMb2NhbERhdGVUaW1lIGNyZWF0ZWRBdCkgeworICAgICAgICB0aGlzLmNyZWF0ZWRBdCA9IGNyZWF0ZWRBdDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3ZTQzZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDY3IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitARW50aXR5CitAVGFibGUobmFtZSA9ICJ1c2VyX21lc3NhZ2VzIikKK3B1YmxpYyBjbGFzcyBVc2VyTWVzc2FnZXMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gIm1lc3NhZ2VfaWQiKQorICAgIHByaXZhdGUgTG9uZyBtZXNzYWdlSWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAic2VuZGVyX2lkIikKKyAgICBwcml2YXRlIExvbmcgc2VuZGVySWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAicmVjZWl2ZXJfaWQiKQorICAgIHByaXZhdGUgTG9uZyByZWNlaXZlcklkOworCisgICAgQENvbHVtbihuYW1lID0gImNvbnRlbnQiKQorICAgIHByaXZhdGUgU3RyaW5nIGNvbnRlbnQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidGltZSIpCisgICAgcHJpdmF0ZSBEYXRlIHRpbWU7CisKKworICAgIHB1YmxpYyBMb25nIGdldE1lc3NhZ2VJZCgpIHsKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2VJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlSWQoTG9uZyBtZXNzYWdlSWQpIHsKKyAgICAgICAgdGhpcy5tZXNzYWdlSWQgPSBtZXNzYWdlSWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0U2VuZGVySWQoKSB7CisgICAgICAgIHJldHVybiBzZW5kZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRTZW5kZXJJZChMb25nIHNlbmRlcklkKSB7CisgICAgICAgIHRoaXMuc2VuZGVySWQgPSBzZW5kZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRSZWNlaXZlcklkKCkgeworICAgICAgICByZXR1cm4gcmVjZWl2ZXJJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRSZWNlaXZlcklkKExvbmcgcmVjZWl2ZXJJZCkgeworICAgICAgICB0aGlzLnJlY2VpdmVySWQgPSByZWNlaXZlcklkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgY29udGVudCkgeworICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldFRpbWUoKSB7CisgICAgICAgIHJldHVybiB0aW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRpbWUoRGF0ZSB0aW1lKSB7CisgICAgICAgIHRoaXMudGltZSA9IHRpbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJUYXNrU3RhdHVzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY4MzlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJUYXNrU3RhdHVzLmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAidXNlcl90YXNrX3N0YXR1cyIpCitwdWJsaWMgY2xhc3MgVXNlclRhc2tTdGF0dXMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gInN0YXR1c19pZCIpCisgICAgcHJpdmF0ZSBMb25nIHN0YXR1c0lkOworCisgICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidGFza19pZCIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBTdHJpbmcgdGFza0lkOworCisgICAgQENvbHVtbihuYW1lID0gImN1cnJlbnRfcHJvZ3Jlc3MiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgRmxvYXQgY3VycmVudFByb2dyZXNzOworCisgICAgQENvbHVtbihuYW1lID0gImN1cnJlbnRfZXhwZXJpZW5jZSIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGN1cnJlbnRFeHBlcmllbmNlOworCisgICAgQENvbHVtbihuYW1lID0gImN1cnJlbnRfcG9pbnRzIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIEludGVnZXIgY3VycmVudFBvaW50czsKKworICAgIEBDb2x1bW4obmFtZSA9ICJzdGF0dXMiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1czsKKworICAgIEBDb2x1bW4obmFtZSA9ICJpc19yZXdhcmRfY2xhaW1lZCIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBCb29sZWFuIGlzUmV3YXJkQ2xhaW1lZCA9IGZhbHNlOworCisgICAgcHVibGljIExvbmcgZ2V0U3RhdHVzSWQoKSB7CisgICAgICAgIHJldHVybiBzdGF0dXNJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNJZChMb25nIHN0YXR1c0lkKSB7CisgICAgICAgIHRoaXMuc3RhdHVzSWQgPSBzdGF0dXNJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFza0lkKCkgeworICAgICAgICByZXR1cm4gdGFza0lkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRhc2tJZChTdHJpbmcgdGFza0lkKSB7CisgICAgICAgIHRoaXMudGFza0lkID0gdGFza0lkOworICAgIH0KKworICAgIHB1YmxpYyBGbG9hdCBnZXRDdXJyZW50UHJvZ3Jlc3MoKSB7CisgICAgICAgIHJldHVybiBjdXJyZW50UHJvZ3Jlc3M7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudFByb2dyZXNzKEZsb2F0IGN1cnJlbnRQcm9ncmVzcykgeworICAgICAgICB0aGlzLmN1cnJlbnRQcm9ncmVzcyA9IGN1cnJlbnRQcm9ncmVzczsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50RXhwZXJpZW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRFeHBlcmllbmNlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFeHBlcmllbmNlKEludGVnZXIgY3VycmVudEV4cGVyaWVuY2UpIHsKKyAgICAgICAgdGhpcy5jdXJyZW50RXhwZXJpZW5jZSA9IGN1cnJlbnRFeHBlcmllbmNlOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRQb2ludHMoKSB7CisgICAgICAgIHJldHVybiBjdXJyZW50UG9pbnRzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRQb2ludHMoSW50ZWdlciBjdXJyZW50UG9pbnRzKSB7CisgICAgICAgIHRoaXMuY3VycmVudFBvaW50cyA9IGN1cnJlbnRQb2ludHM7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXMoKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0U3RhdHVzKFN0cmluZyBzdGF0dXMpIHsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7CisgICAgfQorCisgICAgcHVibGljIEJvb2xlYW4gZ2V0SXNSZXdhcmRDbGFpbWVkKCkgeworICAgICAgICByZXR1cm4gaXNSZXdhcmRDbGFpbWVkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldElzUmV3YXJkQ2xhaW1lZChCb29sZWFuIGlzUmV3YXJkQ2xhaW1lZCkgeworICAgICAgICB0aGlzLmlzUmV3YXJkQ2xhaW1lZCA9IGlzUmV3YXJkQ2xhaW1lZDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2Vycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZTc5M2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuamF2YQpAQCAtMCwwICsxLDI0NiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworQEVudGl0eQorQFRhYmxlKG5hbWUgPSAidXNlciIpCitwdWJsaWMgY2xhc3MgVXNlcnMgeworCisgICAgQElkCisgICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCisgICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQorICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXNlcm5hbWUiLCBudWxsYWJsZSA9IGZhbHNlLHVuaXF1ZSA9IHRydWUpCisgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcm5hbWU7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiYXZhdGFyX3VybCIsIG51bGxhYmxlID0gdHJ1ZSkKKyAgICBwcml2YXRlIFN0cmluZyBhdmF0YXJVcmw7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZW1haWwiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgU3RyaW5nIGVtYWlsOworCisgICAgQENvbHVtbihuYW1lID0gInBhc3N3b3JkIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKKworICAgIEBDb2x1bW4obmFtZSA9ICJyb2xlIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIFN0cmluZyByb2xlOworCisgICAgQENvbHVtbihuYW1lID0gImludml0ZV9jb3VudCIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGludml0ZUNvdW50OworCisgICAgQENvbHVtbihuYW1lID0gImxldmVsIiwgbnVsbGFibGUgPSBmYWxzZSkKKyAgICBwcml2YXRlIExvbmcgbGV2ZWw7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXBsb2FkX2NvdW50IikKKyAgICBwcml2YXRlIEZsb2F0IHVwbG9hZENvdW50OworCisgICAgQENvbHVtbihuYW1lID0gImRvd25sb2FkX2NvdW50IikKKyAgICBwcml2YXRlIEZsb2F0IGRvd25sb2FkQ291bnQ7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAic2hhcmVfcmF0ZSIpCisgICAgcHJpdmF0ZSBGbG9hdCBzaGFyZVJhdGU7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAicmVnaXN0cmF0aW9uX2RhdGUiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgRGF0ZSByZWdpc3RyYXRpb25EYXRlOworCisgICAgQENvbHVtbihuYW1lID0gImxhc3RfbG9naW5fdGltZSIpCisgICAgcHJpdmF0ZSBEYXRlIGxhc3RMb2dpblRpbWU7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9wb2ludHMiKQorICAgIHByaXZhdGUgSW50ZWdlciB1c2VyUG9pbnRzOworCisgICAgQENvbHVtbihuYW1lID0gImlzX3Byb21vIikKKyAgICBwcml2YXRlIEJvb2xlYW4gaXNQcm9tbzsKKworICAgIEBDb2x1bW4obmFtZSA9ICJjdXJyZW50X2V4cGVyaWVuY2UiLCBudWxsYWJsZSA9IGZhbHNlKQorICAgIHByaXZhdGUgSW50ZWdlciBjdXJyZW50RXhwZXJpZW5jZTsgIC8vIOW9k+WJjee7j+mqjOWAvAorCisgICAgQENvbHVtbihuYW1lID0gImN1cnJlbnRfc2VlZGluZ19ob3VycyIsIG51bGxhYmxlID0gZmFsc2UpCisgICAgcHJpdmF0ZSBGbG9hdCBjdXJyZW50U2VlZGluZ0hvdXJzOyAgLy8g5b2T5YmN5YGa56eN5pe26ZW/CisKKworICAgIEBDb2x1bW4obmFtZSA9ICJnZW5kZXIiLCBudWxsYWJsZSA9IHRydWUpCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZGVyOyAgLy8g5oCn5YirCisKKyAgICBAQ29sdW1uKG5hbWUgPSAiZGVzY3JpcHRpb24iLCBudWxsYWJsZSA9IHRydWUpCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247ICAvLyDkuKrkurrmj4/ov7AKKworICAgIEBDb2x1bW4obmFtZSA9ICJob2JiaWVzIiwgbnVsbGFibGUgPSB0cnVlKQorICAgIHByaXZhdGUgU3RyaW5nIGhvYmJpZXM7CisKKyAgICBAQ29sdW1uKG5hbWUgPSAicmVnaXN0cmF0aW9uX3RpbWUiLCBudWxsYWJsZSA9IGZhbHNlLCB1cGRhdGFibGUgPSBmYWxzZSkKKyAgICBAVGVtcG9yYWwoVGVtcG9yYWxUeXBlLlRJTUVTVEFNUCkKKyAgICBwcml2YXRlIERhdGUgcmVnaXN0cmF0aW9uVGltZTsKKworICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKKyAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7CisgICAgICAgIHJldHVybiB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKSB7CisgICAgICAgIHJldHVybiB1c2VybmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VybmFtZShTdHJpbmcgdXNlcm5hbWUpIHsKKyAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXZhdGFyVXJsKCkgeworICAgICAgICByZXR1cm4gYXZhdGFyVXJsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEF2YXRhclVybChTdHJpbmcgYXZhdGFyVXJsKSB7CisgICAgICAgIHRoaXMuYXZhdGFyVXJsID0gYXZhdGFyVXJsOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKSB7CisgICAgICAgIHJldHVybiBlbWFpbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRFbWFpbChTdHJpbmcgZW1haWwpIHsKKyAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CisgICAgICAgIHJldHVybiBwYXNzd29yZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dvcmQpIHsKKyAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZSgpIHsKKyAgICAgICAgcmV0dXJuIHJvbGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Um9sZShTdHJpbmcgcm9sZSkgeworICAgICAgICB0aGlzLnJvbGUgPSByb2xlOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEludml0ZUNvdW50KCkgeworICAgICAgICByZXR1cm4gaW52aXRlQ291bnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SW52aXRlQ291bnQoSW50ZWdlciBpbnZpdGVDb3VudCkgeworICAgICAgICB0aGlzLmludml0ZUNvdW50ID0gaW52aXRlQ291bnQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0TGV2ZWwoKSB7CisgICAgICAgIHJldHVybiBsZXZlbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRMZXZlbChMb25nIGxldmVsKSB7CisgICAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKKyAgICB9CisKKyAgICBwdWJsaWMgRmxvYXQgZ2V0VXBsb2FkQ291bnQoKSB7CisgICAgICAgIHJldHVybiB1cGxvYWRDb3VudDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVcGxvYWRDb3VudChGbG9hdCB1cGxvYWRDb3VudCkgeworICAgICAgICB0aGlzLnVwbG9hZENvdW50ID0gdXBsb2FkQ291bnQ7CisgICAgfQorCisgICAgcHVibGljIEZsb2F0IGdldERvd25sb2FkQ291bnQoKSB7CisgICAgICAgIHJldHVybiBkb3dubG9hZENvdW50OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldERvd25sb2FkQ291bnQoRmxvYXQgZG93bmxvYWRDb3VudCkgeworICAgICAgICB0aGlzLmRvd25sb2FkQ291bnQgPSBkb3dubG9hZENvdW50OworICAgIH0KKworICAgIHB1YmxpYyBGbG9hdCBnZXRTaGFyZVJhdGUoKSB7CisgICAgICAgIHJldHVybiBzaGFyZVJhdGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0U2hhcmVSYXRlKEZsb2F0IHNoYXJlUmF0ZSkgeworICAgICAgICB0aGlzLnNoYXJlUmF0ZSA9IHNoYXJlUmF0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgRGF0ZSBnZXRSZWdpc3RyYXRpb25EYXRlKCkgeworICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uRGF0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRSZWdpc3RyYXRpb25EYXRlKERhdGUgcmVnaXN0cmF0aW9uRGF0ZSkgeworICAgICAgICB0aGlzLnJlZ2lzdHJhdGlvbkRhdGUgPSByZWdpc3RyYXRpb25EYXRlOworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldExhc3RMb2dpblRpbWUoKSB7CisgICAgICAgIHJldHVybiBsYXN0TG9naW5UaW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldExhc3RMb2dpblRpbWUoRGF0ZSBsYXN0TG9naW5UaW1lKSB7CisgICAgICAgIHRoaXMubGFzdExvZ2luVGltZSA9IGxhc3RMb2dpblRpbWU7CisgICAgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0VXNlclBvaW50cygpIHsKKyAgICAgICAgcmV0dXJuIHVzZXJQb2ludHM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VXNlclBvaW50cyhJbnRlZ2VyIHVzZXJQb2ludHMpIHsKKyAgICAgICAgdGhpcy51c2VyUG9pbnRzID0gdXNlclBvaW50czsKKyAgICB9CisKKyAgICBwdWJsaWMgQm9vbGVhbiBnZXRJc1Byb21vKCkgeworICAgICAgICByZXR1cm4gaXNQcm9tbzsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJc1Byb21vKEJvb2xlYW4gaXNQcm9tbykgeworICAgICAgICB0aGlzLmlzUHJvbW8gPSBpc1Byb21vOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRFeHBlcmllbmNlKCkgeworICAgICAgICByZXR1cm4gY3VycmVudEV4cGVyaWVuY2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudEV4cGVyaWVuY2UoSW50ZWdlciBjdXJyZW50RXhwZXJpZW5jZSkgeworICAgICAgICB0aGlzLmN1cnJlbnRFeHBlcmllbmNlID0gY3VycmVudEV4cGVyaWVuY2U7CisgICAgfQorCisgICAgcHVibGljIEZsb2F0IGdldEN1cnJlbnRTZWVkaW5nSG91cnMoKSB7CisgICAgICAgIHJldHVybiBjdXJyZW50U2VlZGluZ0hvdXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRTZWVkaW5nSG91cnMoRmxvYXQgY3VycmVudFNlZWRpbmdIb3VycykgeworICAgICAgICB0aGlzLmN1cnJlbnRTZWVkaW5nSG91cnMgPSBjdXJyZW50U2VlZGluZ0hvdXJzOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0R2VuZGVyKCkgeworICAgICAgICByZXR1cm4gZ2VuZGVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEdlbmRlcihTdHJpbmcgZ2VuZGVyKSB7CisgICAgICAgIHRoaXMuZ2VuZGVyID0gZ2VuZGVyOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SG9iYmllcygpIHsKKyAgICAgICAgcmV0dXJuIGhvYmJpZXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SG9iYmllcyhTdHJpbmcgaG9iYmllcykgeworICAgICAgICB0aGlzLmhvYmJpZXMgPSBob2JiaWVzOworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldFJlZ2lzdHJhdGlvblRpbWUoKSB7CisgICAgICAgIHJldHVybiByZWdpc3RyYXRpb25UaW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlZ2lzdHJhdGlvblRpbWUoRGF0ZSByZWdpc3RyYXRpb25UaW1lKSB7CisgICAgICAgIHRoaXMucmVnaXN0cmF0aW9uVGltZSA9IHJlZ2lzdHJhdGlvblRpbWU7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0NvbGxlY3Rpb25zUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db2xsZWN0aW9uc1JlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjE5MmJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db2xsZWN0aW9uc1JlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uYWw7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5Lk1vZGlmeWluZzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuUXVlcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7CisKK0BSZXBvc2l0b3J5CitwdWJsaWMgaW50ZXJmYWNlIENvbGxlY3Rpb25zUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8Q29sbGVjdGlvbnMsIExvbmc+IHsKKyAgICBATW9kaWZ5aW5nCisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBAUXVlcnkoIkRFTEVURSBGUk9NIENvbGxlY3Rpb25zIGwgV0hFUkUgbC51c2VySWQgPSA6dXNlcklkIEFORCBsLnBvc3RObyA9IDpwb3N0Tm8iKQorICAgIHZvaWQgZGVsZXRlTGlrZUJ5VXNlcklkQW5kUG9zdE5vKExvbmcgdXNlcklkLCBMb25nIHBvc3RObyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0NvbW1lbnRSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0NvbW1lbnRSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NjMwOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29tbWVudFJlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbW1lbnRzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OworCisKK3B1YmxpYyBpbnRlcmZhY2UgQ29tbWVudFJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PENvbW1lbnRzLCBMb25nPiB7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODZiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkR5bmFtaWNDb21tZW50OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBpbnRlcmZhY2UgRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxEeW5hbWljQ29tbWVudCwgTG9uZz4geworCisgICAgTGlzdDxEeW5hbWljQ29tbWVudD4gZmluZEJ5RHluYW1pY0lkKExvbmcgZHluYW1pY0lkKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0xpa2VzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlYzAwMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0xpa2VzUmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkR5bmFtaWNMaWtlczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgaW50ZXJmYWNlIER5bmFtaWNMaWtlc1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PER5bmFtaWNMaWtlcywgTG9uZz4geworCisgICAgTGlzdDxEeW5hbWljTGlrZXM+IGZpbmRCeUR5bmFtaWNJZChMb25nIGR5bmFtaWNJZCk7CisgICAgRHluYW1pY0xpa2VzIGZpbmRCeVVzZXJJZEFuZER5bmFtaWNJZChMb25nIHVzZXJJZCwgTG9uZyBkeW5hbWljSWQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9FeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MjhlNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5FeHBlcmllbmNlSGlzdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKKworcHVibGljIGludGVyZmFjZSBFeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PEV4cGVyaWVuY2VIaXN0b3J5LCBMb25nPiB7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmY2Y5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkZyaWVuZFJlbGF0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBpbnRlcmZhY2UgRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxGcmllbmRSZWxhdGlvbiwgTG9uZz4geworICAgIC8vIOafpeaJvuW9k+WJjeeUqOaIt+eahOaJgOacieWlveWPi0lECisgICAgTGlzdDxGcmllbmRSZWxhdGlvbj4gZmluZEJ5VXNlcklkKExvbmcgdXNlcklkKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2RmMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cENvbW1lbnRzUmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwQ29tbWVudHM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7CisKK0BSZXBvc2l0b3J5CitwdWJsaWMgaW50ZXJmYWNlIEdyb3VwQ29tbWVudHNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxHcm91cENvbW1lbnRzLCBMb25nPiB7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cE1lbWJlcnNSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzMTQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwTWVtYmVyczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitAUmVwb3NpdG9yeQorcHVibGljIGludGVyZmFjZSBHcm91cE1lbWJlcnNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxHcm91cE1lbWJlcnMsIExvbmc+IHsKKworICAgIC8vIOajgOafpeeUqOaIt+aYr+WQpuW3sue7j+aYr+ivpeWwj+e7hOeahOaIkOWRmAorICAgIGJvb2xlYW4gZXhpc3RzQnlHcm91cElkQW5kVXNlcklkKExvbmcgZ3JvdXBJZCwgTG9uZyB1c2VySWQpOworCisgICAgLy8g5Yig6Zmk55So5oi35ZKM5bCP57uE55qE5YWz6IGU6K6w5b2VCisgICAgdm9pZCBkZWxldGVCeUdyb3VwSWRBbmRVc2VySWQoTG9uZyBncm91cElkLCBMb25nIHVzZXJJZCk7CisKKyAgICAvLyDpgJrov4cgZ3JvdXBJZCDojrflj5bmiYDmnInmiJDlkZjnmoQgdXNlcklkCisgICAgTGlzdDxHcm91cE1lbWJlcnM+IGZpbmRCeUdyb3VwSWQoTG9uZyBncm91cElkKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBQb3N0UmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFBvc3RSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1YTM0OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBQb3N0UmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwUG9zdDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitAUmVwb3NpdG9yeQorcHVibGljIGludGVyZmFjZSBHcm91cFBvc3RSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxHcm91cFBvc3QsIExvbmc+IHsKKworICAgIExpc3Q8R3JvdXBQb3N0PiBmaW5kQnlHcm91cElkKExvbmcgZ3JvdXBJZCk7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUmVwb3NpdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODBlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5kb21haW4uUGFnZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2VhYmxlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5RdWVyeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEucmVwb3NpdG9yeS5xdWVyeS5QYXJhbTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKKworQFJlcG9zaXRvcnkKK3B1YmxpYyBpbnRlcmZhY2UgR3JvdXBSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxHcm91cCwgTG9uZz4geworCisgICAgLy8g5qih57OK5pCc57Si5bCP57uE5ZCN56ew5bm25oyJ57G75Yir562b6YCJCisgICAgQFF1ZXJ5KCJTRUxFQ1QgZyBGUk9NIEdyb3VwIGcgV0hFUkUgZy5ncm91cE5hbWUgTElLRSAlOm5hbWUlIEFORCAoOmNhdGVnb3J5IElTIE5VTEwgT1IgZy5jYXRlZ29yeSA9IDpjYXRlZ29yeSkiKQorICAgIFBhZ2U8R3JvdXA+IHNlYXJjaEdyb3VwcyhAUGFyYW0oIm5hbWUiKSBTdHJpbmcgbmFtZSwgQFBhcmFtKCJjYXRlZ29yeSIpIFN0cmluZyBjYXRlZ29yeSwgUGFnZWFibGUgcGFnZWFibGUpOworCisgICAgLy8g5qC55o2u57G75Yir562b6YCJ5bCP57uECisgICAgQFF1ZXJ5KCJTRUxFQ1QgZyBGUk9NIEdyb3VwIGcgV0hFUkUgKDpjYXRlZ29yeSBJUyBOVUxMIE9SIGcuY2F0ZWdvcnkgPSA6Y2F0ZWdvcnkpIikKKyAgICBQYWdlPEdyb3VwPiBzZWFyY2hXaXRoRmlsdGVycyhAUGFyYW0oImNhdGVnb3J5IikgU3RyaW5nIGNhdGVnb3J5LCBQYWdlYWJsZSBwYWdlYWJsZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xldmVsUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MZXZlbFJlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmU4MjY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MZXZlbFJlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MZXZlbDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKKworQFJlcG9zaXRvcnkKK3B1YmxpYyBpbnRlcmZhY2UgTGV2ZWxSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxMZXZlbCwgTG9uZz4geworCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xpa2VzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MaWtlc1JlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTE0NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MaWtlc1JlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MaWtlczsKK2ltcG9ydCBqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uYWw7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5Lk1vZGlmeWluZzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuUXVlcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7CisKK0BSZXBvc2l0b3J5CitwdWJsaWMgaW50ZXJmYWNlIExpa2VzUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8TGlrZXMsIExvbmc+IHsKKyAgICBATW9kaWZ5aW5nCisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBAUXVlcnkoIkRFTEVURSBGUk9NIExpa2VzIGwgV0hFUkUgbC51c2VySWQgPSA6dXNlcklkIEFORCBsLnBvc3RObyA9IDpwb3N0Tm8iKQorICAgIHZvaWQgZGVsZXRlTGlrZUJ5VXNlcklkQW5kUG9zdE5vKExvbmcgdXNlcklkLCBMb25nIHBvc3RObyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmMmNiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvUG9zdFJlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qb3N0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OworCitpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOworCitwdWJsaWMgaW50ZXJmYWNlIFBvc3RSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxQb3N0LCBMb25nPiB7CisgICAgLy8g5qC55o2uIHBvc3RObyDmn6Xmib7luJblrZAKKyAgICBPcHRpb25hbDxQb3N0PiBmaW5kQnlQb3N0Tm8oTG9uZyBwb3N0Tm8pOworCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Rhc2tSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Rhc2tSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlMWI2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVGFza1JlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRhc2s7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7CisKK3B1YmxpYyBpbnRlcmZhY2UgVGFza1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFRhc2ssIFN0cmluZz4geworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRHluYW1pY1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1YWUxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckR5bmFtaWM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQFJlcG9zaXRvcnkKK3B1YmxpYyBpbnRlcmZhY2UgVXNlckR5bmFtaWNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxVc2VyRHluYW1pYywgTG9uZz4geworCisgICAgTGlzdDxVc2VyRHluYW1pYz4gZmluZEJ5VXNlcklkKExvbmcgdXNlcklkKTsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRm9sbG93UmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRm9sbG93UmVwb3NpdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MmQwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmphdmEKQEAgLTAsMCArMSwxNiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckZvbGxvdzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitAUmVwb3NpdG9yeQorcHVibGljIGludGVyZmFjZSBVc2VyRm9sbG93UmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8VXNlckZvbGxvdywgTG9uZz4geworCisgICAgLy8g5p+l6K+i5piv5ZCm5a2Y5Zyo5p+Q5Liq55So5oi355qE5YWz5rOo6K6w5b2VCisgICAgVXNlckZvbGxvdyBmaW5kQnlGb2xsb3dlcklkQW5kRm9sbG93ZWRJZChMb25nIGZvbGxvd2VySWQsIExvbmcgZm9sbG93ZWRJZCk7CisgICAgTGlzdDxVc2VyRm9sbG93PiBmaW5kQnlGb2xsb3dlZElkKExvbmcgZm9sbG93ZWRJZCk7CisgICAgTGlzdDxVc2VyRm9sbG93PiBmaW5kQnlGb2xsb3dlcklkKExvbmcgZm9sbG93ZXJJZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmZhMzkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VySW52aXRlQ29kZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKKworcHVibGljIGludGVyZmFjZSBVc2VySW52aXRlQ29kZVJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJJbnZpdGVDb2RlLCBMb25nPiB7CisKKyAgICAvLyDmn6Xmib7mn5DkuKrnlKjmiLfnmoTmiYDmnInpgoDor7fnoIEKKyAgICBMaXN0PFVzZXJJbnZpdGVDb2RlPiBmaW5kQnlVc2VySWQoTG9uZyB1c2VySWQpOworCisgICAgLy8g5p+l5om+5p+Q5Liq6YKA6K+356CB5piv5ZCm5bey57uP6KKr5L2/55SoCisgICAgT3B0aW9uYWw8VXNlckludml0ZUNvZGU+IGZpbmRCeUludml0ZUNvZGUoU3RyaW5nIGludml0ZUNvZGUpOworCisgICAgLy8g5p+l5om+5p+Q5Liq55So5oi35pyq5L2/55So55qE6YKA6K+356CBCisgICAgTGlzdDxVc2VySW52aXRlQ29kZT4gZmluZEJ5VXNlcklkQW5kSXNVc2VkRmFsc2UoTG9uZyB1c2VySWQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQzNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlck1lc3NhZ2VzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5SZXBvc2l0b3J5OworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BSZXBvc2l0b3J5CitwdWJsaWMgaW50ZXJmYWNlIFVzZXJNZXNzYWdlc1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJNZXNzYWdlcywgTG9uZz4geworCisgICAgLy8g5p+l6K+i5b2T5YmN55So5oi355qE5omA5pyJ5raI5oGvCisgICAgTGlzdDxVc2VyTWVzc2FnZXM+IGZpbmRCeVNlbmRlcklkT3JSZWNlaXZlcklkKExvbmcgc2VuZGVySWQsIExvbmcgcmVjZWl2ZXJJZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyN2M1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKK2ltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CisKK3B1YmxpYyBpbnRlcmZhY2UgVXNlclJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJzLCBMb25nPiB7CisgICAgT3B0aW9uYWw8VXNlcnM+IGZpbmRCeUVtYWlsKFN0cmluZyBlbWFpbCk7CisgICAgT3B0aW9uYWw8VXNlcnM+IGZpbmRCeVVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUzOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyVGFza1N0YXR1czsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKKworcHVibGljIGludGVyZmFjZSBVc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJUYXNrU3RhdHVzLCBMb25nPiB7CisgICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IGZpbmRCeVVzZXJJZEFuZFRhc2tJZChMb25nIHVzZXJJZCwgU3RyaW5nIHRhc2tJZCk7CisgICAgTGlzdDxVc2VyVGFza1N0YXR1cz4gZmluZEJ5VXNlcklkQW5kU3RhdHVzKExvbmcgdXNlcklkLCBTdHJpbmcgc3RhdHVzKTsKKyAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gZmluZEZpcnN0QnlVc2VySWRBbmRTdGF0dXMoTG9uZyB1c2VySWQsIFN0cmluZyBzdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Db21tZW50U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Db21tZW50U2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDJjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0NvbW1lbnRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbW1lbnRzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUG9zdDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LkNvbW1lbnRSZXBvc2l0b3J5OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlBvc3RSZXBvc2l0b3J5OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CisKK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgQ29tbWVudFNlcnZpY2UgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgQ29tbWVudFJlcG9zaXRvcnkgY29tbWVudFJlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBQb3N0UmVwb3NpdG9yeSBwb3N0UmVwb3NpdG9yeTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OworCisgICAgLy8g5re75Yqg6K+E6K66CisgICAgcHVibGljIHZvaWQgYWRkQ29tbWVudChMb25nIHBvc3RJZCwgQ29tbWVudHMgY29tbWVudCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8g5p+l5om+5biW5a2QCisgICAgICAgICAgICBQb3N0IHBvc3QgPSBwb3N0UmVwb3NpdG9yeS5maW5kQnlJZChwb3N0SWQpLm9yRWxzZVRocm93KCgpIC0+IHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCB3aXRoIElEICIgKyBwb3N0SWQgKyAiIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIOafpeaJvueUqOaItworICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGNvbW1lbnQuZ2V0VXNlcklkKCkpLm9yRWxzZVRocm93KCgpIC0+IHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciB3aXRoIElEICIgKyBjb21tZW50LmdldFVzZXJJZCgpICsgIiBub3QgZm91bmQiKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyDorr7nva7or4TorrrnmoTnm7jlhbPlsZ7mgKcKKyAgICAgICAgICAgIGNvbW1lbnQuc2V0UG9zdChwb3N0KTsKKyAgICAgICAgICAgIGNvbW1lbnQuc2V0VXNlcklkKHVzZXIuZ2V0VXNlcklkKCkpOworICAgICAgICAgICAgY29tbWVudC5zZXRDb21tZW50VGltZShuZXcgamF2YS51dGlsLkRhdGUoKSk7CisKKyAgICAgICAgICAgIGlmIChjb21tZW50LmdldFBhcmVudENvbW1lbnQoKSAhPSBudWxsICYmIGNvbW1lbnQuZ2V0UGFyZW50Q29tbWVudCgpICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyDmn6Xmib7niLbor4TorroKKyAgICAgICAgICAgICAgICBDb21tZW50cyBwYXJlbnRDb21tZW50ID0gY29tbWVudFJlcG9zaXRvcnkuZmluZEJ5SWQoY29tbWVudC5nZXRQYXJlbnRDb21tZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBhcmVudCBjb21tZW50IHdpdGggSUQgIiArIGNvbW1lbnQuZ2V0UGFyZW50Q29tbWVudCgpICsgIiBub3QgZm91bmQiKSk7CisgICAgICAgICAgICAgICAgY29tbWVudC5zZXRQYXJlbnRDb21tZW50KHBhcmVudENvbW1lbnQuZ2V0Q29tbWVudElkKCkpOyAgLy8g6K6+572u54i26K+E6K66IElECisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbW1lbnQuc2V0UGFyZW50Q29tbWVudCgwTCk7ICAvLyDorr7nva7kuLogMO+8jOihqOekuuayoeacieeItuivhOiuugorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyDkv53lrZjor4TorroKKyAgICAgICAgICAgIGNvbW1lbnRSZXBvc2l0b3J5LnNhdmUoY29tbWVudCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyDmjZXojrfku7vkvZXlvILluLjlubbmiZPljbDloIbmoIjkv6Hmga8KKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYWRkaW5nIHRoZSBjb21tZW50OiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g6I635Y+W5oyH5a6a5biW5a2Q55qE5omA5pyJ6K+E6K66CisgICAgcHVibGljIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0Q29tbWVudHNCeVBvc3RJZChMb25nIHBvc3RJZCkgeworICAgICAgICBMaXN0PENvbW1lbnRzPiBjb21tZW50cyA9IGNvbW1lbnRSZXBvc2l0b3J5LmZpbmRBbGwoKQorICAgICAgICAgICAgICAgIC5zdHJlYW0oKQorICAgICAgICAgICAgICAgIC5maWx0ZXIoY29tbWVudCAtPiBjb21tZW50LmdldFBvc3QoKS5nZXRQb3N0Tm8oKS5lcXVhbHMocG9zdElkKSkgIC8vIOmAmui/hyBwb3N0IOeahCBwb3N0Tm8g6L+H5ruk6K+E6K66CisgICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisKKyAgICAgICAgaWYgKGNvbW1lbnRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICB9CisKKyAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgZm9yIChDb21tZW50cyBjb21tZW50IDogY29tbWVudHMpIHsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gY29tbWVudERhdGEgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbW1lbnRJZCIsIGNvbW1lbnQuZ2V0Q29tbWVudElkKCkpOworICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJwb3N0X2lkIiwgY29tbWVudC5nZXRQb3N0KCkuZ2V0UG9zdE5vKCkpOworICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJ1c2VySWQiLCBjb21tZW50LmdldFVzZXJJZCgpKTsKKworICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGNvbW1lbnQuZ2V0VXNlcklkKCkpLm9yRWxzZShudWxsKTsKKyAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgibmlja25hbWUiLCB1c2VyICE9IG51bGwgPyB1c2VyLmdldFVzZXJuYW1lKCkgOiBudWxsKTsKKyAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgiYXZhdGFyX3VybCIsIHVzZXIgIT0gbnVsbCA/IHVzZXIuZ2V0QXZhdGFyVXJsKCkgOiBudWxsKTsKKworICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJjb250ZW50IiwgY29tbWVudC5nZXRDb250ZW50KCkpOworICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJpc0Fub255bW91cyIsIGNvbW1lbnQuZ2V0SXNBbm9ueW1vdXMoKSk7CisgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImxpa2VzQ291bnQiLCBjb21tZW50LmdldExpa2VzQ291bnQoKSk7CisgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInJlcGx5Q291bnQiLCBjb21tZW50LmdldFJlcGx5Q291bnQoKSk7CisgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbW1lbnRUaW1lIiwgY29tbWVudC5nZXRDb21tZW50VGltZSgpKTsKKyAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgicGFyZW50Q29tbWVudCIsIGNvbW1lbnQuZ2V0UGFyZW50Q29tbWVudCgpKTsKKworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJlbnRDb21tZW50RGF0YSA9IGdldFBhcmVudENvbW1lbnREYXRhKGNvbW1lbnQuZ2V0UGFyZW50Q29tbWVudCgpKTsKKyAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgicGFyZW50Q29tbWVudERhdGEiLCBwYXJlbnRDb21tZW50RGF0YSk7CisKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoY29tbWVudERhdGEpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyDpgJLlvZLmn6Xmib7niLbor4TorrrnmoTlhoXlrrkKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0UGFyZW50Q29tbWVudERhdGEoTG9uZyBwYXJlbnRDb21tZW50SWQpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJlbnRDb21tZW50RGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgaWYgKHBhcmVudENvbW1lbnRJZCAhPSBudWxsICYmIHBhcmVudENvbW1lbnRJZCAhPSAwKSB7CisgICAgICAgICAgICAvLyDmn6Xmib7niLbor4TorroKKyAgICAgICAgICAgIENvbW1lbnRzIHBhcmVudENvbW1lbnQgPSBjb21tZW50UmVwb3NpdG9yeS5maW5kQnlJZChwYXJlbnRDb21tZW50SWQpLm9yRWxzZShudWxsKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnRDb21tZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRDb21tZW50RGF0YS5wdXQoImNvbW1lbnRJZCIsIHBhcmVudENvbW1lbnQuZ2V0Q29tbWVudElkKCkpOworICAgICAgICAgICAgICAgIHBhcmVudENvbW1lbnREYXRhLnB1dCgiY29udGVudCIsIHBhcmVudENvbW1lbnQuZ2V0Q29udGVudCgpKTsKKyAgICAgICAgICAgICAgICBwYXJlbnRDb21tZW50RGF0YS5wdXQoInVzZXJJZCIsIHBhcmVudENvbW1lbnQuZ2V0VXNlcklkKCkpOworCisgICAgICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHBhcmVudENvbW1lbnQuZ2V0VXNlcklkKCkpLm9yRWxzZShudWxsKTsKKyAgICAgICAgICAgICAgICBwYXJlbnRDb21tZW50RGF0YS5wdXQoIm5pY2tuYW1lIiwgdXNlciAhPSBudWxsID8gdXNlci5nZXRVc2VybmFtZSgpIDogbnVsbCk7CisgICAgICAgICAgICAgICAgcGFyZW50Q29tbWVudERhdGEucHV0KCJhdmF0YXJfdXJsIiwgdXNlciAhPSBudWxsID8gdXNlci5nZXRBdmF0YXJVcmwoKSA6IG51bGwpOworCisgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBncmFuZFBhcmVudERhdGEgPSBnZXRQYXJlbnRDb21tZW50RGF0YShwYXJlbnRDb21tZW50LmdldFBhcmVudENvbW1lbnQoKSk7CisgICAgICAgICAgICAgICAgcGFyZW50Q29tbWVudERhdGEucHV0KCJwYXJlbnRDb21tZW50RGF0YSIsIGdyYW5kUGFyZW50RGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhcmVudENvbW1lbnREYXRhOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRHluYW1pY1NlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRHluYW1pY1NlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTM2MDRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9EeW5hbWljU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjc1IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS4qOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5Lio7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLm11bHRpcGFydC5NdWx0aXBhcnRGaWxlOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworaW1wb3J0IGphdmEudXRpbC4qOworCitAU2VydmljZQorcHVibGljIGNsYXNzIER5bmFtaWNTZXJ2aWNlIHsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJEeW5hbWljUmVwb3NpdG9yeSB1c2VyRHluYW1pY1JlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIER5bmFtaWNDb21tZW50UmVwb3NpdG9yeSBkeW5hbWljQ29tbWVudFJlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBEeW5hbWljTGlrZXNSZXBvc2l0b3J5IGR5bmFtaWNMaWtlc1JlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBGcmllbmRSZWxhdGlvblJlcG9zaXRvcnkgZnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX0RJUiA9ICJ1cGxvYWRzL3Bvc3QvIjsKKworICAgIC8vIOWIm+W7uuWlveWPi+WKqOaAgQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNyZWF0ZUR5bmFtaWMoTG9uZyB1c2VySWQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGNvbnRlbnQsIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7CisgICAgICAgIC8vIOafpeaJvueUqOaIt+S/oeaBrworICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKQorICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciBub3QgZm91bmQiKSk7CisKKyAgICAgICAgLy8g5Yib5bu65paw55qE5Yqo5oCBCisgICAgICAgIFVzZXJEeW5hbWljIHVzZXJEeW5hbWljID0gbmV3IFVzZXJEeW5hbWljKCk7CisgICAgICAgIHVzZXJEeW5hbWljLnNldFVzZXJJZCh1c2VySWQpOworICAgICAgICB1c2VyRHluYW1pYy5zZXRUaXRsZSh0aXRsZSAhPSBudWxsID8gdGl0bGUgOiAi6buY6K6k5qCH6aKYIik7CisgICAgICAgIHVzZXJEeW5hbWljLnNldENvbnRlbnQoY29udGVudCk7CisgICAgICAgIHVzZXJEeW5hbWljLnNldFRpbWUobmV3IERhdGUoKSk7CisgICAgICAgIHVzZXJEeW5hbWljLnNldExpa2VzQ291bnQoMCk7CisgICAgICAgIHVzZXJEeW5hbWljLnNldENvbW1lbnRzQ291bnQoMCk7CisKKyAgICAgICAgLy8g5aSE55CG5Zu+54mH5LiK5LygCisgICAgICAgIFN0cmluZ0J1aWxkZXIgaW1hZ2VVcmxzQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIGlmIChpbWFnZUZpbGVzICE9IG51bGwgJiYgaW1hZ2VGaWxlcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltYWdlRmlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VVcmxzQnVpbGRlci5hcHBlbmQoIiwiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlVXJsID0gc2F2ZUltYWdlKGltYWdlRmlsZXNbaV0pOworICAgICAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZChpbWFnZVVybCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW1hZ2UgdXBsb2FkIGZhaWxlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyDlsIblpJrkuKrlm77niYcgVVJMIOaLvOaOpQorICAgICAgICB1c2VyRHluYW1pYy5zZXRJbWFnZVVybChpbWFnZVVybHNCdWlsZGVyLnRvU3RyaW5nKCkpOworCisgICAgICAgIC8vIOS/neWtmOaVsOaNruW6kworICAgICAgICBVc2VyRHluYW1pYyBzYXZlZFVzZXJEeW5hbWljID0gdXNlckR5bmFtaWNSZXBvc2l0b3J5LnNhdmUodXNlckR5bmFtaWMpOworCisgICAgICAgIC8vIOi/lOWbnue7k+aenAorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoImR5bmFtaWNJZCIsIHNhdmVkVXNlckR5bmFtaWMuZ2V0RHluYW1pY0lkKCkpOworICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Yqo5oCB5Yib5bu65oiQ5YqfIik7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICAvLyDkv53lrZjlm77niYflubbov5Tlm57lm77niYfnmoQgVVJMCisgICAgcHVibGljIFN0cmluZyBzYXZlSW1hZ2UoTXVsdGlwYXJ0RmlsZSBpbWFnZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGltYWdlRmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7CisgICAgICAgIFBhdGggcGF0aCA9IFBhdGhzLmdldChJTUFHRV9ESVIgKyBmaWxlTmFtZSk7CisgICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHBhdGguZ2V0UGFyZW50KCkpOworICAgICAgICBGaWxlcy53cml0ZShwYXRoLCBpbWFnZUZpbGUuZ2V0Qnl0ZXMoKSk7CisgICAgICAgIHJldHVybiAiL2ltYWdlcy8iICsgZmlsZU5hbWU7CisgICAgfQorCisgICAgLy8g5Yig6Zmk5Yqo5oCBCisgICAgcHVibGljIHZvaWQgZGVsZXRlRHluYW1pYyhMb25nIGR5bmFtaWNJZCkgeworICAgICAgICBpZiAodXNlckR5bmFtaWNSZXBvc2l0b3J5LmV4aXN0c0J5SWQoZHluYW1pY0lkKSkgeworICAgICAgICAgICAgdXNlckR5bmFtaWNSZXBvc2l0b3J5LmRlbGV0ZUJ5SWQoZHluYW1pY0lkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEeW5hbWljIHdpdGggaWQgIiArIGR5bmFtaWNJZCArICIgbm90IGZvdW5kIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvL+WlveWPi+WKqOaAgeivhOiuugorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGFkZENvbW1lbnQoTG9uZyB1c2VySWQsIExvbmcgZHluYW1pY0lkLCBTdHJpbmcgY29tbWVudENvbnRlbnQpIHsKKyAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkKKyAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOworCisgICAgICAgIFVzZXJEeW5hbWljIGR5bmFtaWMgPSB1c2VyRHluYW1pY1JlcG9zaXRvcnkuZmluZEJ5SWQoZHluYW1pY0lkKQorICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiRHluYW1pYyBub3QgZm91bmQiKSk7CisKKyAgICAgICAgRHluYW1pY0NvbW1lbnQgY29tbWVudCA9IG5ldyBEeW5hbWljQ29tbWVudCgpOworICAgICAgICBjb21tZW50LnNldER5bmFtaWNJZChkeW5hbWljSWQpOworICAgICAgICBjb21tZW50LnNldFVzZXJJZCh1c2VySWQpOworICAgICAgICBjb21tZW50LnNldENvbW1lbnRDb250ZW50KGNvbW1lbnRDb250ZW50KTsKKyAgICAgICAgY29tbWVudC5zZXRDb21tZW50VGltZShuZXcgRGF0ZSgpKTsKKworICAgICAgICAvLyDkv53lrZjor4TorroKKyAgICAgICAgRHluYW1pY0NvbW1lbnQgc2F2ZWRDb21tZW50ID0gZHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LnNhdmUoY29tbWVudCk7CisKKyAgICAgICAgLy8g6L+U5Zue5oiQ5Yqf5raI5oGvCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgiY29tbWVudF9pZCIsIHNhdmVkQ29tbWVudC5nZXRDb21tZW50SWQoKSk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLor4TorrrmiJDlip8iKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIC8v6L+U5Zue5p+Q5Liq5aW95Y+L55qE5omA5pyJ5Yqo5oCBCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsVXNlckR5bmFtaWNzKExvbmcgdXNlcklkKSB7CisgICAgICAgIC8vIOafpeaJvueUqOaIt+eahOaJgOacieWKqOaAgQorICAgICAgICBMaXN0PFVzZXJEeW5hbWljPiB1c2VyRHluYW1pY3MgPSB1c2VyRHluYW1pY1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkKHVzZXJJZCk7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcG9zdERhdGEgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZHluYW1pY0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICAvLyDpgY3ljobliqjmgIHvvIzojrflj5bngrnotZ7lkozor4TorroKKyAgICAgICAgZm9yIChVc2VyRHluYW1pYyBkeW5hbWljIDogdXNlckR5bmFtaWNzKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGR5bmFtaWNEYXRhID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJkeW5hbWljX2lkIiwgZHluYW1pYy5nZXREeW5hbWljSWQoKSk7CisgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInVzZXJfaWQiLCBkeW5hbWljLmdldFVzZXJJZCgpKTsKKworICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGR5bmFtaWMuZ2V0VXNlcklkKCkpLm9yRWxzZShudWxsKTsKKyAgICAgICAgICAgIGlmICh1c2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInVzZXJuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpKTsKKyAgICAgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImF2YXRhcl91cmwiLCB1c2VyLmdldEF2YXRhclVybCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJ1c2VybmFtZSIsICJVbmtub3duIik7CisgICAgICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJhdmF0YXJfdXJsIiwgImh0dHA6Ly9leGFtcGxlLmNvbS9kZWZhdWx0LWF2YXRhci5qcGciKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJ0aXRsZSIsIGR5bmFtaWMuZ2V0VGl0bGUoKSk7CisgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImNvbnRlbnQiLCBkeW5hbWljLmdldENvbnRlbnQoKSk7CisgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImltYWdlcyIsIGR5bmFtaWMuZ2V0SW1hZ2VVcmwoKSk7CisgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInRpbWUiLCBkeW5hbWljLmdldFRpbWUoKSk7CisKKyAgICAgICAgICAgIC8vIOiOt+WPlueCuei1ngorICAgICAgICAgICAgTGlzdDxEeW5hbWljTGlrZXM+IGxpa2VzID0gZHluYW1pY0xpa2VzUmVwb3NpdG9yeS5maW5kQnlEeW5hbWljSWQoZHluYW1pYy5nZXREeW5hbWljSWQoKSk7CisgICAgICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxpa2VMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgICAgICBmb3IgKER5bmFtaWNMaWtlcyBsaWtlIDogbGlrZXMpIHsKKyAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGxpa2VEYXRhID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICAgICAgICAgIGxpa2VEYXRhLnB1dCgidXNlcl9pZCIsIGxpa2UuZ2V0VXNlcklkKCkpOworCisgICAgICAgICAgICAgICAgLy8g6I635Y+W54K56LWe55So5oi355qE55So5oi35ZCNCisgICAgICAgICAgICAgICAgVXNlcnMgbGlrZVVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChsaWtlLmdldFVzZXJJZCgpKS5vckVsc2UobnVsbCk7CisgICAgICAgICAgICAgICAgaWYgKGxpa2VVc2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlrZURhdGEucHV0KCJ1c2VybmFtZSIsIGxpa2VVc2VyLmdldFVzZXJuYW1lKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxpa2VEYXRhLnB1dCgidXNlcm5hbWUiLCAiVW5rbm93biIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxpa2VMaXN0LmFkZChsaWtlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImxpa2VzIiwgbGlrZUxpc3QpOworCisgICAgICAgICAgICAvLyDojrflj5bor4TorroKKyAgICAgICAgICAgIExpc3Q8RHluYW1pY0NvbW1lbnQ+IGNvbW1lbnRzID0gZHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LmZpbmRCeUR5bmFtaWNJZChkeW5hbWljLmdldER5bmFtaWNJZCgpKTsKKyAgICAgICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gY29tbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgICAgIGZvciAoRHluYW1pY0NvbW1lbnQgY29tbWVudCA6IGNvbW1lbnRzKSB7CisgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjb21tZW50RGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbW1lbnRfaWQiLCBjb21tZW50LmdldENvbW1lbnRJZCgpKTsKKyAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJfaWQiLCBjb21tZW50LmdldFVzZXJJZCgpKTsKKworICAgICAgICAgICAgICAgIC8vIOiOt+WPluivhOiuuueUqOaIt+eahOeUqOaIt+WQjQorICAgICAgICAgICAgICAgIFVzZXJzIGNvbW1lbnRVc2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQoY29tbWVudC5nZXRVc2VySWQoKSkub3JFbHNlKG51bGwpOworICAgICAgICAgICAgICAgIGlmIChjb21tZW50VXNlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidXNlcm5hbWUiLCBjb21tZW50VXNlci5nZXRVc2VybmFtZSgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJuYW1lIiwgIlVua25vd24iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbnRlbnQiLCBjb21tZW50LmdldENvbW1lbnRDb250ZW50KCkpOworICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidGltZSIsIGNvbW1lbnQuZ2V0Q29tbWVudFRpbWUoKSk7CisgICAgICAgICAgICAgICAgY29tbWVudExpc3QuYWRkKGNvbW1lbnREYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgiY29tbWVudHMiLCBjb21tZW50TGlzdCk7CisKKyAgICAgICAgICAgIGR5bmFtaWNMaXN0LmFkZChkeW5hbWljRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoImR5bmFtaWMiLCBkeW5hbWljTGlzdCk7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICAvL+iOt+WPluW9k+WJjeaJgOacieWlveWPi+eahGlkCisgICAgcHVibGljIExpc3Q8TG9uZz4gZ2V0QWxsRnJpZW5kSWRzKExvbmcgdXNlcklkKSB7CisgICAgICAgIExpc3Q8RnJpZW5kUmVsYXRpb24+IGZyaWVuZFJlbGF0aW9ucyA9IGZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5maW5kQnlVc2VySWQodXNlcklkKTsKKyAgICAgICAgTGlzdDxMb25nPiBmcmllbmRJZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBmb3IgKEZyaWVuZFJlbGF0aW9uIHJlbGF0aW9uIDogZnJpZW5kUmVsYXRpb25zKSB7CisgICAgICAgICAgICAvLyDmt7vliqDlpb3lj4tJRAorICAgICAgICAgICAgaWYgKCFmcmllbmRJZHMuY29udGFpbnMocmVsYXRpb24uZ2V0RnJpZW5kSWQoKSkpIHsKKyAgICAgICAgICAgICAgICBmcmllbmRJZHMuYWRkKHJlbGF0aW9uLmdldEZyaWVuZElkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZyaWVuZElkczsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxVc2VyQW5kRnJpZW5kc0R5bmFtaWNzKExpc3Q8TG9uZz4gdXNlcklkcykgeworICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGFsbER5bmFtaWNzID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAgICAgLy8g6YGN5Y6G5omA5pyJ55So5oi36I635Y+W5LuW5Lus55qE5Yqo5oCBCisgICAgICAgIGZvciAoTG9uZyB1c2VySWQgOiB1c2VySWRzKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHVzZXJEeW5hbWljcyA9IGdldEFsbFVzZXJEeW5hbWljcyh1c2VySWQpOworICAgICAgICAgICAgaWYgKHVzZXJEeW5hbWljcyAhPSBudWxsICYmICF1c2VyRHluYW1pY3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYWxsRHluYW1pY3MuYWRkQWxsKChMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+KSB1c2VyRHluYW1pY3MuZ2V0KCJkeW5hbWljIikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g6L+U5Zue5omA5pyJ5Yqo5oCB55qE5ZCI6ZuGCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgiZHluYW1pYyIsIGFsbER5bmFtaWNzKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIC8v54K56LWe5Yqo5oCBCisgICAgcHVibGljIGJvb2xlYW4gbGlrZUR5bmFtaWMoTG9uZyB1c2VySWQsIExvbmcgZHluYW1pY0lkKSB7CisgICAgICAgIC8vIOajgOafpeivpeeUqOaIt+aYr+WQpuW3sue7j+eCuei1nui/h+ivpeWKqOaAgQorICAgICAgICBEeW5hbWljTGlrZXMgZXhpc3RpbmdMaWtlID0gZHluYW1pY0xpa2VzUmVwb3NpdG9yeS5maW5kQnlVc2VySWRBbmREeW5hbWljSWQodXNlcklkLCBkeW5hbWljSWQpOworICAgICAgICBpZiAoZXhpc3RpbmdMaWtlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOaWsOWinueCuei1nuiusOW9lQorICAgICAgICBEeW5hbWljTGlrZXMgbmV3TGlrZSA9IG5ldyBEeW5hbWljTGlrZXMoKTsKKyAgICAgICAgbmV3TGlrZS5zZXRVc2VySWQodXNlcklkKTsKKyAgICAgICAgbmV3TGlrZS5zZXREeW5hbWljSWQoZHluYW1pY0lkKTsKKyAgICAgICAgbmV3TGlrZS5zZXRMaWtlVGltZShuZXcgamF2YS51dGlsLkRhdGUoKSk7CisgICAgICAgIGR5bmFtaWNMaWtlc1JlcG9zaXRvcnkuc2F2ZShuZXdMaWtlKTsKKworICAgICAgICAvLyDmm7TmlrDliqjmgIHooajnmoTngrnotZ7mlbAKKyAgICAgICAgVXNlckR5bmFtaWMgZHluYW1pYyA9IHVzZXJEeW5hbWljUmVwb3NpdG9yeS5maW5kQnlJZChkeW5hbWljSWQpLm9yRWxzZShudWxsKTsKKyAgICAgICAgaWYgKGR5bmFtaWMgIT0gbnVsbCkgeworICAgICAgICAgICAgZHluYW1pYy5zZXRMaWtlc0NvdW50KGR5bmFtaWMuZ2V0TGlrZXNDb3VudCgpICsgMSk7CisgICAgICAgICAgICB1c2VyRHluYW1pY1JlcG9zaXRvcnkuc2F2ZShkeW5hbWljKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8v5Y+W5raI54K56LWeCisgICAgcHVibGljIGJvb2xlYW4gdW5saWtlRHluYW1pYyhMb25nIHVzZXJJZCwgTG9uZyBkeW5hbWljSWQpIHsKKyAgICAgICAgLy8g5p+l5om+6K+l55So5oi355qE54K56LWe6K6w5b2VCisgICAgICAgIER5bmFtaWNMaWtlcyBleGlzdGluZ0xpa2UgPSBkeW5hbWljTGlrZXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZER5bmFtaWNJZCh1c2VySWQsIGR5bmFtaWNJZCk7CisgICAgICAgIGlmIChleGlzdGluZ0xpa2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8g5Yig6Zmk54K56LWe6K6w5b2VCisgICAgICAgIGR5bmFtaWNMaWtlc1JlcG9zaXRvcnkuZGVsZXRlKGV4aXN0aW5nTGlrZSk7CisKKyAgICAgICAgLy8g5pu05paw5Yqo5oCB6KGo55qE54K56LWe5pWwCisgICAgICAgIFVzZXJEeW5hbWljIGR5bmFtaWMgPSB1c2VyRHluYW1pY1JlcG9zaXRvcnkuZmluZEJ5SWQoZHluYW1pY0lkKS5vckVsc2UobnVsbCk7CisgICAgICAgIGlmIChkeW5hbWljICE9IG51bGwpIHsKKyAgICAgICAgICAgIGR5bmFtaWMuc2V0TGlrZXNDb3VudChkeW5hbWljLmdldExpa2VzQ291bnQoKSAtIDEpOworICAgICAgICAgICAgdXNlckR5bmFtaWNSZXBvc2l0b3J5LnNhdmUoZHluYW1pYyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0dyb3VwU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNmQ3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0dyb3VwU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMzgyIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS4qOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuKjsKK2ltcG9ydCBqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uYWw7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5kb21haW4uUGFnZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2VSZXF1ZXN0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5kb21haW4uUGFnZWFibGU7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmRvbWFpbi5Tb3J0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworCitpbXBvcnQgamF2YS51dGlsLio7CisKK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgR3JvdXBTZXJ2aWNlIHsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIEdyb3VwUmVwb3NpdG9yeSBncm91cFJlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBHcm91cE1lbWJlcnNSZXBvc2l0b3J5IGdyb3VwTWVtYmVyc1JlcG9zaXRvcnk7CisKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgR3JvdXBQb3N0UmVwb3NpdG9yeSBncm91cFBvc3RSZXBvc2l0b3J5OworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgR3JvdXBDb21tZW50c1JlcG9zaXRvcnkgZ3JvdXBDb21tZW50c1JlcG9zaXRvcnk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1BR0VfRElSID0gInVwbG9hZHMvZ3JvdXBQb3N0LyI7CisKKyAgICBAVHJhbnNhY3Rpb25hbAorICAgIC8vIOWIm+W7uuWwj+e7hOeahOaWueazlQorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBjcmVhdGVHcm91cChHcm91cCBncm91cFJlcXVlc3QpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIOWIm+W7uuaWsOeahOWwj+e7hOWvueixoQorICAgICAgICAgICAgR3JvdXAgbmV3R3JvdXAgPSBuZXcgR3JvdXAoKTsKKyAgICAgICAgICAgIG5ld0dyb3VwLnNldEdyb3VwTmFtZShncm91cFJlcXVlc3QuZ2V0R3JvdXBOYW1lKCkpOworICAgICAgICAgICAgbmV3R3JvdXAuc2V0RGVzY3JpcHRpb24oZ3JvdXBSZXF1ZXN0LmdldERlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgbmV3R3JvdXAuc2V0Q3JlYXRlVGltZShuZXcgRGF0ZSgpKTsKKyAgICAgICAgICAgIG5ld0dyb3VwLnNldFVzZXJJZChncm91cFJlcXVlc3QuZ2V0VXNlcklkKCkpOworICAgICAgICAgICAgbmV3R3JvdXAuc2V0TWVtYmVyQ291bnQoMSk7CisgICAgICAgICAgICBuZXdHcm91cC5zZXRDYXRlZ29yeShncm91cFJlcXVlc3QuZ2V0Q2F0ZWdvcnkoKSk7CisgICAgICAgICAgICBuZXdHcm91cC5zZXRDb3ZlckltYWdlKGdyb3VwUmVxdWVzdC5nZXRDb3ZlckltYWdlKCkpOworICAgICAgICAgICAgR3JvdXAgY3JlYXRlZEdyb3VwID0gZ3JvdXBSZXBvc2l0b3J5LnNhdmUobmV3R3JvdXApOworCisgICAgICAgICAgICAvLyDov5Tlm57miJDlip/lk43lupQKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5YW06Laj5bCP57uE5Yib5bu65oiQ5YqfIik7CisgICAgICAgICAgICByZXNwb25zZS5wdXQoImdyb3VwX2lkIiwgY3JlYXRlZEdyb3VwLmdldEdyb3VwSWQoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyDov5Tlm57lpLHotKXlk43lupQKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWwj+e7hOWIm+W7uuWksei0pSIpOworICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoImdyb3VwX2lkIiwgbnVsbCk7CisKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoNDAwKS5ib2R5KGVycm9yUmVzcG9uc2UpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvLyDliqDlhaXlsI/nu4QKKyAgICBAVHJhbnNhY3Rpb25hbAorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBqb2luR3JvdXAoTG9uZyBncm91cElkLCBMb25nIHVzZXJJZCkgeworICAgICAgICAvLyDmn6Xmib7lsI/nu4QKKyAgICAgICAgT3B0aW9uYWw8R3JvdXA+IGdyb3VwT3B0aW9uYWwgPSBncm91cFJlcG9zaXRvcnkuZmluZEJ5SWQoZ3JvdXBJZCk7CisgICAgICAgIGlmICghZ3JvdXBPcHRpb25hbC5pc1ByZXNlbnQoKSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LnN0YXR1cyg0MDApLmJvZHkoCisgICAgICAgICAgICAgICAgICAgIE1hcC5vZigic3RhdHVzIiwgImZhaWx1cmUiLCAibWVzc2FnZSIsICLlsI/nu4TkuI3lrZjlnKgiKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIEdyb3VwIGdyb3VwID0gZ3JvdXBPcHRpb25hbC5nZXQoKTsKKworICAgICAgICAvLyDmo4Dmn6XnlKjmiLfmmK/lkKblt7Lnu4/mmK/or6XlsI/nu4TmiJDlkZgKKyAgICAgICAgaWYgKGdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuZXhpc3RzQnlHcm91cElkQW5kVXNlcklkKGdyb3VwSWQsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoNDAwKS5ib2R5KAorICAgICAgICAgICAgICAgICAgICBNYXAub2YoInN0YXR1cyIsICJmYWlsdXJlIiwgIm1lc3NhZ2UiLCAi55So5oi35bey57uP5piv6K+l5bCP57uE55qE5oiQ5ZGYIikKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICAvLyDmj5LlhaXnlKjmiLflkozlsI/nu4TnmoTlhbPogZTorrDlvZUKKyAgICAgICAgR3JvdXBNZW1iZXJzIGdyb3VwTWVtYmVycyA9IG5ldyBHcm91cE1lbWJlcnMoKTsKKyAgICAgICAgZ3JvdXBNZW1iZXJzLnNldEdyb3VwSWQoZ3JvdXBJZCk7CisgICAgICAgIGdyb3VwTWVtYmVycy5zZXRVc2VySWQodXNlcklkKTsKKyAgICAgICAgZ3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5zYXZlKGdyb3VwTWVtYmVycyk7CisKKyAgICAgICAgLy8g5pu05paw5bCP57uE55qE5oiQ5ZGY5pWwCisgICAgICAgIGdyb3VwLnNldE1lbWJlckNvdW50KGdyb3VwLmdldE1lbWJlckNvdW50KCkgKyAxKTsKKyAgICAgICAgZ3JvdXBSZXBvc2l0b3J5LnNhdmUoZ3JvdXApOworCisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygpLmJvZHkoCisgICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAic3VjY2VzcyIsICJtZXNzYWdlIiwgIuaIkOWKn+WKoOWFpeWwj+e7hCIpCisgICAgICAgICk7CisgICAgfQorCisgICAgLy8g6YCA5Ye65bCP57uECisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gbGVhdmVHcm91cChMb25nIGdyb3VwSWQsIExvbmcgdXNlcklkKSB7CisgICAgICAgIC8vIOafpeaJvuWwj+e7hAorICAgICAgICBPcHRpb25hbDxHcm91cD4gZ3JvdXBPcHRpb25hbCA9IGdyb3VwUmVwb3NpdG9yeS5maW5kQnlJZChncm91cElkKTsKKyAgICAgICAgaWYgKCFncm91cE9wdGlvbmFsLmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keSgKKyAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAiZmFpbHVyZSIsICJtZXNzYWdlIiwgIuWwj+e7hOS4jeWtmOWcqCIpCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgR3JvdXAgZ3JvdXAgPSBncm91cE9wdGlvbmFsLmdldCgpOworCisgICAgICAgIC8vIOajgOafpeeUqOaIt+aYr+WQpuaYr+ivpeWwj+e7hOaIkOWRmAorICAgICAgICBpZiAoIWdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuZXhpc3RzQnlHcm91cElkQW5kVXNlcklkKGdyb3VwSWQsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoNDAwKS5ib2R5KAorICAgICAgICAgICAgICAgICAgICBNYXAub2YoInN0YXR1cyIsICJmYWlsdXJlIiwgIm1lc3NhZ2UiLCAi55So5oi35LiN5piv6K+l5bCP57uE55qE5oiQ5ZGYIikKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICAvLyDliKDpmaTnlKjmiLflkozlsI/nu4TnmoTlhbPogZTorrDlvZUKKyAgICAgICAgZ3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5kZWxldGVCeUdyb3VwSWRBbmRVc2VySWQoZ3JvdXBJZCwgdXNlcklkKTsKKworICAgICAgICAvLyDmm7TmlrDlsI/nu4TnmoTmiJDlkZjmlbAKKyAgICAgICAgZ3JvdXAuc2V0TWVtYmVyQ291bnQoZ3JvdXAuZ2V0TWVtYmVyQ291bnQoKSAtIDEpOworICAgICAgICBncm91cFJlcG9zaXRvcnkuc2F2ZShncm91cCk7CisKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKCkuYm9keSgKKyAgICAgICAgICAgICAgICBNYXAub2YoInN0YXR1cyIsICJzdWNjZXNzIiwgIm1lc3NhZ2UiLCAi5oiQ5Yqf6YCA5Ye65bCP57uEIikKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICAvLyDojrflj5bmiYDmnInmiJDlkZgKKyAgICBAVHJhbnNhY3Rpb25hbAorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRHcm91cE1lbWJlcnMoTG9uZyBncm91cElkKSB7CisgICAgICAgIC8vIOafpeaJvuWwj+e7hAorICAgICAgICBPcHRpb25hbDxHcm91cD4gZ3JvdXBPcHRpb25hbCA9IGdyb3VwUmVwb3NpdG9yeS5maW5kQnlJZChncm91cElkKTsKKyAgICAgICAgaWYgKCFncm91cE9wdGlvbmFsLmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keSgKKyAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAiZmFpbHVyZSIsICJtZXNzYWdlIiwgIuWwj+e7hOS4jeWtmOWcqCIpCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgR3JvdXAgZ3JvdXAgPSBncm91cE9wdGlvbmFsLmdldCgpOworCisgICAgICAgIC8vIOiOt+WPluaJgOacieWwj+e7hOaIkOWRmAorICAgICAgICBMaXN0PEdyb3VwTWVtYmVycz4gZ3JvdXBNZW1iZXJzTGlzdCA9IGdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuZmluZEJ5R3JvdXBJZChncm91cElkKTsKKworICAgICAgICAvLyDliJvlu7rmiJDlkZjov5Tlm57liJfooagKKyAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBtZW1iZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGZvciAoR3JvdXBNZW1iZXJzIGdyb3VwTWVtYmVyIDogZ3JvdXBNZW1iZXJzTGlzdCkgeworICAgICAgICAgICAgT3B0aW9uYWw8VXNlcnM+IHVzZXJPcHRpb25hbCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGdyb3VwTWVtYmVyLmdldFVzZXJJZCgpKTsKKyAgICAgICAgICAgIGlmICh1c2VyT3B0aW9uYWwuaXNQcmVzZW50KCkpIHsKKyAgICAgICAgICAgICAgICBVc2VycyB1c2VyID0gdXNlck9wdGlvbmFsLmdldCgpOworICAgICAgICAgICAgICAgIG1lbWJlcnMuYWRkKE1hcC5vZigKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VyX2lkIiwgdXNlci5nZXRVc2VySWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhdmF0YXJfdXJsIiwgdXNlci5nZXRBdmF0YXJVcmwoKQorICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKCkuYm9keSgKKyAgICAgICAgICAgICAgICBNYXAub2YoInN0YXR1cyIsICJzdWNjZXNzIiwgIm1lbWJlcnMiLCBtZW1iZXJzKQorICAgICAgICApOworICAgIH0KKworCisgICAgLy/lj5HluIPluJblrZAKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjcmVhdGVQb3N0KExvbmcgZ3JvdXBJZCwgTG9uZyB1c2VySWQsIFN0cmluZyBwb3N0Q29udGVudCwgU3RyaW5nIHRpdGxlLCBNdWx0aXBhcnRGaWxlW10gaW1hZ2VGaWxlcykgeworICAgICAgICAvLyDliJvlu7rkuIDkuKrmlrDnmoTluJblrZDlr7nosaEKKyAgICAgICAgR3JvdXBQb3N0IHBvc3QgPSBuZXcgR3JvdXBQb3N0KCk7CisgICAgICAgIHBvc3Quc2V0R3JvdXBJZChncm91cElkKTsKKyAgICAgICAgcG9zdC5zZXRVc2VySWQodXNlcklkKTsKKyAgICAgICAgcG9zdC5zZXRDb250ZW50KHBvc3RDb250ZW50KTsKKyAgICAgICAgcG9zdC5zZXRUaXRsZSh0aXRsZSk7CisgICAgICAgIHBvc3Quc2V0VGltZShuZXcgRGF0ZSgpKTsKKyAgICAgICAgcG9zdC5zZXRMaWtlQ291bnQoMCk7CisgICAgICAgIHBvc3Quc2V0Q29tbWVudENvdW50KDApOworCisgICAgICAgIC8vIOWkhOeQhuWbvueJh+S4iuS8oO+8jOWmguaenOayoeacieWbvueJh++8jOi/lOWbnuepuuWtl+espuS4sgorICAgICAgICBTdHJpbmcgaW1hZ2VVcmxzID0gaGFuZGxlSW1hZ2VzKGltYWdlRmlsZXMpOworICAgICAgICBwb3N0LnNldEltYWdlKGltYWdlVXJscyk7CisKKyAgICAgICAgLy8g5L+d5a2Y5biW5a2Q5Yiw5pWw5o2u5bqTCisgICAgICAgIEdyb3VwUG9zdCBzYXZlZFBvc3QgPSBncm91cFBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7CisKKyAgICAgICAgLy8g6L+U5Zue57uT5p6cCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgicG9zdF9pZCIsIHNhdmVkUG9zdC5nZXRHcm91cFBvc3RJZCgpKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuW4luWtkOWIm+W7uuaIkOWKnyIpOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorCisgICAgLy8g5aSE55CG5Zu+54mH5LiK5Lyg55qE5pa55rOV77yM6L+U5Zue5Zu+54mH55qEIFVSTCDlrZfnrKbkuLIKKyAgICBwcml2YXRlIFN0cmluZyBoYW5kbGVJbWFnZXMoTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKKyAgICAgICAgaWYgKGltYWdlRmlsZXMgPT0gbnVsbCB8fCBpbWFnZUZpbGVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmdCdWlsZGVyIGltYWdlVXJsc0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1hZ2VGaWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgaW1hZ2VVcmxzQnVpbGRlci5hcHBlbmQoIiwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlVXJsID0gc2F2ZUltYWdlKGltYWdlRmlsZXNbaV0pOworICAgICAgICAgICAgICAgIGltYWdlVXJsc0J1aWxkZXIuYXBwZW5kKGltYWdlVXJsKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigi5Zu+54mH5LiK5Lyg5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBpbWFnZVVybHNCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLy8g5L+d5a2Y5Zu+54mH5bm26L+U5Zue5Zu+54mH55qEIFVSTAorICAgIHByaXZhdGUgU3RyaW5nIHNhdmVJbWFnZShNdWx0aXBhcnRGaWxlIGltYWdlRmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGltYWdlRmlsZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIuWbvueJh+aWh+S7tuS4uuepuiIpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gaW1hZ2VGaWxlLmdldE9yaWdpbmFsRmlsZW5hbWUoKTsKKyAgICAgICAgUGF0aCBwYXRoID0gUGF0aC5vZihJTUFHRV9ESVIgKyBmaWxlTmFtZSk7CisgICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHBhdGguZ2V0UGFyZW50KCkpOworICAgICAgICBGaWxlcy53cml0ZShwYXRoLCBpbWFnZUZpbGUuZ2V0Qnl0ZXMoKSk7CisgICAgICAgIHJldHVybiAiL2ltYWdlcy8iICsgZmlsZU5hbWU7CisgICAgfQorCisgICAgLy8g6I635Y+W5bCP57uE5YaF55qE5omA5pyJ5biW5a2QCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsUG9zdHMoTG9uZyBncm91cElkKSB7CisgICAgICAgIExpc3Q8R3JvdXBQb3N0PiBwb3N0cyA9IGdyb3VwUG9zdFJlcG9zaXRvcnkuZmluZEJ5R3JvdXBJZChncm91cElkKTsKKworICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHBvc3RMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAgICAgZm9yIChHcm91cFBvc3QgcG9zdCA6IHBvc3RzKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBvc3REYXRhID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3QuZ2V0VXNlcklkKCkpLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVc2VyIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgICAgIHBvc3REYXRhLnB1dCgiZ3JvdXBfcG9zdF9pZCIsIHBvc3QuZ2V0R3JvdXBQb3N0SWQoKSk7CisgICAgICAgICAgICBwb3N0RGF0YS5wdXQoInVzZXJfaWQiLCBwb3N0LmdldFVzZXJJZCgpKTsKKyAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidXNlcm5hbWUiLCB1c2VyLmdldFVzZXJuYW1lKCkpOworICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ0aXRsZSIsIHBvc3QuZ2V0VGl0bGUoKSk7CisgICAgICAgICAgICBwb3N0RGF0YS5wdXQoImNvbnRlbnQiLCBwb3N0LmdldENvbnRlbnQoKSk7CisgICAgICAgICAgICBwb3N0RGF0YS5wdXQoInRpbWUiLCBwb3N0LmdldFRpbWUoKSk7CisKKyAgICAgICAgICAgIHBvc3RMaXN0LmFkZChwb3N0RGF0YSk7CisgICAgICAgIH0KKworICAgICAgICAvLyDov5Tlm57lk43lupTmlbDmja4KKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICByZXNwb25zZS5wdXQoInBvc3RzIiwgcG9zdExpc3QpOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorCisKKyAgICAvLyDojrflj5blsI/nu4TliJfooajmjqXlj6MKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBzZWFyY2hHcm91cHMoTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBwYXJhbXMuZ2V0KCJuYW1lIik7CisgICAgICAgIFN0cmluZyBjYXRlZ29yeSA9IChTdHJpbmcpIHBhcmFtcy5nZXQoImNhdGVnb3J5Iik7CisgICAgICAgIEludGVnZXIgcGFnZSA9IChJbnRlZ2VyKSBwYXJhbXMuZ2V0T3JEZWZhdWx0KCJwYWdlIiwgMSk7CisgICAgICAgIEludGVnZXIgc2l6ZSA9IChJbnRlZ2VyKSBwYXJhbXMuZ2V0T3JEZWZhdWx0KCJzaXplIiwgMTApOworICAgICAgICBTdHJpbmcgc29ydEJ5ID0gKFN0cmluZykgcGFyYW1zLmdldE9yRGVmYXVsdCgic29ydF9ieSIsICJtZW1iZXJDb3VudCIpOworCisgICAgICAgIC8vIOaehOW7uuWIhumhteWvueixoQorICAgICAgICBQYWdlYWJsZSBwYWdlYWJsZTsKKworICAgICAgICAvLyDmoLnmja4gYHNvcnRCeWAg5Yik5pat5o6S5bqP5pa55byPCisgICAgICAgIGlmICgiY3JlYXRlVGltZSIuZXF1YWxzKHNvcnRCeSkpIHsKKyAgICAgICAgICAgIHBhZ2VhYmxlID0gUGFnZVJlcXVlc3Qub2YocGFnZSAtIDEsIHNpemUsIFNvcnQuYnkoU29ydC5PcmRlci5hc2MoImNyZWF0ZVRpbWUiKSkpOworICAgICAgICB9IGVsc2UgaWYgKCJncm91cE5hbWUiLmVxdWFscyhzb3J0QnkpKSB7CisgICAgICAgICAgICBwYWdlYWJsZSA9IFBhZ2VSZXF1ZXN0Lm9mKHBhZ2UgLSAxLCBzaXplLCBTb3J0LmJ5KFNvcnQuT3JkZXIuYXNjKCJncm91cE5hbWUiKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFnZWFibGUgPSBQYWdlUmVxdWVzdC5vZihwYWdlIC0gMSwgc2l6ZSwgU29ydC5ieShTb3J0Lk9yZGVyLmRlc2MoIm1lbWJlckNvdW50IikpKTsKKyAgICAgICAgfQorCisgICAgICAgIFBhZ2U8R3JvdXA+IGdyb3VwczsKKyAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIOWwj+e7hOWQjeensOaooeeziuafpeivogorICAgICAgICAgICAgZ3JvdXBzID0gZ3JvdXBSZXBvc2l0b3J5LnNlYXJjaEdyb3VwcyhuYW1lLCBjYXRlZ29yeSwgcGFnZWFibGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ3JvdXBzID0gZ3JvdXBSZXBvc2l0b3J5LnNlYXJjaFdpdGhGaWx0ZXJzKGNhdGVnb3J5LCBwYWdlYWJsZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYnVpbGRSZXNwb25zZShncm91cHMpOworICAgIH0KKworICAgIC8vIOaehOW7uui/lOWbnueahOWTjeW6lOaVsOaNrgorICAgIHByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiBidWlsZFJlc3BvbnNlKFBhZ2U8R3JvdXA+IGdyb3VwcykgeworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWwiLCBncm91cHMuZ2V0VG90YWxFbGVtZW50cygpKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJ0b3RhbF9wYWdlcyIsIGdyb3Vwcy5nZXRUb3RhbFBhZ2VzKCkpOworICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfcGFnZSIsIGdyb3Vwcy5nZXROdW1iZXIoKSArIDEpOworICAgICAgICByZXNwb25zZS5wdXQoIml0ZW1zIiwgZ3JvdXBzLmdldENvbnRlbnQoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIC8vIOeCuei1nuW4luWtkAorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGxpa2VQb3N0KExvbmcgR3JvdXBQb3N0SWQpIHsKKyAgICAgICAgLy8g5p+l5om+5biW5a2QCisgICAgICAgIE9wdGlvbmFsPEdyb3VwUG9zdD4gcG9zdE9wdCA9IGdyb3VwUG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQoR3JvdXBQb3N0SWQpOworICAgICAgICBpZiAoIXBvc3RPcHQuaXNQcmVzZW50KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQb3N0IG5vdCBmb3VuZCIpOworICAgICAgICB9CisKKyAgICAgICAgR3JvdXBQb3N0IHBvc3QgPSBwb3N0T3B0LmdldCgpOworCisgICAgICAgIC8vIOabtOaWsOeCuei1nuaVsAorICAgICAgICBwb3N0LnNldExpa2VDb3VudChwb3N0LmdldExpa2VDb3VudCgpICsgMSk7CisgICAgICAgIGdyb3VwUG9zdFJlcG9zaXRvcnkuc2F2ZShwb3N0KTsKKworICAgICAgICAvLyDov5Tlm57miJDlip/kv6Hmga8KKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi54K56LWe5oiQ5YqfIik7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICAvLyDlj5bmtojngrnotZ4KKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1bmxpa2VQb3N0KExvbmcgR3JvdXBQb3N0SWQpIHsKKyAgICAgICAgLy8g5p+l5om+5biW5a2QCisgICAgICAgIE9wdGlvbmFsPEdyb3VwUG9zdD4gcG9zdE9wdCA9IGdyb3VwUG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQoR3JvdXBQb3N0SWQpOworICAgICAgICBpZiAoIXBvc3RPcHQuaXNQcmVzZW50KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQb3N0IG5vdCBmb3VuZCIpOworICAgICAgICB9CisKKyAgICAgICAgR3JvdXBQb3N0IHBvc3QgPSBwb3N0T3B0LmdldCgpOworCisgICAgICAgIC8vIOabtOaWsOeCuei1nuaVsAorICAgICAgICBpZiAocG9zdC5nZXRMaWtlQ291bnQoKSA+IDApIHsKKyAgICAgICAgICAgIHBvc3Quc2V0TGlrZUNvdW50KHBvc3QuZ2V0TGlrZUNvdW50KCkgLSAxKTsKKyAgICAgICAgICAgIGdyb3VwUG9zdFJlcG9zaXRvcnkuc2F2ZShwb3N0KTsKKworICAgICAgICAgICAgLy8g6L+U5Zue5oiQ5Yqf5L+h5oGvCisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWPlua2iOeCuei1nuaIkOWKnyIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g5aaC5p6c54K56LWe5pWw5bey57uP5pivMO+8jOWImei/lOWbnuebuOW6lOa2iOaBrworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLml6Dms5Xlj5bmtojngrnotZ7vvIzngrnotZ7mlbDlt7Lnu4/kuLowIik7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDmt7vliqDor4Torrrlubbmm7TmlrDluJblrZDnmoTor4TorrrmlbAKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBhZGRDb21tZW50KExvbmcgcG9zdElkLCBHcm91cENvbW1lbnRzIGNvbW1lbnQpIHsKKyAgICAgICAgLy8g5p+l5om+5biW5a2QCisgICAgICAgIE9wdGlvbmFsPEdyb3VwUG9zdD4gcG9zdE9wdCA9IGdyb3VwUG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKTsKKyAgICAgICAgaWYgKCFwb3N0T3B0LmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKTsKKyAgICAgICAgfQorCisgICAgICAgIEdyb3VwUG9zdCBwb3N0ID0gcG9zdE9wdC5nZXQoKTsKKworICAgICAgICBjb21tZW50LnNldEdyb3VwUG9zdElkKHBvc3RJZCk7CisgICAgICAgIGNvbW1lbnQuc2V0VGltZShuZXcgamF2YS51dGlsLkRhdGUoKSk7CisgICAgICAgIGdyb3VwQ29tbWVudHNSZXBvc2l0b3J5LnNhdmUoY29tbWVudCk7CisgICAgICAgIHBvc3Quc2V0Q29tbWVudENvdW50KHBvc3QuZ2V0Q29tbWVudENvdW50KCkgKyAxKTsKKyAgICAgICAgZ3JvdXBQb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLor4TorrrmiJDlip8iKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0xldmVsU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY1MGVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDE0MCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuRXhwZXJpZW5jZUhpc3Rvcnk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkxldmVsOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LkV4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyUmVwb3NpdG9yeTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5MZXZlbFJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworCisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworCitAU2VydmljZQorcHVibGljIGNsYXNzIExldmVsU2VydmljZSB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIExldmVsUmVwb3NpdG9yeSBsZXZlbFJlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBFeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkgZXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5OworCisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRVc2VyRXhwZXJpZW5jZShMb25nIHVzZXJJZCkgeworICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KKyAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOworCisgICAgICAgIC8vIOiOt+WPluW9k+WJjeetiee6pworICAgICAgICBMZXZlbCBjdXJyZW50TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQodXNlci5nZXRMZXZlbCgpKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiTGV2ZWwgbm90IGZvdW5kIikpOworCisgICAgICAgIC8vIOiOt+WPluS4i+S4gOS4quetiee6p+eahOe7j+mqjOmcgOaxggorICAgICAgICBMZXZlbCBuZXh0TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQoY3VycmVudExldmVsLmdldExldmVsSWQoKSArIDEpLm9yRWxzZShudWxsKTsKKworICAgICAgICAvLyDmnoTlu7rlk43lupTmlbDmja4KKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCB1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkpOworICAgICAgICByZXNwb25zZS5wdXQoImxldmVsIiwgY3VycmVudExldmVsLmdldExldmVsTmFtZSgpKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJuZXh0X2xldmVsX2V4cGVyaWVuY2UiLCBuZXh0TGV2ZWwgIT0gbnVsbCA/IG5leHRMZXZlbC5nZXRSZXF1aXJlZEV4cGVyaWVuY2UoKSA6IDApOworCisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1cGRhdGVFeHBlcmllbmNlKExvbmcgdXNlcklkLCBJbnRlZ2VyIGV4cGVyaWVuY2UsIFN0cmluZyBzb3VyY2UpIHsKKyAgICAgICAgLy8g6I635Y+W55So5oi35L+h5oGvCisgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLnlKjmiLfkuI3lrZjlnKgiKSk7CisKKyAgICAgICAgLy8g5pu05paw55So5oi355qE57uP6aqM5YC8CisgICAgICAgIHVzZXIuc2V0Q3VycmVudEV4cGVyaWVuY2UodXNlci5nZXRDdXJyZW50RXhwZXJpZW5jZSgpICsgZXhwZXJpZW5jZSk7CisKKyAgICAgICAgLy8g5L+d5a2Y5pu05paw5ZCO55qE55So5oi35L+h5oGvCisgICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7CisKKyAgICAgICAgLy8g5Yib5bu657uP6aqM5pu05paw5Y6G5Y+y6K6w5b2VCisgICAgICAgIEV4cGVyaWVuY2VIaXN0b3J5IGV4cGVyaWVuY2VIaXN0b3J5ID0gbmV3IEV4cGVyaWVuY2VIaXN0b3J5KCk7CisgICAgICAgIGV4cGVyaWVuY2VIaXN0b3J5LnNldFVzZXJJZCh1c2VySWQpOworICAgICAgICBleHBlcmllbmNlSGlzdG9yeS5zZXRFeHBlcmllbmNlQ2hhbmdlKGV4cGVyaWVuY2UpOworICAgICAgICBleHBlcmllbmNlSGlzdG9yeS5zZXRTb3VyY2Uoc291cmNlKTsKKyAgICAgICAgZXhwZXJpZW5jZUhpc3Rvcnkuc2V0VXBkYXRlVGltZShuZXcgRGF0ZSgpKTsKKworICAgICAgICAvLyDkv53lrZjmm7TmlrDljoblj7IKKyAgICAgICAgZXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LnNhdmUoZXhwZXJpZW5jZUhpc3RvcnkpOworCisgICAgICAgIC8vIOi/lOWbnuabtOaWsOWQjueahOe7j+mqjOWAvOWSjOa2iOaBrworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnu4/pqozmm7TmlrDmiJDlip8iKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCB1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkpOyAgLy8g6L+U5Zue5pu05paw5ZCO55qE57uP6aqM5YC8CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNoZWNrVXBncmFkZShMb25nIHVzZXJJZCkgeworICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KKyAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIueUqOaIt+S4jeWtmOWcqCIpKTsKKworICAgICAgICAvLyDojrflj5blvZPliY3nrYnnuqcKKyAgICAgICAgTGV2ZWwgY3VycmVudExldmVsID0gbGV2ZWxSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXIuZ2V0TGV2ZWwoKSkKKyAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIueUqOaIt+etiee6p+S/oeaBr+S4jeWtmOWcqCIpKTsKKworICAgICAgICAvLyDojrflj5bkuIvkuIDkuKrnrYnnuqfnmoTnu4/pqozpnIDmsYIKKyAgICAgICAgTGV2ZWwgbmV4dExldmVsID0gbGV2ZWxSZXBvc2l0b3J5LmZpbmRCeUlkKGN1cnJlbnRMZXZlbC5nZXRMZXZlbElkKCkgKyAxKS5vckVsc2UobnVsbCk7CisKKyAgICAgICAgLy8g5p6E5bu65ZON5bqU5pWw5o2uCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisKKyAgICAgICAgLy8g5Yik5pat55So5oi35piv5ZCm5Y+v5Lul5Y2H57qnCisgICAgICAgIGJvb2xlYW4gY2FuVXBncmFkZSA9IHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSA+PSAobmV4dExldmVsICE9IG51bGwgPyBuZXh0TGV2ZWwuZ2V0UmVxdWlyZWRFeHBlcmllbmNlKCkgOiAwKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJjYW5fdXBncmFkZSIsIGNhblVwZ3JhZGUpOworICAgICAgICAvLyDmnoTlu7rlk43lupTmlbDmja4KKworICAgICAgICByZXNwb25zZS5wdXQoIm5leHRfbGV2ZWxfZXhwZXJpZW5jZSIsIG5leHRMZXZlbCAhPSBudWxsID8gbmV4dExldmVsLmdldFJlcXVpcmVkRXhwZXJpZW5jZSgpIDogMCk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgiY3VycmVudF9leHBlcmllbmNlIiwgdXNlci5nZXRDdXJyZW50RXhwZXJpZW5jZSgpKTsKKworCisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1cGdyYWRlVXNlckxldmVsKExvbmcgdXNlcklkLCBCb29sZWFuIGNhblVwZ3JhZGUpIHsKKyAgICAgICAgLy8g6I635Y+W55So5oi35L+h5oGvCisgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVc2VyIG5vdCBmb3VuZCIpKTsKKworICAgICAgICAvLyDliJvlu7rlk43lupTlr7nosaEKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKworICAgICAgICBpZiAoY2FuVXBncmFkZSkgeworICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN562J57qnCisgICAgICAgICAgICBMZXZlbCBjdXJyZW50TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQodXNlci5nZXRMZXZlbCgpKQorICAgICAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkxldmVsIG5vdCBmb3VuZCIpKTsKKworICAgICAgICAgICAgLy8g6I635Y+W5LiL5LiA5Liq562J57qn55qE57uP6aqM6ZyA5rGCCisgICAgICAgICAgICBMZXZlbCBuZXh0TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQoY3VycmVudExldmVsLmdldExldmVsSWQoKSArIDEpLm9yRWxzZShudWxsKTsKKworICAgICAgICAgICAgaWYgKG5leHRMZXZlbCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdXNlci5zZXRMZXZlbCh1c2VyLmdldExldmVsKCkgKyAxKTsKKyAgICAgICAgICAgICAgICB1c2VyUmVwb3NpdG9yeS5zYXZlKHVzZXIpOworICAgICAgICAgICAgICAgIExldmVsIG5ld0xldmVsID0gbGV2ZWxSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXIuZ2V0TGV2ZWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiTGV2ZWwgbm90IGZvdW5kIikpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLljYfnuqfmiJDlip8iKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJuZXdfbGV2ZWwiLCBuZXdMZXZlbC5nZXRMZXZlbE5hbWUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnlKjmiLflt7Lovr7liLDmnIDpq5jnrYnnuqciKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJlcnJvciIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueUqOaIt+S4jea7oei2s+WNh+e6p+adoeS7tiIpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWI3NDA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qb3N0U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjMyIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MaWtlczsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlBvc3Q7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Db2xsZWN0aW9uc1JlcG9zaXRvcnk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuTGlrZXNSZXBvc2l0b3J5OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlBvc3RSZXBvc2l0b3J5OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworQFNlcnZpY2UKK3B1YmxpYyBjbGFzcyBQb3N0U2VydmljZSB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBQb3N0UmVwb3NpdG9yeSBwb3N0UmVwb3NpdG9yeTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIExpa2VzUmVwb3NpdG9yeSBsaWtlc1JlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBDb2xsZWN0aW9uc1JlcG9zaXRvcnkgY29sbGVjdGlvbnNSZXBvc2l0b3J5OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX0RJUiA9ICJ1cGxvYWRzL3Bvc3QvIjsKKworCisgICAgLy/liJvlu7rluJblrZAKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjcmVhdGVQb3N0KExvbmcgdXNlcklkLCBTdHJpbmcgcG9zdENvbnRlbnQsIFN0cmluZyB0aXRsZSwgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKKyAgICAgICAgLy8g5p+l5om+55So5oi35L+h5oGvCisgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChMb25nLnZhbHVlT2YodXNlcklkKSkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOworICAgICAgICBQb3N0IHBvc3QgPSBuZXcgUG9zdCgpOworICAgICAgICBwb3N0LnNldFVzZXJfaWQodXNlci5nZXRVc2VySWQoKSk7CisgICAgICAgIHBvc3Quc2V0UG9zdFRpbWUobmV3IERhdGUoKSk7CisgICAgICAgIHBvc3Quc2V0UG9zdExpa2VOdW0oMCk7CisgICAgICAgIHBvc3Quc2V0UG9zdENvbGxlY3ROdW0oMCk7CisgICAgICAgIHBvc3Quc2V0UG9zdENvbnRlbnQocG9zdENvbnRlbnQpOworICAgICAgICBwb3N0LnNldFRpdGxlKHRpdGxlKTsKKworICAgICAgICAvLyDlpITnkIblpJrlvKDlm77niYfnmoTkuIrkvKAKKyAgICAgICAgU3RyaW5nQnVpbGRlciBpbWFnZVVybHNCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgaWYgKGltYWdlRmlsZXMgIT0gbnVsbCAmJiBpbWFnZUZpbGVzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1hZ2VGaWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZCgiLCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VVcmwgPSBzYXZlSW1hZ2UoaW1hZ2VGaWxlc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlVXJsc0J1aWxkZXIuYXBwZW5kKGltYWdlVXJsKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbWFnZSB1cGxvYWQgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwb3N0LnNldEltYWdlVXJsKGltYWdlVXJsc0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIFBvc3Qgc2F2ZWRQb3N0ID0gcG9zdFJlcG9zaXRvcnkuc2F2ZShwb3N0KTsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJwb3N0Tm8iLCBzYXZlZFBvc3QuZ2V0UG9zdE5vKCkpOworICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5biW5a2Q5Yib5bu65oiQ5YqfIik7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICAvLyDkv53lrZjlm77niYflubbov5Tlm57lm77niYfnmoQgVVJMCisgICAgcHVibGljIFN0cmluZyBzYXZlSW1hZ2UoTXVsdGlwYXJ0RmlsZSBpbWFnZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGltYWdlRmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7CisgICAgICAgIFBhdGggcGF0aCA9IFBhdGhzLmdldChJTUFHRV9ESVIgKyBmaWxlTmFtZSk7CisgICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHBhdGguZ2V0UGFyZW50KCkpOworICAgICAgICBGaWxlcy53cml0ZShwYXRoLCBpbWFnZUZpbGUuZ2V0Qnl0ZXMoKSk7CisgICAgICAgIHJldHVybiAiL2ltYWdlcy8iICsgZmlsZU5hbWU7CisgICAgfQorCisKKyAgICAvL+e8lui+keW4luWtkAorICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVBvc3QoTG9uZyBwb3N0SWQsIFBvc3QgcG9zdCkgeworICAgICAgICBQb3N0IGV4aXN0aW5nUG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOworICAgICAgICBpZiAocG9zdC5nZXRUaXRsZSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGV4aXN0aW5nUG9zdC5zZXRUaXRsZShwb3N0LmdldFRpdGxlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChwb3N0LmdldFBvc3RDb250ZW50KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgZXhpc3RpbmdQb3N0LnNldFBvc3RDb250ZW50KHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvc3QuZ2V0SW1hZ2VVcmwoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBleGlzdGluZ1Bvc3Quc2V0SW1hZ2VVcmwocG9zdC5nZXRJbWFnZVVybCgpKTsKKyAgICAgICAgfQorICAgICAgICBleGlzdGluZ1Bvc3Quc2V0UG9zdFRpbWUocG9zdC5nZXRQb3N0VGltZSgpKTsKKyAgICAgICAgLy8g5L+d5a2Y5pu05paw5ZCO55qE5biW5a2QCisgICAgICAgIHBvc3RSZXBvc2l0b3J5LnNhdmUoZXhpc3RpbmdQb3N0KTsKKyAgICB9CisKKyAgICAvL+WIoOmZpOW4luWtkAorICAgIHB1YmxpYyB2b2lkIGRlbGV0ZVBvc3QoTG9uZyBwb3N0SWQpIHsKKyAgICAgICAgLy8g5p+l5om+5oyH5a6aIElEIOeahOW4luWtkO+8jOWmguaenOS4jeWtmOWcqOWImeaKm+WHuuW8guW4uAorICAgICAgICBpZiAoIXBvc3RSZXBvc2l0b3J5LmV4aXN0c0J5SWQocG9zdElkKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIik7CisgICAgICAgIH0KKyAgICAgICAgLy8g5Yig6Zmk6K+l5biW5a2QCisgICAgICAgIHBvc3RSZXBvc2l0b3J5LmRlbGV0ZUJ5SWQocG9zdElkKTsKKyAgICB9CisKKyAgICAvL+eCuei1nuW4luWtkO+8iOW3suWujOaIkO+8iQorICAgIHB1YmxpYyB2b2lkIGxpa2VQb3N0KExvbmcgcG9zdElkLCBMb25nIHVzZXJJZCkgeworICAgICAgICAvLyDmn6Xmib7mjIflrpogSUQg55qE5biW5a2QCisgICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOworICAgICAgICBwb3N0LnNldFBvc3RMaWtlTnVtKHBvc3QuZ2V0UG9zdExpa2VOdW0oKSArIDEpOworCisgICAgICAgIC8vIOS/neWtmOW4luWtkAorICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOworICAgICAgICBMaWtlcyBsaWtlID0gbmV3IExpa2VzKCk7CisgICAgICAgIGxpa2Uuc2V0VXNlcklkKHVzZXJJZCk7CisgICAgICAgIGxpa2Uuc2V0UG9zdE5vKHBvc3RJZCk7CisgICAgICAgIC8vIOS/neWtmOeCuei1nuiusOW9lQorICAgICAgICBsaWtlc1JlcG9zaXRvcnkuc2F2ZShsaWtlKTsKKyAgICB9CisKKyAgICAvLyDlj5bmtojngrnotZ7luJblrZDvvIjlt7LlrozmiJDvvIkKKyAgICBwdWJsaWMgdm9pZCB1bmxpa2VQb3N0KExvbmcgcG9zdElkLCBMb25nIHVzZXJJZCkgeworICAgICAgICAvLyDmn6Xmib7mjIflrpogSUQg55qE5biW5a2QCisgICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOworCisgICAgICAgIC8vIOWmguaenOeCuei1nuaVsOWkp+S6jiAw77yM5YiZ5YeP5bCR54K56LWe5pWwCisgICAgICAgIGlmIChwb3N0LmdldFBvc3RMaWtlTnVtKCkgPiAwKSB7CisgICAgICAgICAgICBwb3N0LnNldFBvc3RMaWtlTnVtKHBvc3QuZ2V0UG9zdExpa2VOdW0oKSAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8g5Yig6Zmk54K56LWe6KGo5Lit5a+55bqU55qE6K6w5b2VCisgICAgICAgIGxpa2VzUmVwb3NpdG9yeS5kZWxldGVMaWtlQnlVc2VySWRBbmRQb3N0Tm8odXNlcklkLCBwb3N0SWQpOworCisgICAgICAgIC8vIOS/neWtmOabtOaWsOWQjueahOW4luWtkAorICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOworICAgIH0KKworCisgICAgLy8g6I635Y+W5biW5a2Q5YiX6KGo77yI5bey5a6M5oiQ77yJCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsUG9zdHMoKSB7CisgICAgICAgIExpc3Q8UG9zdD4gcG9zdHMgPSBwb3N0UmVwb3NpdG9yeS5maW5kQWxsKCk7CisgICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcG9zdExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBmb3IgKFBvc3QgcG9zdCA6IHBvc3RzKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBvc3RNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBwb3N0TWFwLnB1dCgicG9zdE5vIiwgcG9zdC5nZXRQb3N0Tm8oKSk7CisgICAgICAgICAgICBwb3N0TWFwLnB1dCgidXNlcl9pZCIsIHBvc3QuZ2V0VXNlcl9pZCgpKTsKKyAgICAgICAgICAgIHBvc3RNYXAucHV0KCJwb3N0Q29udGVudCIsIHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7CisgICAgICAgICAgICBwb3N0TWFwLnB1dCgiaW1nVXJsIiwgcG9zdC5nZXRJbWFnZVVybCgpKTsKKyAgICAgICAgICAgIHBvc3RNYXAucHV0KCJ0aXRsZSIsIHBvc3QuZ2V0VGl0bGUoKSk7CisgICAgICAgICAgICBwb3N0TWFwLnB1dCgiY3JlYXRlZEF0IiwgcG9zdC5nZXRQb3N0VGltZSgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcG9zdE1hcC5wdXQoImxpa2VDb3VudCIsIHBvc3QuZ2V0UG9zdExpa2VOdW0oKSk7CisgICAgICAgICAgICBwb3N0TWFwLnB1dCgiY29sbGVjdENvdW50IiwgcG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpKTsKKworICAgICAgICAgICAgcG9zdExpc3QuYWRkKHBvc3RNYXApOworICAgICAgICB9CisKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgLy8g57uf6K6h5biW5a2Q5pWw6YePCisgICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWwiLCBwb3N0TGlzdC5zaXplKCkpOworICAgICAgICByZXNwb25zZS5wdXQoInBvc3RzIiwgcG9zdExpc3QpOworCisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQb3N0QnlJZChMb25nIHBvc3RJZCkgeworICAgICAgICAvLyDojrflj5bluJblrZAKKyAgICAgICAgT3B0aW9uYWw8UG9zdD4gcG9zdE9wdGlvbmFsID0gcG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKTsKKworICAgICAgICAvLyDlpoLmnpzluJblrZDlrZjlnKgKKyAgICAgICAgaWYgKHBvc3RPcHRpb25hbC5pc1ByZXNlbnQoKSkgeworICAgICAgICAgICAgUG9zdCBwb3N0ID0gcG9zdE9wdGlvbmFsLmdldCgpOworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwb3N0RGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIHBvc3REYXRhLnB1dCgicG9zdE5vIiwgcG9zdC5nZXRQb3N0Tm8oKSk7CisgICAgICAgICAgICBwb3N0RGF0YS5wdXQoInVzZXJfaWQiLCBwb3N0LmdldFVzZXJfaWQoKSk7CisgICAgICAgICAgICBMb25nIHVzZXJJZCA9IHBvc3QuZ2V0VXNlcl9pZCgpOworICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlKG51bGwpOworCisgICAgICAgICAgICBpZiAodXNlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSk7CisgICAgICAgICAgICAgICAgcG9zdERhdGEucHV0KCJhdmF0YXJfdXJsIiwgdXNlci5nZXRBdmF0YXJVcmwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidXNlcm5hbWUiLCBudWxsKTsKKyAgICAgICAgICAgICAgICBwb3N0RGF0YS5wdXQoImF2YXRhcl91cmwiLCBudWxsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcG9zdERhdGEucHV0KCJwb3N0Q29udGVudCIsIHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7CisgICAgICAgICAgICBwb3N0RGF0YS5wdXQoImltYWdlVXJsIiwgcG9zdC5nZXRJbWFnZVVybCgpKTsKKyAgICAgICAgICAgIHBvc3REYXRhLnB1dCgicG9zdFRpbWUiLCBwb3N0LmdldFBvc3RUaW1lKCkpOworICAgICAgICAgICAgcG9zdERhdGEucHV0KCJwb3N0TGlrZU51bSIsIHBvc3QuZ2V0UG9zdExpa2VOdW0oKSk7CisgICAgICAgICAgICBwb3N0RGF0YS5wdXQoInBvc3RDb2xsZWN0TnVtIiwgcG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpKTsKKyAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidGl0bGUiLCBwb3N0LmdldFRpdGxlKCkpOworCisgICAgICAgICAgICByZXR1cm4gcG9zdERhdGE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQgd2l0aCBpZDogIiArIHBvc3RJZCk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8v5pS26JePCisgICAgcHVibGljIHZvaWQgY29sbGVjdFBvc3QoTG9uZyBwb3N0SWQsIExvbmcgdXNlcklkKSB7CisgICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOworICAgICAgICBwb3N0LnNldFBvc3RDb2xsZWN0TnVtKHBvc3QuZ2V0UG9zdENvbGxlY3ROdW0oKSArIDEpOworICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOworCisgICAgICAgIC8vIOa3u+WKoOWIsOaUtuiXj+ihqAorICAgICAgICBDb2xsZWN0aW9ucyBjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb25zKCk7CisgICAgICAgIGNvbGxlY3Rpb24uc2V0VXNlcklkKHVzZXJJZCk7CisgICAgICAgIGNvbGxlY3Rpb24uc2V0UG9zdE5vKHBvc3RJZCk7CisgICAgICAgIGNvbGxlY3Rpb25zUmVwb3NpdG9yeS5zYXZlKGNvbGxlY3Rpb24pOworICAgIH0KKworICAgIC8v5Y+W5raI5pS26JePCisgICAgcHVibGljIHZvaWQgdW5jb2xsZWN0UG9zdChMb25nIHBvc3RJZCwgTG9uZyB1c2VySWQpIHsKKyAgICAgICAgUG9zdCBwb3N0ID0gcG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKSk7CisgICAgICAgIC8vIOWHj+WwkeW4luWtkOaUtuiXj+aVsAorICAgICAgICBpZiAocG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpID4gMCkgeworICAgICAgICAgICAgcG9zdC5zZXRQb3N0Q29sbGVjdE51bShwb3N0LmdldFBvc3RDb2xsZWN0TnVtKCkgLSAxKTsKKyAgICAgICAgICAgIHBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyDku47mlLbol4/ooajkuK3liKDpmaTlr7nlupTorrDlvZUKKyAgICAgICAgY29sbGVjdGlvbnNSZXBvc2l0b3J5LmRlbGV0ZUxpa2VCeVVzZXJJZEFuZFBvc3RObyh1c2VySWQsIHBvc3RJZCk7CisgICAgfQorCisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMDQ2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1Rhc2tTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOTUgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkxldmVsOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVGFzazsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJUYXNrU3RhdHVzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LkxldmVsUmVwb3NpdG9yeTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5UYXNrUmVwb3NpdG9yeTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyVGFza1N0YXR1c1JlcG9zaXRvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcnM7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworQFNlcnZpY2UKK3B1YmxpYyBjbGFzcyBUYXNrU2VydmljZSB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBUYXNrUmVwb3NpdG9yeSB0YXNrUmVwb3NpdG9yeTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIExldmVsUmVwb3NpdG9yeSBsZXZlbFJlcG9zaXRvcnk7CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxUYXNrc0ZvclVzZXIoTG9uZyB1c2VySWQpIHsKKyAgICAgICAgLy8g6I635Y+W5omA5pyJ5Lu75YqhCisgICAgICAgIExpc3Q8VGFzaz4gdGFza3MgPSB0YXNrUmVwb3NpdG9yeS5maW5kQWxsKCk7CisgICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gdGFza0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBmb3IgKFRhc2sgdGFzayA6IHRhc2tzKSB7CisgICAgICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXMgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgLmZpbmRCeVVzZXJJZEFuZFRhc2tJZCh1c2VySWQsIHRhc2suZ2V0VGFza0lkKCkpOworCisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHRhc2tEYXRhID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgdGFza0RhdGEucHV0KCJ0YXNrX2lkIiwgdGFzay5nZXRUYXNrSWQoKSk7CisgICAgICAgICAgICB0YXNrRGF0YS5wdXQoInRpdGxlIiwgdGFzay5nZXRUaXRsZSgpKTsKKyAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgiZGVzY3JpcHRpb24iLCB0YXNrLmdldERlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgdGFza0RhdGEucHV0KCJzdGF0dXMiLCB1c2VyVGFza1N0YXR1cy5pc1ByZXNlbnQoKSA/IHVzZXJUYXNrU3RhdHVzLmdldCgpLmdldFN0YXR1cygpIDogInBlbmRpbmciKTsKKyAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgicHJvZ3Jlc3MiLCB1c2VyVGFza1N0YXR1cy5pc1ByZXNlbnQoKSA/IHVzZXJUYXNrU3RhdHVzLmdldCgpLmdldEN1cnJlbnRQcm9ncmVzcygpIDogMCk7CisKKyAgICAgICAgICAgIC8vIOWlluWKsQorICAgICAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gcmV3YXJkID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgcmV3YXJkLnB1dCgiZXhwZXJpZW5jZSIsIHRhc2suZ2V0UmV3YXJkRXhwZXJpZW5jZSgpKTsKKyAgICAgICAgICAgIHJld2FyZC5wdXQoInBvaW50cyIsIHRhc2suZ2V0UmV3YXJkUG9pbnRzKCkpOworICAgICAgICAgICAgdGFza0RhdGEucHV0KCJyZXdhcmQiLCByZXdhcmQpOworCisgICAgICAgICAgICB0YXNrTGlzdC5hZGQodGFza0RhdGEpOworICAgICAgICB9CisKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJ0YXNrcyIsIHRhc2tMaXN0KTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZVRhc2tTdGF0dXMoTG9uZyB1c2VySWQsIFN0cmluZyB0YXNrSWQpIHsKKyAgICAgICAgLy8g6I635Y+W55So5oi35Lu75Yqh54q25oCBCisgICAgICAgIE9wdGlvbmFsPFVzZXJUYXNrU3RhdHVzPiB1c2VyVGFza1N0YXR1c09wdCA9IHVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5maW5kQnlVc2VySWRBbmRUYXNrSWQodXNlcklkLCB0YXNrSWQpOworICAgICAgICBVc2VyVGFza1N0YXR1cyB1c2VyVGFza1N0YXR1cyA9IHVzZXJUYXNrU3RhdHVzT3B0LmdldCgpOworCisgICAgICAgIC8vIOajgOafpeS7u+WKoei/m+W6pgorICAgICAgICBpZiAodXNlclRhc2tTdGF0dXMuZ2V0Q3VycmVudFByb2dyZXNzKCkgPT0gMTAwZikgeworICAgICAgICAgICAgT3B0aW9uYWw8VGFzaz4gdGFza09wdCA9IHRhc2tSZXBvc2l0b3J5LmZpbmRCeUlkKHRhc2tJZCk7CisgICAgICAgICAgICBUYXNrIHRhc2sgPSB0YXNrT3B0LmdldCgpOworCisgICAgICAgICAgICAvLyDmm7TmlrDku7vliqHnirbmgIHkuLrlt7LlrozmiJAKKyAgICAgICAgICAgIHVzZXJUYXNrU3RhdHVzLnNldFN0YXR1cygiY29tcGxldGVkIik7CisgICAgICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRDdXJyZW50RXhwZXJpZW5jZSh0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7CisgICAgICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRDdXJyZW50UG9pbnRzKHRhc2suZ2V0UmV3YXJkUG9pbnRzKCkpOworCisgICAgICAgICAgICB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuc2F2ZSh1c2VyVGFza1N0YXR1cyk7CisKKyAgICAgICAgICAgIC8vIOaehOW7uui/lOWbnuaVsOaNrgorICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHnirbmgIHlt7Lmm7TmlrAiKTsKKworICAgICAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gY3VycmVudFJld2FyZCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZXdhcmQucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7CisgICAgICAgICAgICBjdXJyZW50UmV3YXJkLnB1dCgiY3VycmVudF9wb2ludHMiLCB0YXNrLmdldFJld2FyZFBvaW50cygpKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgiY3VycmVudF9yZXdhcmQiLCBjdXJyZW50UmV3YXJkKTsKKworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHmnKrlrozmiJDvvIzml6Dms5Xmm7TmlrDnirbmgIEiKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0VXNlckV4cGVyaWVuY2UoTG9uZyB1c2VySWQpIHsKKyAgICAgICAgLy8g6I635Y+W55So5oi35L+h5oGvCisgICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0ID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKTsKKyAgICAgICAgaWYgKCF1c2VyT3B0LmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueUqOaIt+S4jeWtmOWcqCIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7CisgICAgICAgIH0KKworICAgICAgICBVc2VycyB1c2VyID0gdXNlck9wdC5nZXQoKTsKKyAgICAgICAgSW50ZWdlciBjdXJyZW50RXhwZXJpZW5jZSA9IHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKTsKKyAgICAgICAgT3B0aW9uYWw8TGV2ZWw+IGxldmVsT3B0ID0gbGV2ZWxSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXIuZ2V0TGV2ZWwoKSk7CisgICAgICAgIFN0cmluZyBsZXZlbE5hbWUgPSBsZXZlbE9wdC5pc1ByZXNlbnQoKSA/IGxldmVsT3B0LmdldCgpLmdldExldmVsTmFtZSgpIDogIuacquefpeetiee6pyI7CisKKyAgICAgICAgTGlzdDxVc2VyVGFza1N0YXR1cz4gY29tcGxldGVkVGFza3MgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkQW5kU3RhdHVzKHVzZXJJZCwgImNvbXBsZXRlZCIpOworCisgICAgICAgIGludCB0b3RhbEV4cGVyaWVuY2UgPSAwOworICAgICAgICBpbnQgdG90YWxQb2ludHMgPSAwOworICAgICAgICBmb3IgKFVzZXJUYXNrU3RhdHVzIHRhc2tTdGF0dXMgOiBjb21wbGV0ZWRUYXNrcykgeworICAgICAgICAgICAgT3B0aW9uYWw8VGFzaz4gdGFza09wdCA9IHRhc2tSZXBvc2l0b3J5LmZpbmRCeUlkKHRhc2tTdGF0dXMuZ2V0VGFza0lkKCkpOworICAgICAgICAgICAgaWYgKHRhc2tPcHQuaXNQcmVzZW50KCkpIHsKKyAgICAgICAgICAgICAgICBUYXNrIHRhc2sgPSB0YXNrT3B0LmdldCgpOworICAgICAgICAgICAgICAgIHRvdGFsRXhwZXJpZW5jZSArPSB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKTsKKyAgICAgICAgICAgICAgICB0b3RhbFBvaW50cyArPSB0YXNrLmdldFJld2FyZFBvaW50cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g5p6E5bu66L+U5Zue5pWw5o2uCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgiY3VycmVudF9leHBlcmllbmNlIiwgY3VycmVudEV4cGVyaWVuY2UpOworICAgICAgICByZXNwb25zZS5wdXQoImxldmVsIiwgbGV2ZWxOYW1lKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJ0YXNrc19jb21wbGV0ZWQiLCBjb21wbGV0ZWRUYXNrcy5zaXplKCkpOworCisgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IHJld2FyZCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgcmV3YXJkLnB1dCgiZXhwZXJpZW5jZSIsIHRvdGFsRXhwZXJpZW5jZSk7CisgICAgICAgIHJld2FyZC5wdXQoInBvaW50cyIsIHRvdGFsUG9pbnRzKTsKKworICAgICAgICByZXNwb25zZS5wdXQoInJld2FyZCIsIHJld2FyZCk7CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldE5ld1N0ZXAoTG9uZyB1c2VySWQpIHsKKyAgICAgICAgLy8g6I635Y+W55So5oi355qE56ys5LiA5Liq5pyq5a6M5oiQ5Lu75YqhCisgICAgICAgIE9wdGlvbmFsPFVzZXJUYXNrU3RhdHVzPiB1c2VyVGFza1N0YXR1c09wdCA9IHVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5maW5kRmlyc3RCeVVzZXJJZEFuZFN0YXR1cyh1c2VySWQsICJwZW5kaW5nIik7CisKKyAgICAgICAgaWYgKCF1c2VyVGFza1N0YXR1c09wdC5pc1ByZXNlbnQoKSkgeworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnlKjmiLflvZPliY3msqHmnInmnKrlrozmiJDnmoTku7vliqEiKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOworICAgICAgICB9CisKKyAgICAgICAgVXNlclRhc2tTdGF0dXMgdXNlclRhc2tTdGF0dXMgPSB1c2VyVGFza1N0YXR1c09wdC5nZXQoKTsKKyAgICAgICAgU3RyaW5nIHRhc2tJZCA9IHVzZXJUYXNrU3RhdHVzLmdldFRhc2tJZCgpOworCisgICAgICAgIC8vIOiOt+WPluivpeS7u+WKoeeahOaPj+i/sAorICAgICAgICBPcHRpb25hbDxUYXNrPiB0YXNrT3B0ID0gdGFza1JlcG9zaXRvcnkuZmluZEJ5SWQodGFza0lkKTsKKyAgICAgICAgaWYgKCF0YXNrT3B0LmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeS4jeWtmOWcqCIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7CisgICAgICAgIH0KKworICAgICAgICBUYXNrIHRhc2sgPSB0YXNrT3B0LmdldCgpOworCisgICAgICAgIC8vIOiOt+WPluaAu+S7u+WKoeaVsAorICAgICAgICBsb25nIHRvdGFsVGFza3MgPSB0YXNrUmVwb3NpdG9yeS5jb3VudCgpOworCisgICAgICAgIC8vIOaehOW7uui/lOWbnuaVsOaNrgorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfc3RlcCIsIHRhc2tJZCk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWxfc3RlcHMiLCB0b3RhbFRhc2tzKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGVwX2Rlc2NyaXB0aW9uIiwgdGFzay5nZXREZXNjcmlwdGlvbigpKTsKKworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdXBkYXRlVGFza1Byb2dyZXNzKExvbmcgdXNlcklkLCBTdHJpbmcgdGFza0lkLCBJbnRlZ2VyIHByb2dyZXNzKSB7CisgICAgICAgIE9wdGlvbmFsPFVzZXJUYXNrU3RhdHVzPiB1c2VyVGFza1N0YXR1c09wdCA9IHVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5maW5kQnlVc2VySWRBbmRUYXNrSWQodXNlcklkLCB0YXNrSWQpOworCisgICAgICAgIGlmICghdXNlclRhc2tTdGF0dXNPcHQuaXNQcmVzZW50KCkpIHsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOworICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh5LiN5a2Y5Zyo5oiW6K+l5Lu75Yqh5LiN5bGe5LqO55So5oi3Iik7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKKyAgICAgICAgfQorCisgICAgICAgIFVzZXJUYXNrU3RhdHVzIHVzZXJUYXNrU3RhdHVzID0gdXNlclRhc2tTdGF0dXNPcHQuZ2V0KCk7CisgICAgICAgIHVzZXJUYXNrU3RhdHVzLnNldEN1cnJlbnRQcm9ncmVzcyhGbG9hdC52YWx1ZU9mKHByb2dyZXNzKSk7CisgICAgICAgIHVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5zYXZlKHVzZXJUYXNrU3RhdHVzKTsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6L+b5bqm5bey5pu05pawIik7CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNsYWltUmV3YXJkKExvbmcgdXNlcklkLCBTdHJpbmcgdGFza0lkKSB7CisgICAgICAgIC8vIOiOt+WPlueUqOaIt+S7u+WKoeeKtuaAgQorICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXNPcHQgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkQW5kVGFza0lkKHVzZXJJZCwgdGFza0lkKTsKKworICAgICAgICBpZiAoIXVzZXJUYXNrU3RhdHVzT3B0LmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeeKtuaAgeS4jeWtmOWcqCIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7CisgICAgICAgIH0KKworICAgICAgICBVc2VyVGFza1N0YXR1cyB1c2VyVGFza1N0YXR1cyA9IHVzZXJUYXNrU3RhdHVzT3B0LmdldCgpOworCisgICAgICAgIGlmICh1c2VyVGFza1N0YXR1cy5nZXRDdXJyZW50UHJvZ3Jlc3MoKSA9PSAxMDBmKSB7CisgICAgICAgICAgICBpZiAodXNlclRhc2tTdGF0dXMuZ2V0SXNSZXdhcmRDbGFpbWVkKCkpIHsKKyAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7CisgICAgICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5aWW5Yqx5bey57uP6aKG5Y+W6L+H5LqGIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFRhc2s+IHRhc2tPcHQgPSB0YXNrUmVwb3NpdG9yeS5maW5kQnlJZCh0YXNrSWQpOworICAgICAgICAgICAgaWYgKCF0YXNrT3B0LmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOworICAgICAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeS4jeWtmOWcqCIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUYXNrIHRhc2sgPSB0YXNrT3B0LmdldCgpOworCisgICAgICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRJc1Jld2FyZENsYWltZWQodHJ1ZSk7CisgICAgICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRDdXJyZW50RXhwZXJpZW5jZSh0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7CisgICAgICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRDdXJyZW50UG9pbnRzKHRhc2suZ2V0UmV3YXJkUG9pbnRzKCkpOworCisgICAgICAgICAgICB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuc2F2ZSh1c2VyVGFza1N0YXR1cyk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0ID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKTsKKyAgICAgICAgICAgIGlmICghdXNlck9wdC5pc1ByZXNlbnQoKSkgeworICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnlKjmiLfkuI3lrZjlnKgiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHQuZ2V0KCk7CisKKyAgICAgICAgICAgIC8vIOWwhuS7u+WKoeWlluWKseWKoOWIsOeUqOaIt+eahOenr+WIhuWSjOe7j+mqjAorICAgICAgICAgICAgdXNlci5zZXRVc2VyUG9pbnRzKHVzZXIuZ2V0VXNlclBvaW50cygpICsgdGFzay5nZXRSZXdhcmRQb2ludHMoKSk7CisgICAgICAgICAgICB1c2VyLnNldEN1cnJlbnRFeHBlcmllbmNlKHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSArIHRhc2suZ2V0UmV3YXJkRXhwZXJpZW5jZSgpKTsKKworICAgICAgICAgICAgdXNlclJlcG9zaXRvcnkuc2F2ZSh1c2VyKTsKKworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlpZblirHlt7Lpooblj5YiKTsKKworICAgICAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gcmV3YXJkID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgcmV3YXJkLnB1dCgiZXhwZXJpZW5jZSIsIHRhc2suZ2V0UmV3YXJkRXhwZXJpZW5jZSgpKTsKKyAgICAgICAgICAgIHJld2FyZC5wdXQoInBvaW50cyIsIHRhc2suZ2V0UmV3YXJkUG9pbnRzKCkpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJyZXdhcmQiLCByZXdhcmQpOworCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeacquWujOaIkO+8jOaXoOazlemihuWPluWlluWKsSIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjaGVja1Jld2FyZFN0YXR1cyhMb25nIHVzZXJJZCwgU3RyaW5nIHRhc2tJZCkgeworICAgICAgICAvLyDojrflj5bnlKjmiLfku7vliqHnirbmgIEKKyAgICAgICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IHVzZXJUYXNrU3RhdHVzT3B0ID0gdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZFRhc2tJZCh1c2VySWQsIHRhc2tJZCk7CisKKyAgICAgICAgaWYgKCF1c2VyVGFza1N0YXR1c09wdC5pc1ByZXNlbnQoKSkgeworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHnirbmgIHkuI3lrZjlnKgiKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOworICAgICAgICB9CisKKyAgICAgICAgVXNlclRhc2tTdGF0dXMgdXNlclRhc2tTdGF0dXMgPSB1c2VyVGFza1N0YXR1c09wdC5nZXQoKTsKKworICAgICAgICAvLyDmo4Dmn6XlpZblirHmmK/lkKblt7Lpooblj5YKKyAgICAgICAgaWYgKHVzZXJUYXNrU3RhdHVzLmdldElzUmV3YXJkQ2xhaW1lZCgpKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAicmV3YXJkX2lzc3VlZCIpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeWlluWKseW3suiiq+mihuWPliIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgICAgICB9CisKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAicmV3YXJkX25vdF9pc3N1ZWQiKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeWlluWKseacquiiq+mihuWPliIpOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyRm9sbG93U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyRm9sbG93U2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMjJiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJGb2xsb3dTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckZvbGxvdzsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyRm9sbG93UmVwb3NpdG9yeTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworQFNlcnZpY2UKK3B1YmxpYyBjbGFzcyBVc2VyRm9sbG93U2VydmljZSB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyRm9sbG93UmVwb3NpdG9yeSB1c2VyRm9sbG93UmVwb3NpdG9yeTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OworCisgICAgLy8g55So5oi35YWz5rOo5pON5L2cCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZm9sbG93KExvbmcgZm9sbG93ZXJJZCwgTG9uZyBmb2xsb3dlZElkKSB7CisgICAgICAgIGlmIChmb2xsb3dlcklkLmVxdWFscyhmb2xsb3dlZElkKSkgeworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7CisgICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5LiN6IO95YWz5rOo6Ieq5bexIik7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7LlhbPms6jor6XnlKjmiLcKKyAgICAgICAgVXNlckZvbGxvdyBleGlzdGluZ0ZvbGxvdyA9IHVzZXJGb2xsb3dSZXBvc2l0b3J5LmZpbmRCeUZvbGxvd2VySWRBbmRGb2xsb3dlZElkKGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpOworICAgICAgICBpZiAoZXhpc3RpbmdGb2xsb3cgPT0gbnVsbCkgeworICAgICAgICAgICAgLy8g5Yib5bu65paw55qE5YWz5rOo6K6w5b2VCisgICAgICAgICAgICBVc2VyRm9sbG93IHVzZXJGb2xsb3cgPSBuZXcgVXNlckZvbGxvdygpOworICAgICAgICAgICAgdXNlckZvbGxvdy5zZXRGb2xsb3dlcklkKGZvbGxvd2VySWQpOworICAgICAgICAgICAgdXNlckZvbGxvdy5zZXRGb2xsb3dlZElkKGZvbGxvd2VkSWQpOworICAgICAgICAgICAgdXNlckZvbGxvdy5zZXRGb2xsb3dUaW1lKG5ldyBqYXZhLnV0aWwuRGF0ZSgpKTsKKworICAgICAgICAgICAgdXNlckZvbGxvd1JlcG9zaXRvcnkuc2F2ZSh1c2VyRm9sbG93KTsKKworICAgICAgICAgICAgLy8g6L+U5Zue5YWz5rOo5oiQ5Yqf5ZON5bqUCisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWFs+azqOaIkOWKnyIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7CisgICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5bey57uP5YWz5rOo6K+l55So5oi3Iik7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDlj5bmtojlhbPms6jmk43kvZwKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1bmZvbGxvdyhMb25nIGZvbGxvd2VySWQsIExvbmcgZm9sbG93ZWRJZCkgeworICAgICAgICBVc2VyRm9sbG93IHVzZXJGb2xsb3cgPSB1c2VyRm9sbG93UmVwb3NpdG9yeS5maW5kQnlGb2xsb3dlcklkQW5kRm9sbG93ZWRJZChmb2xsb3dlcklkLCBmb2xsb3dlZElkKTsKKworICAgICAgICBpZiAodXNlckZvbGxvdyAhPSBudWxsKSB7CisgICAgICAgICAgICB1c2VyRm9sbG93UmVwb3NpdG9yeS5kZWxldGUodXNlckZvbGxvdyk7CisKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Y+W5raI5YWz5rOo5oiQ5YqfIik7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmnKrmib7liLDlhbPms6jlhbPns7siKTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIOiOt+WPluafkOS4queUqOaIt+eahOaJgOacieeyieS4nQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEZvbGxvd2VycyhMb25nIHVzZXJJZCkgeworICAgICAgICBMaXN0PFVzZXJGb2xsb3c+IGZvbGxvd2VycyA9IHVzZXJGb2xsb3dSZXBvc2l0b3J5LmZpbmRCeUZvbGxvd2VkSWQodXNlcklkKTsKKworICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGZvbGxvd2Vyc0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgZm9yIChVc2VyRm9sbG93IGZvbGxvdyA6IGZvbGxvd2VycykgeworICAgICAgICAgICAgLy8g6I635Y+W57KJ5Lid55qE55So5oi35L+h5oGvCisgICAgICAgICAgICBVc2VycyBmb2xsb3dlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGZvbGxvdy5nZXRGb2xsb3dlcklkKCkpLm9yRWxzZShudWxsKTsKKyAgICAgICAgICAgIGlmIChmb2xsb3dlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBmb2xsb3dlckluZm8gPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgICAgICAgICAgZm9sbG93ZXJJbmZvLnB1dCgidXNlcl9pZCIsIGZvbGxvd2VyLmdldFVzZXJJZCgpKTsKKyAgICAgICAgICAgICAgICBmb2xsb3dlckluZm8ucHV0KCJ1c2VybmFtZSIsIGZvbGxvd2VyLmdldFVzZXJuYW1lKCkpOworICAgICAgICAgICAgICAgIGZvbGxvd2VySW5mby5wdXQoImF2YXRhcl91cmwiLCBmb2xsb3dlci5nZXRBdmF0YXJVcmwoKSk7CisgICAgICAgICAgICAgICAgZm9sbG93ZXJzTGlzdC5hZGQoZm9sbG93ZXJJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIOi/lOWbnuWTjeW6lOaVsOaNrgorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWwiLCBmb2xsb3dlcnNMaXN0LnNpemUoKSk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgiZm9sbG93ZXJzIiwgZm9sbG93ZXJzTGlzdCk7CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIC8vIOiOt+WPluafkOS4queUqOaIt+eahOaJgOacieWFs+azqOeUqOaItworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEZvbGxvd2luZyhMb25nIHVzZXJJZCkgeworICAgICAgICBMaXN0PFVzZXJGb2xsb3c+IGZvbGxvd2luZyA9IHVzZXJGb2xsb3dSZXBvc2l0b3J5LmZpbmRCeUZvbGxvd2VySWQodXNlcklkKTsKKworICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGZvbGxvd2luZ0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgZm9yIChVc2VyRm9sbG93IGZvbGxvdyA6IGZvbGxvd2luZykgeworICAgICAgICAgICAgLy8g6I635Y+W6KKr5YWz5rOo55qE55So5oi35L+h5oGvCisgICAgICAgICAgICBVc2VycyBmb2xsb3dlZFVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChmb2xsb3cuZ2V0Rm9sbG93ZWRJZCgpKS5vckVsc2UobnVsbCk7CisgICAgICAgICAgICBpZiAoZm9sbG93ZWRVc2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGZvbGxvd2luZ0luZm8gPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICAgICAgZm9sbG93aW5nSW5mby5wdXQoInVzZXJfaWQiLCBmb2xsb3dlZFVzZXIuZ2V0VXNlcklkKCkpOworICAgICAgICAgICAgICAgIGZvbGxvd2luZ0luZm8ucHV0KCJ1c2VybmFtZSIsIGZvbGxvd2VkVXNlci5nZXRVc2VybmFtZSgpKTsKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmdJbmZvLnB1dCgiYXZhdGFyX3VybCIsIGZvbGxvd2VkVXNlci5nZXRBdmF0YXJVcmwoKSk7CisgICAgICAgICAgICAgICAgZm9sbG93aW5nTGlzdC5hZGQoZm9sbG93aW5nSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICByZXNwb25zZS5wdXQoInRvdGFsIiwgZm9sbG93aW5nTGlzdC5zaXplKCkpOworICAgICAgICByZXNwb25zZS5wdXQoImZvbGxvd2luZyIsIGZvbGxvd2luZ0xpc3QpOworCisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJNZXNzYWdlU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWY2MmU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDExMiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlck1lc3NhZ2VzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJNZXNzYWdlc1JlcG9zaXRvcnk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKKworQFNlcnZpY2UKK3B1YmxpYyBjbGFzcyBVc2VyTWVzc2FnZVNlcnZpY2UgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlck1lc3NhZ2VzUmVwb3NpdG9yeSB1c2VyTWVzc2FnZXNSZXBvc2l0b3J5OworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlclJlcG9zaXRvcnkgdXNlclJlcG9zaXRvcnk7CisKKyAgICAvLyDlj5HpgIHnp4Hkv6EKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBzZW5kTWVzc2FnZShMb25nIHNlbmRlcklkLCBMb25nIHJlY2VpdmVySWQsIFN0cmluZyBjb250ZW50KSB7CisgICAgICAgIFVzZXJNZXNzYWdlcyBtZXNzYWdlID0gbmV3IFVzZXJNZXNzYWdlcygpOworICAgICAgICBtZXNzYWdlLnNldFNlbmRlcklkKHNlbmRlcklkKTsKKyAgICAgICAgbWVzc2FnZS5zZXRSZWNlaXZlcklkKHJlY2VpdmVySWQpOworICAgICAgICBtZXNzYWdlLnNldENvbnRlbnQoY29udGVudCk7CisgICAgICAgIG1lc3NhZ2Uuc2V0VGltZShuZXcgRGF0ZSgpKTsKKyAgICAgICAgVXNlck1lc3NhZ2VzIHNhdmVkTWVzc2FnZSA9IHVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuc2F2ZShtZXNzYWdlKTsKKworICAgICAgICAvLyDov5Tlm57lk43lupQKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi56eB5L+h5Y+R6YCB5oiQ5YqfIik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZV9pZCIsIHNhdmVkTWVzc2FnZS5nZXRNZXNzYWdlSWQoKSk7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICAvLyDojrflj5blvZPliY3nlKjmiLfnmoTmiYDmnInmtojmga8KKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRVc2VyTWVzc2FnZXMoTG9uZyB1c2VySWQpIHsKKyAgICAgICAgLy8g5p+l6K+i5b2T5YmN55So5oi35Y+R6YCB5ZKM5o6l5pS255qE5omA5pyJ5raI5oGvCisgICAgICAgIExpc3Q8VXNlck1lc3NhZ2VzPiBtZXNzYWdlcyA9IHVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuZmluZEJ5U2VuZGVySWRPclJlY2VpdmVySWQodXNlcklkLCB1c2VySWQpOworCisgICAgICAgIC8vIOiOt+WPluWPkemAgeiAheWSjOaOpeaUtuiAheeahOeUqOaIt+WQjQorICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IG1lc3NhZ2VEZXRhaWxzID0gbWVzc2FnZXMuc3RyZWFtKCkKKyAgICAgICAgICAgICAgICAubWFwKG1lc3NhZ2UgLT4geworICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1lc3NhZ2VNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJtZXNzYWdlX2lkIiwgbWVzc2FnZS5nZXRNZXNzYWdlSWQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJzZW5kZXJfaWQiLCBtZXNzYWdlLmdldFNlbmRlcklkKCkpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgicmVjZWl2ZXJfaWQiLCBtZXNzYWdlLmdldFJlY2VpdmVySWQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJjb250ZW50IiwgbWVzc2FnZS5nZXRDb250ZW50KCkpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgidGltZXN0YW1wIiwgbWVzc2FnZS5nZXRUaW1lKCkpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2VuZGVyVXNlcm5hbWUgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChtZXNzYWdlLmdldFNlbmRlcklkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh1c2VyIC0+IHVzZXIuZ2V0VXNlcm5hbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAub3JFbHNlKCJVbmtub3duIik7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJzZW5kZXJfdXNlcm5hbWUiLCBzZW5kZXJVc2VybmFtZSk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWNlaXZlclVzZXJuYW1lID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZS5nZXRSZWNlaXZlcklkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh1c2VyIC0+IHVzZXIuZ2V0VXNlcm5hbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAub3JFbHNlKCJVbmtub3duIik7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJyZWNlaXZlcl91c2VybmFtZSIsIHJlY2VpdmVyVXNlcm5hbWUpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlTWFwOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2VzIiwgbWVzc2FnZURldGFpbHMpOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorCisgICAgLy8g6I635Y+W5Y2V5p2h5raI5oGv55qE6K+m5oOFCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0TWVzc2FnZShMb25nIG1lc3NhZ2VJZCkgeworICAgICAgICBPcHRpb25hbDxVc2VyTWVzc2FnZXM+IG9wdGlvbmFsTWVzc2FnZSA9IHVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZUlkKTsKKworICAgICAgICBpZiAob3B0aW9uYWxNZXNzYWdlLmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICBVc2VyTWVzc2FnZXMgbWVzc2FnZSA9IG9wdGlvbmFsTWVzc2FnZS5nZXQoKTsKKworICAgICAgICAgICAgLy8g6I635Y+W5Y+R6YCB6ICF5ZKM5o6l5pS26ICF55qE55So5oi35ZCNCisgICAgICAgICAgICBTdHJpbmcgc2VuZGVyVXNlcm5hbWUgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChtZXNzYWdlLmdldFNlbmRlcklkKCkpCisgICAgICAgICAgICAgICAgICAgIC5tYXAodXNlciAtPiB1c2VyLmdldFVzZXJuYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIC5vckVsc2UoIlVua25vd24iKTsKKyAgICAgICAgICAgIFN0cmluZyByZWNlaXZlclVzZXJuYW1lID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZS5nZXRSZWNlaXZlcklkKCkpCisgICAgICAgICAgICAgICAgICAgIC5tYXAodXNlciAtPiB1c2VyLmdldFVzZXJuYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIC5vckVsc2UoIlVua25vd24iKTsKKworICAgICAgICAgICAgLy8g5p6E5bu65ZON5bqU5pWw5o2uCisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtZXNzYWdlRGV0YWlscyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzLnB1dCgibWVzc2FnZV9pZCIsIG1lc3NhZ2UuZ2V0TWVzc2FnZUlkKCkpOworICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJzZW5kZXJfaWQiLCBtZXNzYWdlLmdldFNlbmRlcklkKCkpOworICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJzZW5kZXJfdXNlcm5hbWUiLCBzZW5kZXJVc2VybmFtZSk7CisgICAgICAgICAgICBtZXNzYWdlRGV0YWlscy5wdXQoInJlY2VpdmVyX2lkIiwgbWVzc2FnZS5nZXRSZWNlaXZlcklkKCkpOworICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJyZWNlaXZlcl91c2VybmFtZSIsIHJlY2VpdmVyVXNlcm5hbWUpOworICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJjb250ZW50IiwgbWVzc2FnZS5nZXRDb250ZW50KCkpOworICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJ0aW1lc3RhbXAiLCBtZXNzYWdlLmdldFRpbWUoKSk7CisKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsIG1lc3NhZ2VEZXRhaWxzKTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIk1lc3NhZ2Ugbm90IGZvdW5kIik7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKKyAgICAgICAgfQorICAgIH0KKworCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEKaW5kZXggNzE0MzVjNy4uMGQzNzg1NCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuamF2YQpAQCAtMSwyNSArMSwyNjkgQEAKIHBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CiAKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckludml0ZUNvZGU7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlckludml0ZUNvZGVSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKKworaW1wb3J0IGphdmEudXRpbC4qOworCitAU2VydmljZQorcHVibGljIGNsYXNzIFVzZXJTZXJ2aWNlIHsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlckludml0ZUNvZGVSZXBvc2l0b3J5IHVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeTsKKworICAgIC8vIOeUn+aIkOmCgOivt+eggQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdlbmVyYXRlSW52aXRlQ29kZShMb25nIHVzZXJJZCkgeworICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KKyAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlKG51bGwpOworCisgICAgICAgIC8vIOWmguaenOeUqOaIt+S4jeWtmOWcqO+8jOi/lOWbnumUmeivrworICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueUqOaIt+S4jeWtmOWcqCIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyDmo4Dmn6XnlKjmiLfnmoTpgoDor7fmlbDph48KKyAgICAgICAgaWYgKHVzZXIuZ2V0SW52aXRlQ291bnQoKSA8PSAwKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKKyAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuayoeacieWJqeS9meeahOmCgOivt+eggSIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyDnlJ/miJDllK/kuIDnmoTpgoDor7fnoIEKKyAgICAgICAgU3RyaW5nIGludml0ZUNvZGUgPSBnZW5lcmF0ZVVuaXF1ZUludml0ZUNvZGUoKTsKKworICAgICAgICAvLyDlsIbpgoDor7fnoIHkv53lrZjliLAgYHVzZXJfaW52aXRlX2NvZGVgIOihqAorICAgICAgICBVc2VySW52aXRlQ29kZSB1c2VySW52aXRlQ29kZSA9IG5ldyBVc2VySW52aXRlQ29kZSgpOworICAgICAgICB1c2VySW52aXRlQ29kZS5zZXRVc2VySWQodXNlcklkKTsKKyAgICAgICAgdXNlckludml0ZUNvZGUuc2V0SW52aXRlQ29kZShpbnZpdGVDb2RlKTsKKyAgICAgICAgdXNlckludml0ZUNvZGUuc2V0Q3JlYXRlZEF0KGphdmEudGltZS5Mb2NhbERhdGVUaW1lLm5vdygpKTsKKworICAgICAgICB1c2VySW52aXRlQ29kZVJlcG9zaXRvcnkuc2F2ZSh1c2VySW52aXRlQ29kZSk7CisKKyAgICAgICAgLy8g5pu05paw55So5oi355qEIGBpbnZpdGVfY291bnRg77yM5YeP5bCRMQorICAgICAgICB1c2VyLnNldEludml0ZUNvdW50KHVzZXIuZ2V0SW52aXRlQ291bnQoKSAtIDEpOworICAgICAgICB1c2VyUmVwb3NpdG9yeS5zYXZlKHVzZXIpOworCisgICAgICAgIC8vIOi/lOWbnuaIkOWKn+S/oeaBrworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLpgoDor7fnoIHnlJ/miJDmiJDlip8iKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJpbnZpdGVfY29kZSIsIGludml0ZUNvZGUpOworCisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICAvLyDnlJ/miJDllK/kuIDnmoTpgoDor7fnoIHvvIzkvb/nlKgyNuS4quWtl+avje+8iOWkp+Wwj+WGme+8iQorICAgIHByaXZhdGUgU3RyaW5nIGdlbmVyYXRlVW5pcXVlSW52aXRlQ29kZSgpIHsKKyAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgaW52aXRlQ29kZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICAgICAgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBpbnZpdGVDb2RlLmFwcGVuZChjaGFyYWN0ZXJzLmNoYXJBdChyYW5kb20ubmV4dEludChjaGFyYWN0ZXJzLmxlbmd0aCgpKSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGludml0ZUNvZGUudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHJlZ2lzdGVyVXNlcihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBlbWFpbCwgU3RyaW5nIHBhc3N3b3JkLCBTdHJpbmcgcm9sZSwgU3RyaW5nIGludml0ZUNvZGUpIHsKKyAgICAgICAgLy8g5qOA5p+l6YKu566x5piv5ZCm5bey57uP5rOo5YaMCisgICAgICAgIE9wdGlvbmFsPFVzZXJzPiBleGlzdGluZ0VtYWlsVXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUVtYWlsKGVtYWlsKTsKKyAgICAgICAgaWYgKGV4aXN0aW5nRW1haWxVc2VyLmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICByZXR1cm4gIuivpemCrueuseW3suiiq+azqOWGjCI7CisgICAgICAgIH0KKworICAgICAgICAvLyDmo4Dmn6XnlKjmiLflkI3mmK/lkKblt7Lnu4/lrZjlnKgKKyAgICAgICAgT3B0aW9uYWw8VXNlcnM+IGV4aXN0aW5nVXNlcm5hbWVVc2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5VXNlcm5hbWUodXNlcm5hbWUpOyAvLyDpnIDopoHmoLnmja7nlKjmiLflkI3mn6Xor6IKKyAgICAgICAgaWYgKGV4aXN0aW5nVXNlcm5hbWVVc2VyLmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICByZXR1cm4gIuivpeeUqOaIt+WQjeW3suiiq+azqOWGjCI7CisgICAgICAgIH0KKworICAgICAgICAvLyDmo4Dmn6XpgoDor7fnoIHmmK/lkKbmnInmlYgKKyAgICAgICAgaWYgKGludml0ZUNvZGUgPT0gbnVsbCB8fCBpbnZpdGVDb2RlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuICLpgoDor7fnoIHkuI3og73kuLrnqboiOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8VXNlckludml0ZUNvZGU+IGludml0ZSA9IHVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5maW5kQnlJbnZpdGVDb2RlKGludml0ZUNvZGUpOworICAgICAgICBpZiAoaW52aXRlLmlzRW1wdHkoKSB8fCBpbnZpdGUuZ2V0KCkuZ2V0SXNVc2VkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAi6YKA6K+356CB5peg5pWI5oiW5bey6KKr5L2/55SoIjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOiuvue9rum7mOiupOetiee6p+S4ujLvvIjnlLHkuo7pgoDor7fnoIHmnInmlYjvvIkKKyAgICAgICAgTG9uZyBsZXZlbCA9IDJMOworCisgICAgICAgIC8vIOiuvue9rum7mOiupOWktOWDjyBVUkwKKyAgICAgICAgU3RyaW5nIGF2YXRhclVybCA9ICJodHRwczovL2V4YW1wbGUuY29tL2RlZmF1bHQtYXZhdGFyLmpwZyI7ICAvLyDpu5jorqTlpLTlg48KKworICAgICAgICAvLyDojrflj5bpgoDor7fnoIHlr7nlupTnmoTnlKjmiLdJRAorICAgICAgICBVc2VySW52aXRlQ29kZSBpbnZpdGVFbnRpdHkgPSBpbnZpdGUuZ2V0KCk7CisgICAgICAgIExvbmcgaW52aXRlVXNlcklkID0gaW52aXRlRW50aXR5LmdldFVzZXJJZCgpOworCisgICAgICAgIC8vIOWIm+W7uuaWsOeUqOaItworICAgICAgICBVc2VycyBuZXdVc2VyID0gbmV3IFVzZXJzKCk7CisgICAgICAgIG5ld1VzZXIuc2V0VXNlcm5hbWUodXNlcm5hbWUpOworICAgICAgICBuZXdVc2VyLnNldEVtYWlsKGVtYWlsKTsKKyAgICAgICAgbmV3VXNlci5zZXRQYXNzd29yZChwYXNzd29yZCk7CisgICAgICAgIG5ld1VzZXIuc2V0Um9sZShyb2xlKTsKKyAgICAgICAgbmV3VXNlci5zZXRJbnZpdGVDb3VudCgwKTsgIC8vIOWIneWni+mCgOivt+eggeaVsOmHj+S4uiAwCisgICAgICAgIG5ld1VzZXIuc2V0TGV2ZWwobGV2ZWwpOworICAgICAgICBuZXdVc2VyLnNldEF2YXRhclVybChhdmF0YXJVcmwpOyAgLy8g6K6+572u6buY6K6k5aS05YOPCisgICAgICAgIG5ld1VzZXIuc2V0UmVnaXN0cmF0aW9uRGF0ZShuZXcgamF2YS51dGlsLkRhdGUoKSk7ICAvLyDorr7nva7ms6jlhozml6XmnJ8KKyAgICAgICAgbmV3VXNlci5zZXRDdXJyZW50RXhwZXJpZW5jZSgwKTsgIC8vIOm7mOiupOe7j+mqjOS4uiAwCisgICAgICAgIG5ld1VzZXIuc2V0Q3VycmVudFNlZWRpbmdIb3VycygwZik7ICAvLyDpu5jorqTlgZrnp43ml7bplb/kuLogMAorICAgICAgICBuZXdVc2VyLnNldFJlZ2lzdHJhdGlvblRpbWUobmV3IGphdmEudXRpbC5EYXRlKCkpOyAgLy8g6K6+572u5rOo5YaM5pe26Ze05Li65b2T5YmN5pe26Ze0CisKKyAgICAgICAgLy8g5L+d5a2Y55So5oi35L+h5oGvCisgICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUobmV3VXNlcik7CisKKyAgICAgICAgLy8g5pu05paw6YKA6K+356CB55qE5L2/55So54q25oCBCisgICAgICAgIGludml0ZUVudGl0eS5zZXRJc1VzZWQodHJ1ZSk7CisgICAgICAgIHVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5zYXZlKGludml0ZUVudGl0eSk7CisKKyAgICAgICAgcmV0dXJuICLnlKjmiLfms6jlhozmiJDlip8iOworICAgIH0KIAogCi1pbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmV4dGVuc2lvbi5zZXJ2aWNlLklTZXJ2aWNlOworICAgIHB1YmxpYyBTdHJpbmcgbG9naW5Vc2VyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7CisgICAgICAgIC8vIOajgOafpeeUqOaIt+aYr+WQpuWtmOWcqAorICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdGlvbmFsID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5VXNlcm5hbWUodXNlcm5hbWUpOworICAgICAgICBpZiAodXNlck9wdGlvbmFsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuICLnlKjmiLflkI3kuI3lrZjlnKgiOworICAgICAgICB9CiAKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXI7CisgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyT3B0aW9uYWwuZ2V0KCk7CiAKLXB1YmxpYyBpbnRlcmZhY2UgVXNlclNlcnZpY2UgZXh0ZW5kcyBJU2VydmljZTxVc2VyPiB7Ci0gICAgVXNlciBsb2dpblNlcnZpY2UoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpOworICAgICAgICAvLyDmo4Dmn6Xlr4bnoIHmmK/lkKbmraPnoa4KKyAgICAgICAgaWYgKCF1c2VyLmdldFBhc3N3b3JkKCkuZXF1YWxzKHBhc3N3b3JkKSkgeworICAgICAgICAgICAgcmV0dXJuICLlr4bnoIHplJnor68iOworICAgICAgICB9CisKKyAgICAgICAgLy8g55m75b2V5oiQ5YqfCisgICAgICAgIHJldHVybiAi55m75b2V5oiQ5YqfIjsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGNoYW5nZVBhc3N3b3JkKExvbmcgdXNlcklkLCBTdHJpbmcgb2xkUGFzc3dvcmQsIFN0cmluZyBuZXdQYXNzd29yZCwgU3RyaW5nIGNvbmZpcm1QYXNzd29yZCkgeworICAgICAgICAvLyDmn6Xmib7nlKjmiLcKKyAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlKG51bGwpOworCisgICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAi55So5oi35LiN5a2Y5ZyoIjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOajgOafpeaXp+WvhueggeaYr+WQpuato+ehrgorICAgICAgICBpZiAoIXVzZXIuZ2V0UGFzc3dvcmQoKS5lcXVhbHMob2xkUGFzc3dvcmQpKSB7CisgICAgICAgICAgICByZXR1cm4gIuaXp+WvhueggemUmeivryI7CisgICAgICAgIH0KKworICAgICAgICAvLyDmo4Dmn6XmlrDlr4bnoIHlkoznoa7orqTlr4bnoIHmmK/lkKbkuIDoh7QKKyAgICAgICAgaWYgKCFuZXdQYXNzd29yZC5lcXVhbHMoY29uZmlybVBhc3N3b3JkKSkgeworICAgICAgICAgICAgcmV0dXJuICLmlrDlr4bnoIHkuI7noa7orqTlr4bnoIHkuI3kuIDoh7QiOworICAgICAgICB9CisKKyAgICAgICAgLy8g5pu05paw5a+G56CBCisgICAgICAgIHVzZXIuc2V0UGFzc3dvcmQobmV3UGFzc3dvcmQpOworICAgICAgICB1c2VyUmVwb3NpdG9yeS5zYXZlKHVzZXIpOworCisgICAgICAgIHJldHVybiAi5a+G56CB5L+u5pS55oiQ5YqfIjsKKyAgICB9CisKKyAgICAvLyDojrflj5bnlKjmiLfkuKrkurrotYTmlpkKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQcm9maWxlKExvbmcgdXNlcklkKSB7CisgICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0aW9uYWwgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpOworCisgICAgICAgIC8vIOWmguaenOeUqOaIt+S4jeWtmOWcqO+8jOi/lOWbnm51bGzmiJbogIXlj6/ku6Xmipvlh7rlvILluLgKKyAgICAgICAgaWYgKHVzZXJPcHRpb25hbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyDlj6/ku6Xov5Tlm54gbnVsbCDmiJbogIXmoLnmja7pnIDopoHov5Tlm57plJnor6/kv6Hmga8KKyAgICAgICAgfQorCisgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyT3B0aW9uYWwuZ2V0KCk7CisKKyAgICAgICAgLy8g5bCG6ZyA6KaB55qE5a2X5q615pS+5YWlIE1hcCDkuK0KKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwcm9maWxlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICBwcm9maWxlLnB1dCgiYXZhdGFyVXJsIiwgdXNlci5nZXRBdmF0YXJVcmwoKSk7CisgICAgICAgIHByb2ZpbGUucHV0KCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSk7CisgICAgICAgIHByb2ZpbGUucHV0KCJlbWFpbCIsIHVzZXIuZ2V0RW1haWwoKSk7CisgICAgICAgIHByb2ZpbGUucHV0KCJnZW5kZXIiLCB1c2VyLmdldEdlbmRlcigpKTsKKyAgICAgICAgcHJvZmlsZS5wdXQoImRlc2NyaXB0aW9uIiwgdXNlci5nZXREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgcHJvZmlsZS5wdXQoImhvYmJpZXMiLCB1c2VyLmdldEhvYmJpZXMoKSk7CisgICAgICAgIHByb2ZpbGUucHV0KCJsZXZlbCIsIHVzZXIuZ2V0TGV2ZWwoKSk7CisgICAgICAgIHByb2ZpbGUucHV0KCJFeHBlcmllbmNlIiwgdXNlci5nZXRDdXJyZW50RXhwZXJpZW5jZSgpKTsKKyAgICAgICAgcHJvZmlsZS5wdXQoInVwbG9hZENvdW50IiwgdXNlci5nZXRVcGxvYWRDb3VudCgpKTsKKyAgICAgICAgcHJvZmlsZS5wdXQoImRvd25sb2FkQ291bnQiLCB1c2VyLmdldERvd25sb2FkQ291bnQoKSk7CisgICAgICAgIHByb2ZpbGUucHV0KCJzaGFyZVJhdGUiLCB1c2VyLmdldFNoYXJlUmF0ZSgpKTsKKyAgICAgICAgcHJvZmlsZS5wdXQoInJlZ2lzdHJhdGlvblRpbWUiLCB1c2VyLmdldFJlZ2lzdHJhdGlvblRpbWUoKSk7CisKKyAgICAgICAgcmV0dXJuIHByb2ZpbGU7CisgICAgfQorCisgICAgLy8g5L+u5pS555So5oi35Liq5Lq66LWE5paZCisgICAgcHVibGljIGJvb2xlYW4gZWRpdFByb2ZpbGUoTG9uZyB1c2VySWQsIFN0cmluZyBhdmF0YXJVcmwsIFN0cmluZyBuaWNrbmFtZSwgU3RyaW5nIGdlbmRlciwgU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgaG9iYmllcykgeworICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdGlvbmFsID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKTsKKworICAgICAgICAvLyDlpoLmnpznlKjmiLfkuI3lrZjlnKjvvIzov5Tlm55mYWxzZQorICAgICAgICBpZiAodXNlck9wdGlvbmFsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyDnlKjmiLfkuI3lrZjlnKgKKyAgICAgICAgfQorCisgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyT3B0aW9uYWwuZ2V0KCk7CisKKyAgICAgICAgLy8g5pu05paw55So5oi36LWE5paZ77yM5Y+q5pyJ5Lyg5YWl5YC85omN5Lya5pu05paw5a+55bqU5a2X5q61CisgICAgICAgIGlmIChhdmF0YXJVcmwgIT0gbnVsbCkgeworICAgICAgICAgICAgdXNlci5zZXRBdmF0YXJVcmwoYXZhdGFyVXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmlja25hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgdXNlci5zZXRVc2VybmFtZShuaWNrbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdlbmRlciAhPSBudWxsKSB7CisgICAgICAgICAgICB1c2VyLnNldEdlbmRlcihnZW5kZXIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICB1c2VyLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaG9iYmllcyAhPSBudWxsKSB7CisgICAgICAgICAgICB1c2VyLnNldEhvYmJpZXMoaG9iYmllcyk7CisgICAgICAgIH0KKworICAgICAgICAvLyDkv53lrZjmm7TmlrDlkI7nmoTnlKjmiLfkv6Hmga8KKyAgICAgICAgdXNlclJlcG9zaXRvcnkuc2F2ZSh1c2VyKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g5pu05paw5oiQ5YqfCisgICAgfQorCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY2FsY3VsYXRlU2hhcmVSYXRlKExvbmcgdXNlcklkKSB7CisgICAgICAgIC8vIOafpeaJvueUqOaItworICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKS5vckVsc2UobnVsbCk7CisgICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXAub2YoInN0YXR1cyIsICJlcnJvciIsICJtZXNzYWdlIiwgIueUqOaIt+S4jeWtmOWcqCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g6I635Y+W5LiK5Lyg6YeP5ZKM5LiL6L296YePCisgICAgICAgIEZsb2F0IHVwbG9hZENvdW50ID0gdXNlci5nZXRVcGxvYWRDb3VudCgpOworICAgICAgICBGbG9hdCBkb3dubG9hZENvdW50ID0gdXNlci5nZXREb3dubG9hZENvdW50KCk7CisKKyAgICAgICAgLy8g6K6h566X5YiG5Lqr546HCisgICAgICAgIEZsb2F0IHNoYXJlUmF0ZSA9IDBmOyAgLy8g6buY6K6k5YiG5Lqr546H5Li6MAorICAgICAgICBpZiAoZG93bmxvYWRDb3VudCAhPSAwKSB7CisgICAgICAgICAgICBzaGFyZVJhdGUgPSB1cGxvYWRDb3VudCAvIGRvd25sb2FkQ291bnQ7ICAvLyDliIbkuqvnjocgPSDkuIrkvKDph48gLyDkuIvovb3ph48KKyAgICAgICAgfQorCisgICAgICAgIC8vIOabtOaWsOeUqOaIt+eahOWIhuS6q+eOhworICAgICAgICB1c2VyLnNldFNoYXJlUmF0ZShzaGFyZVJhdGUpOworICAgICAgICB1c2VyUmVwb3NpdG9yeS5zYXZlKHVzZXIpOworCisgICAgICAgIC8vIOi/lOWbnue7k+aenAorICAgICAgICByZXR1cm4gTWFwLm9mKCJzdGF0dXMiLCAic3VjY2VzcyIsICJtZXNzYWdlIiwgIuWIhuS6q+eOh+iuoeeul+aIkOWKnyIsICJzaGFyZVJhdGUiLCBzaGFyZVJhdGUpOworICAgIH0KIAogCi0gICAgYm9vbGVhbiBwcmVSZWdpc3RlclVzZXIoVXNlciB1c2VyKTsKLQotCi0gICAgYm9vbGVhbiB2ZXJpZnlFbWFpbChTdHJpbmcgZW1haWwsIFN0cmluZyB0b2tlbik7Ci0KLQotICAgIGJvb2xlYW4gY2hlY2tFbWFpbEV4aXN0cyhTdHJpbmcgZW1haWwpOwotCi0gICAgYm9vbGVhbiBjaGVja1Bhc3N3b3JkKExvbmcgdXNlcklkLCBTdHJpbmcgcmF3UGFzc3dvcmQpOwotCi0KLS8vICAgIEludGVnZXIgZ2V0VXNlcklkKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQppbmRleCA0YmJkNWMzLi5kOGRlNGI3IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQpAQCAtMSw0NyArMSw0NyBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5zZXJ2aWNlSW1wbDsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXI7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5HcmFudGVkQXV0aG9yaXR5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5hdXRob3JpdHkuQXV0aG9yaXR5VXRpbHM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLmF1dGhvcml0eS5TaW1wbGVHcmFudGVkQXV0aG9yaXR5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VyRGV0YWlsczsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUudXNlcmRldGFpbHMuVXNlckRldGFpbHNTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VybmFtZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotQFNlcnZpY2UKLXB1YmxpYyBjbGFzcyBVc2VyRGV0YWlsc1NlcnZpY2VJbXBsIGltcGxlbWVudHMgVXNlckRldGFpbHNTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJNYXBwZXIgdXNlck1hcHBlcjsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVc2VyRGV0YWlscyBsb2FkVXNlckJ5VXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKSB0aHJvd3MgVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vdXNlcm5hbWXlj4LmlbAs5piv5Zyo55m76ZmG5pe2LOeUqOaIt+S8oOmAkueahOihqOWNleaVsOaNrnVzZXJuYW1lCi0gICAgICAgIC8v5Li76KaB6K+75Y+W5pWw5o2u5bqTM+S4quWAvCB1c2VybmFtZSBwYXNzd29yZCBhdXRob3JpdGllcwotICAgICAgICBVc2VyIHVzZXI9IHVzZXJNYXBwZXIuc2VsZWN0QnlVc2VybmFtZSh1c2VybmFtZSk7Ci0gICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBVc2VybmFtZU5vdEZvdW5kRXhjZXB0aW9uKCLnlKjmiLflkI3mnKrmib7liLAiKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBhdXRob3JpdHlOYW1lID0gdXNlci5nZXRSb2xlKCk7Ci0gICAgICAgIC8v5Li65LqG6L+U5Zue5LiA5LiqVXNlckRldGFpbHMg5L2/55SoVXNlcgotICAgICAgICBMaXN0PEdyYW50ZWRBdXRob3JpdHk+IGF1dGhvcml0aWVzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIEdyYW50ZWRBdXRob3JpdHkgYXV0aG9yaXR5ID0gbmV3IFNpbXBsZUdyYW50ZWRBdXRob3JpdHkoYXV0aG9yaXR5TmFtZSk7Ci0gICAgICAgIGF1dGhvcml0aWVzLmFkZChhdXRob3JpdHkpOwotICAgICAgICByZXR1cm4gbmV3IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VyKAotICAgICAgICAgICAgICAgIHVzZXIuZ2V0VXNlcm5hbWUoKSwKLSAgICAgICAgICAgICAgICB1c2VyLmdldFBhc3N3b3JkKCksCi0gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gYWNjb3VudEVuYWJsZWQKLSAgICAgICAgICAgICAgICB0cnVlLCAvLyBhY2NvdW50Tm9uRXhwaXJlZAotICAgICAgICAgICAgICAgIHRydWUsIC8vIGNyZWRlbnRpYWxzTm9uRXhwaXJlZAotICAgICAgICAgICAgICAgIHRydWUsIC8vIGFjY291bnROb25Mb2NrZWQKLSAgICAgICAgICAgICAgICBBdXRob3JpdHlVdGlscy5jcmVhdGVBdXRob3JpdHlMaXN0KCJST0xFX1VTRVIiKSAvLyDorr7nva7nlKjmiLfnmoTop5LoibLmiJbmnYPpmZAKLSAgICAgICAgKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLy9wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLnNlcnZpY2VJbXBsOworLy8KKy8vaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKKy8vaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcjsKKy8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKKy8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5HcmFudGVkQXV0aG9yaXR5OworLy9pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLmF1dGhvcml0eS5BdXRob3JpdHlVdGlsczsKKy8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5hdXRob3JpdHkuU2ltcGxlR3JhbnRlZEF1dGhvcml0eTsKKy8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VyRGV0YWlsczsKKy8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VyRGV0YWlsc1NlcnZpY2U7CisvL2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUudXNlcmRldGFpbHMuVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKy8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworLy8KKy8vaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisvL2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKy8vCisvL0BTZXJ2aWNlCisvL3B1YmxpYyBjbGFzcyBVc2VyRGV0YWlsc1NlcnZpY2VJbXBsIGltcGxlbWVudHMgVXNlckRldGFpbHNTZXJ2aWNlIHsKKy8vCisvLyAgICBAQXV0b3dpcmVkCisvLyAgICBwcml2YXRlIFVzZXJNYXBwZXIgdXNlck1hcHBlcjsKKy8vCisvLyAgICBAT3ZlcnJpZGUKKy8vICAgIHB1YmxpYyBVc2VyRGV0YWlscyBsb2FkVXNlckJ5VXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKSB0aHJvd3MgVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisvLyAgICAgICAgLy91c2VybmFtZeWPguaVsCzmmK/lnKjnmbvpmYbml7Ys55So5oi35Lyg6YCS55qE6KGo5Y2V5pWw5o2udXNlcm5hbWUKKy8vICAgICAgICAvL+S4u+imgeivu+WPluaVsOaNruW6kzPkuKrlgLwgdXNlcm5hbWUgcGFzc3dvcmQgYXV0aG9yaXRpZXMKKy8vICAgICAgICBVc2VyIHVzZXI9IHVzZXJNYXBwZXIuc2VsZWN0QnlVc2VybmFtZSh1c2VybmFtZSk7CisvLyAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgeworLy8gICAgICAgICAgICB0aHJvdyBuZXcgVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbigi55So5oi35ZCN5pyq5om+5YiwIik7CisvLyAgICAgICAgfQorLy8KKy8vICAgICAgICBTdHJpbmcgYXV0aG9yaXR5TmFtZSA9IHVzZXIuZ2V0Um9sZSgpOworLy8gICAgICAgIC8v5Li65LqG6L+U5Zue5LiA5LiqVXNlckRldGFpbHMg5L2/55SoVXNlcgorLy8gICAgICAgIExpc3Q8R3JhbnRlZEF1dGhvcml0eT4gYXV0aG9yaXRpZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKy8vICAgICAgICBHcmFudGVkQXV0aG9yaXR5IGF1dGhvcml0eSA9IG5ldyBTaW1wbGVHcmFudGVkQXV0aG9yaXR5KGF1dGhvcml0eU5hbWUpOworLy8gICAgICAgIGF1dGhvcml0aWVzLmFkZChhdXRob3JpdHkpOworLy8gICAgICAgIHJldHVybiBuZXcgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLnVzZXJkZXRhaWxzLlVzZXIoCisvLyAgICAgICAgICAgICAgICB1c2VyLmdldFVzZXJuYW1lKCksCisvLyAgICAgICAgICAgICAgICB1c2VyLmdldFBhc3N3b3JkKCksCisvLyAgICAgICAgICAgICAgICB0cnVlLCAvLyBhY2NvdW50RW5hYmxlZAorLy8gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gYWNjb3VudE5vbkV4cGlyZWQKKy8vICAgICAgICAgICAgICAgIHRydWUsIC8vIGNyZWRlbnRpYWxzTm9uRXhwaXJlZAorLy8gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gYWNjb3VudE5vbkxvY2tlZAorLy8gICAgICAgICAgICAgICAgQXV0aG9yaXR5VXRpbHMuY3JlYXRlQXV0aG9yaXR5TGlzdCgiUk9MRV9VU0VSIikgLy8g6K6+572u55So5oi355qE6KeS6Imy5oiW5p2D6ZmQCisvLyAgICAgICAgKTsKKy8vICAgIH0KKy8vfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcxOGZlLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotCi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLnNlcnZpY2VJbXBsOwotaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5jb3JlLmNvbmRpdGlvbnMucXVlcnkuUXVlcnlXcmFwcGVyOwotaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5leHRlbnNpb24uc2VydmljZS5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlZlcmlmaWNhdGlvblRva2VuTWFwcGVyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlZlcmlmaWNhdGlvblRva2VuOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkVtYWlsU2VydmljZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuUmFuZG9tU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jcnlwdG8ucGFzc3dvcmQuUGFzc3dvcmRFbmNvZGVyOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOwotaW1wb3J0IGphdmEudGltZS5JbnN0YW50OwotaW1wb3J0IGphdmEudGltZS50ZW1wb3JhbC5DaHJvbm9Vbml0OwotLy/nmbvlvZXms6jlhowKLUBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgVXNlclNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGw8VXNlck1hcHBlciwgVXNlcj4gaW1wbGVtZW50cyBVc2VyU2VydmljZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFVzZXJTZXJ2aWNlSW1wbC5jbGFzcyk7Ci0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlck1hcHBlciB1c2VyTWFwcGVyOyAvLyBVc2luZyBNeUJhdGlzLVBsdXMgbWFwcGVyCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgRW1haWxTZXJ2aWNlSW1wbCBlbWFpbFNlcnZpY2U7Ci0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7IC8vIFVzaW5nIE15QmF0aXMtUGx1cyBtYXBwZXIKLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBQYXNzd29yZEVuY29kZXIgcGFzc3dvcmRFbmNvZGVyOyAvLyBJbmplY3RpbmcgcGFzc3dvcmQgZW5jb2RlcgotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVc2VyIGxvZ2luU2VydmljZShTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICBsb2cuZGVidWcoIkF0dGVtcHRpbmcgbG9naW4gd2l0aCB1c2VybmFtZToge30sIHBhc3N3b3JkOiB7fSIsIHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0gICAgICAgIFVzZXIgdXNlciA9IHVzZXJNYXBwZXIuc2VsZWN0T25lKG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgidXNlcm5hbWUiLCB1c2VybmFtZSkuZXEoInBhc3N3b3JkIiwgcGFzc3dvcmQpKTsKLSAgICAgICAgaWYgKHVzZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdXNlci5zZXRQYXNzd29yZCgiIik7ICAvLyBDbGVhciB0aGUgcGFzc3dvcmQgYmVmb3JlIHJldHVybmluZwotICAgICAgICAgICAgbG9nLmRlYnVnKCJMb2dpbiBzdWNjZXNzZnVsLCBVc2VyIElEOiB7fSIsIHVzZXIuZ2V0SWQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2cuZGVidWcoIkxvZ2luIGZhaWxlZCwgaW5jb3JyZWN0IHVzZXJuYW1lIG9yIHBhc3N3b3JkLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB1c2VyOwotICAgIH0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBwcmVSZWdpc3RlclVzZXIoVXNlciB1c2VyKSB7Ci0gICAgICAgIGxvZy5kZWJ1ZygiUHJlLXJlZ2lzdGVyaW5nIHVzZXIsIHVzZXJuYW1lOiB7fSwgZW1haWw6IHt9IiwgdXNlci5nZXRVc2VybmFtZSgpLCB1c2VyLmdldEVtYWlsKCkpOwotICAgICAgICAvLyDmo4Dmn6XnlKjmiLflkI3miJbpgq7nrrHmmK/lkKblt7LlrZjlnKgKLSAgICAgICAgYm9vbGVhbiB1c2VyRXhpc3RzID0gdXNlck1hcHBlci5zZWxlY3RPbmUobmV3IFF1ZXJ5V3JhcHBlcjxVc2VyPigpLmVxKCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSkpICE9IG51bGwgfHwKLSAgICAgICAgICAgICAgICB1c2VyTWFwcGVyLnNlbGVjdE9uZShuZXcgUXVlcnlXcmFwcGVyPFVzZXI+KCkuZXEoImVtYWlsIiwgdXNlci5nZXRFbWFpbCgpKSkgIT0gbnVsbDsKLSAgICAgICAgaWYgKHVzZXJFeGlzdHMpIHsKLSAgICAgICAgICAgIGxvZy5kZWJ1ZygiUHJlLXJlZ2lzdHJhdGlvbiBmYWlsZWQsIHVzZXJuYW1lIG9yIGVtYWlsIGFscmVhZHkgZXhpc3RzLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8g55So5oi35ZCN5oiW6YKu566x5bey57uP5a2Y5ZyoCi0gICAgICAgIH0KLSAgICAgICAgLy8g5Yqg5a+G5a+G56CBCi0gICAgICAgIFN0cmluZyBlbmNyeXB0ZWRQYXNzd29yZCA9IHBhc3N3b3JkRW5jb2Rlci5lbmNvZGUodXNlci5nZXRQYXNzd29yZCgpKTsKLSAgICAgICAgLy8g55Sf5oiQ6aqM6K+B56CBCi0gICAgICAgIFN0cmluZyB0b2tlbiA9IFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbU51bWVyaWMoNik7Ci0gICAgICAgIC8vIOiuvue9rui/h+acn+aXtumXtOS4uuW9k+WJjeaXtumXtOWKoOS4gOWwj+aXtgotICAgICAgICBJbnN0YW50IGV4cGlyeURhdGUgPSBJbnN0YW50Lm5vdygpLnBsdXMoMSwgQ2hyb25vVW5pdC5IT1VSUyk7Ci0gICAgICAgIC8vIOWIm+W7uumqjOivgeS7pOeJjOWvueixoQotICAgICAgICBWZXJpZmljYXRpb25Ub2tlbiB2ZXJpZmljYXRpb25Ub2tlbiA9IG5ldyBWZXJpZmljYXRpb25Ub2tlbigKLSAgICAgICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAgICAgICB1c2VyLmdldFVzZXJuYW1lKCksCi0gICAgICAgICAgICAgICAgdXNlci5nZXRFbWFpbCgpLAotICAgICAgICAgICAgICAgIGVuY3J5cHRlZFBhc3N3b3JkLAotICAgICAgICAgICAgICAgIGV4cGlyeURhdGUKLSAgICAgICAgKTsKLSAgICAgICAgLy8g5o+S5YWl6aqM6K+B5Luk54mMCi0gICAgICAgIGludCByb3dzSW5zZXJ0ZWQgPSB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlci5pbnNlcnQodmVyaWZpY2F0aW9uVG9rZW4pOwotICAgICAgICBpZiAocm93c0luc2VydGVkID4gMCkgewotICAgICAgICAgICAgLy8g5Y+R6YCB6aqM6K+B6YKu5Lu2Ci0gICAgICAgICAgICBlbWFpbFNlcnZpY2Uuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHVzZXIuZ2V0RW1haWwoKSwgdG9rZW4pOwotICAgICAgICAgICAgbG9nLmRlYnVnKCJQcmUtcmVnaXN0cmF0aW9uIHN1Y2Nlc3NmdWwsIHZlcmlmaWNhdGlvbiBjb2RlOiB7fSwgZXhwaXJ5IGRhdGU6IHt9IiwgdG9rZW4sIGV4cGlyeURhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAvLyDms6jlhozliY3pqozor4HmiJDlip8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvZy5lcnJvcigiRmFpbGVkIHRvIGluc2VydCB2ZXJpZmljYXRpb24gdG9rZW4gaW50byBkYXRhYmFzZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIOWmguaenOaPkuWFpemqjOivgeS7pOeJjOWksei0pe+8jOi/lOWbnuWksei0pQotICAgICAgICB9Ci0gICAgfQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHZlcmlmeUVtYWlsKFN0cmluZyBlbWFpbCwgU3RyaW5nIHRva2VuKSB7Ci0gICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZ5aW5nIGVtYWlsLCBlbWFpbDoge30sIHRva2VuOiB7fSIsIGVtYWlsLCB0b2tlbik7Ci0gICAgICAgIFZlcmlmaWNhdGlvblRva2VuIHZlcmlmaWNhdGlvblRva2VuID0gdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuc2VsZWN0T25lKAotICAgICAgICAgICAgICAgIG5ldyBRdWVyeVdyYXBwZXI8VmVyaWZpY2F0aW9uVG9rZW4+KCkuZXEoInRva2VuIiwgdG9rZW4pLmVxKCJlbWFpbCIsIGVtYWlsKQotICAgICAgICApOwotICAgICAgICBpZiAodmVyaWZpY2F0aW9uVG9rZW4gIT0gbnVsbCAmJiAhdmVyaWZpY2F0aW9uVG9rZW4uaXNFeHBpcmVkKCkpIHsKLSAgICAgICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZpY2F0aW9uIGNvZGUgaXMgdmFsaWQsIHVzZXJuYW1lOiB7fSIsIHZlcmlmaWNhdGlvblRva2VuLmdldFVzZXJuYW1lKCkpOwotICAgICAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RPbmUobmV3IFF1ZXJ5V3JhcHBlcjxVc2VyPigpLmVxKCJlbWFpbCIsIGVtYWlsKSk7Ci0gICAgICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdXNlciA9IG5ldyBVc2VyKCk7Ci0gICAgICAgICAgICAgICAgdXNlci5zZXRFbWFpbChlbWFpbCk7Ci0gICAgICAgICAgICAgICAgdXNlci5zZXRVc2VybmFtZSh2ZXJpZmljYXRpb25Ub2tlbi5nZXRVc2VybmFtZSgpKTsKLSAgICAgICAgICAgICAgICB1c2VyLnNldFBhc3N3b3JkKHZlcmlmaWNhdGlvblRva2VuLmdldFBhc3N3b3JkKCkpOwotICAgICAgICAgICAgICAgIHVzZXIuc2V0RW1haWxWZXJpZmllZCh0cnVlKTsKLSAgICAgICAgICAgICAgICB1c2VyTWFwcGVyLmluc2VydCh1c2VyKTsgIC8vIFNhdmUgbmV3IHVzZXIKLSAgICAgICAgICAgICAgICBsb2cuZGVidWcoIk5ldyB1c2VyIGNyZWF0ZWQsIFVzZXIgSUQ6IHt9IiwgdXNlci5nZXRJZCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdXNlci5zZXRFbWFpbFZlcmlmaWVkKHRydWUpOwotICAgICAgICAgICAgICAgIHVzZXJNYXBwZXIudXBkYXRlQnlJZCh1c2VyKTsgIC8vIFVwZGF0ZSBleGlzdGluZyB1c2VyCi0gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJVc2VyIGVtYWlsIHZlcmlmaWVkLCBVc2VyIElEOiB7fSIsIHVzZXIuZ2V0SWQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlci5kZWxldGUobmV3IFF1ZXJ5V3JhcHBlcjxWZXJpZmljYXRpb25Ub2tlbj4oKS5lcSgidG9rZW4iLCB0b2tlbikpOyAvLyBDbGVhbiB1cCB0aGUgdG9rZW4KLSAgICAgICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZpY2F0aW9uIGNvZGUgZGVsZXRlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGxvZy5kZWJ1ZygiVmVyaWZpY2F0aW9uIGNvZGUgaXMgaW52YWxpZCBvciBleHBpcmVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW1haWxFeGlzdHMoU3RyaW5nIGVtYWlsKSB7Ci0gICAgICAgIGxvZy5kZWJ1Zygi5qOA5p+l6YKu566x5piv5ZCm5a2Y5Zyo77yM6YKu566x77yae30iLCBlbWFpbCk7Ci0gICAgICAgIGJvb2xlYW4gZXhpc3RzID0gdXNlck1hcHBlci5zZWxlY3RDb3VudChuZXcgUXVlcnlXcmFwcGVyPFVzZXI+KCkuZXEoImVtYWlsIiwgZW1haWwpKSA+IDA7Ci0gICAgICAgIGxvZy5kZWJ1Zygi6YKu566x5a2Y5Zyo54q25oCB77yae30iLCBleGlzdHMpOwotICAgICAgICByZXR1cm4gZXhpc3RzOwotICAgIH0KLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1Bhc3N3b3JkKExvbmcgdXNlcklkLCBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RCeUlkKHVzZXJJZCk7Ci0gICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLnlKjmiLfkuI3lrZjlnKgiKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgZW5jcnlwdGVkUGFzc3dvcmQgPSB1c2VyLmdldFBhc3N3b3JkKCk7Ci0gICAgICAgIHJldHVybiBwYXNzd29yZEVuY29kZXIubWF0Y2hlcyhwYXNzd29yZCwgZW5jcnlwdGVkUGFzc3dvcmQpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2ZjgyOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5qYXZhCkBAIC0wLDAgKzEsMTMxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC51dGlsczsKKworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OworCitwdWJsaWMgY2xhc3MgUmVzdWx0PFQ+IHsKKyAgICBwcml2YXRlIFN0cmluZyBjb2RlOworICAgIHByaXZhdGUgU3RyaW5nIG1zZzsKKyAgICBwcml2YXRlIFQgZGF0YTsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsKKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgY29kZSkgeworICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXNnKCkgeworICAgICAgICByZXR1cm4gbXNnOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE1zZyhTdHJpbmcgbXNnKSB7CisgICAgICAgIHRoaXMubXNnID0gbXNnOworICAgIH0KKworICAgIHB1YmxpYyBUIGdldERhdGEoKSB7CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldERhdGEoVCBkYXRhKSB7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdWx0KFQgZGF0YSkgeworICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHN1Y2Nlc3MoUmVzcG9uc2VFbnRpdHk8Pz4gcmVzdWx0TWFwLCBTdHJpbmcg5YW06Laj5bCP57uE5Yib5bu65oiQ5YqfKSB7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0PD4oKTsKKyAgICAgICAgcmVzdWx0LnNldENvZGUoIjIwMCIpOworICAgICAgICByZXN1bHQuc2V0TXNnKCLmiJDlip8iKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gc3VjY2VzcyhUIGRhdGEpIHsKKyAgICAgICAgUmVzdWx0PFQ+IHJlc3VsdCA9IG5ldyBSZXN1bHQ8PihkYXRhKTsKKyAgICAgICAgcmVzdWx0LnNldENvZGUoIjIwMCIpOworICAgICAgICByZXN1bHQuc2V0TXNnKCLmiJDlip8iKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHN1Y2Nlc3MoU3RyaW5nIG1zZykgeworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOworICAgICAgICByZXN1bHQuc2V0Q29kZSgiMjAwIik7CisgICAgICAgIHJlc3VsdC5zZXRNc2coIuaIkOWKnyIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBzdWNjZXNzKFQgZGF0YSxTdHJpbmcgbXNnKSB7CisgICAgICAgIFJlc3VsdDxUPiByZXN1bHQgPSBuZXcgUmVzdWx0PD4oZGF0YSk7CisgICAgICAgIHJlc3VsdC5zZXRDb2RlKCIyMDAiKTsKKyAgICAgICAgcmVzdWx0LnNldE1zZyhtc2cpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGVycm9yKFN0cmluZyBjb2RlLCBTdHJpbmcgbXNnKSB7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7CisgICAgICAgIHJlc3VsdC5zZXRDb2RlKGNvZGUpOworICAgICAgICByZXN1bHQuc2V0TXNnKG1zZyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIC8qKgorICAgICAqIOWIm+W7uuS4gOS4quihqOekuuaWh+S7tuWkp+Wwj+i2heWHuumZkOWItueahOe7k+aenOWvueixoeOAggorICAgICAqCisgICAgICogQHJldHVybiDmnoTpgKDnmoTmlofku7bov4flpKfplJnor6/nu5Pmnpzlr7nosaEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBmaWxlVG9vTGFyZ2UoKSB7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7CisgICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MTMiKTsKKyAgICAgICAgcmVzdWx0LnNldE1zZygi5paH5Lu25aSn5bCP6LaF5Ye66ZmQ5Yi244CCIik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICog5Yib5bu65LiA5Liq6KGo56S65paH5Lu25qC85byP5LiN5pSv5oyB55qE57uT5p6c5a+56LGh44CCCisgICAgICoKKyAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuagvOW8j+mUmeivr+e7k+aenOWvueixoQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHVuc3VwcG9ydGVkRmlsZVR5cGUoKSB7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7CisgICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MTUiKTsKKyAgICAgICAgcmVzdWx0LnNldE1zZygi5LiN5pSv5oyB55qE5paH5Lu25qC85byP44CCIik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICog5Yib5bu65LiA5Liq6KGo56S65paH5Lu25pyq5om+5Yiw55qE57uT5p6c5a+56LGh44CCCisgICAgICoKKyAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuacquaJvuWIsOmUmeivr+e7k+aenOWvueixoQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGZpbGVOb3RGb3VuZCgpIHsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IG5ldyBSZXN1bHQoKTsKKyAgICAgICAgcmVzdWx0LnNldENvZGUoIjQwNCIpOworICAgICAgICByZXN1bHQuc2V0TXNnKCLmlofku7bmnKrmib7liLDjgIIiKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDliJvlu7rkuIDkuKrooajnpLrmlofku7blrZjlgqjplJnor6/nmoTnu5Pmnpzlr7nosaHjgIIKKyAgICAgKgorICAgICAqIEBwYXJhbSBlcnJvck1zZyDor6bnu4bplJnor6/kv6Hmga8KKyAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuWtmOWCqOmUmeivr+e7k+aenOWvueixoQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGZpbGVTdG9yYWdlRXJyb3IoU3RyaW5nIGVycm9yTXNnKSB7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7CisgICAgICAgIHJlc3VsdC5zZXRDb2RlKCI1MDAiKTsKKyAgICAgICAgcmVzdWx0LnNldE1zZygi5paH5Lu25a2Y5YKo6ZSZ6K+vOiAiICsgZXJyb3JNc2cpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHBlcm1pc3Npb25EZW5pZWQoKSB7CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7CisgICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MDEiKTsKKyAgICAgICAgcmVzdWx0LnNldE1zZygi5p2D6ZmQ5LiN6Laz77yM5peg5rOV5omn6KGM6K+l5pON5L2c44CCIik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCmluZGV4IDA1OTAzMzMuLjU0ZTkyZTYgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCkBAIC0xLDExICsxLDExIEBACiBzZXJ2ZXIucG9ydD04MDgwCi1zcHJpbmcuZGF0YXNvdXJjZS51cmw9amRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2L3B0CitzcHJpbmcuZGF0YXNvdXJjZS51cmw9amRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2L3B0UHJvamVjdAogc3ByaW5nLmRhdGFzb3VyY2UudXNlcm5hbWU9cm9vdAotc3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQ9cm9vdAorc3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQ9MTIzNDU2CiBzcHJpbmcuZGF0YXNvdXJjZS5kcml2ZXItY2xhc3MtbmFtZT1jb20ubXlzcWwuY2ouamRiYy5Ecml2ZXIKK3NwcmluZy5qcGEuaGliZXJuYXRlLm5hbWluZy5waHlzaWNhbC1zdHJhdGVneT1vcmcuaGliZXJuYXRlLmJvb3QubW9kZWwubmFtaW5nLlBoeXNpY2FsTmFtaW5nU3RyYXRlZ3lTdGFuZGFyZEltcGwKIAotbXliYXRpcy1wbHVzLmNvbmZpZ3VyYXRpb24ubG9nLWltcGw9b3JnLmFwYWNoZS5pYmF0aXMubG9nZ2luZy5zdGRvdXQuU3RkT3V0SW1wbAotCisjbXliYXRpcy1wbHVzLmNvbmZpZ3VyYXRpb24ubG9nLWltcGw9b3JnLmFwYWNoZS5pYmF0aXMubG9nZ2luZy5zdGRvdXQuU3RkT3V0SW1wbAogCiAjIE1haWwgY29uZmlndXJhdGlvbgogc3ByaW5nLm1haWwucGFzc3dvcmQ9dGxqbmVib25oemhxZWNkYQpAQCAtMTcsMTUgKzE3LDggQEAKIAogCiBzcHJpbmcuanBhLmVuYWJsZWQ9ZmFsc2UKLXNwcmluZy5qcGEuaGliZXJuYXRlLmRkbC1hdXRvPW5vbmUKK3NwcmluZy5qcGEuaGliZXJuYXRlLmRkbC1hdXRvPXVwZGF0ZQogc3ByaW5nLmpwYS5vcGVuLWluLXZpZXc9ZmFsc2UKIAotIyB0cmFja2VyPz8KLXB0LnRyYWNrZXIucG9ydD02OTY5CiAKLXB0LnRyYWNrZXIudG9ycmVudC1kaXI9JHt1c2VyLmRpcn0vZGF0YS90b3JyZW50cwotCi1wdC50cmFja2VyLmFsbG93LWZvcmVpZ249ZmFsc2UKLXB0LnRyYWNrZXIuYW5ub3VuY2UtdXJsPS9jdXN0b20tYW5ub3VuY2UKLQotbXliYXRpcy1wbHVzLm1hcHBlci1sb2NhdGlvbnM9Y2xhc3NwYXRoOi9tYXBwZXIvKiovKi54bWwKKyNteWJhdGlzLXBsdXMubWFwcGVyLWxvY2F0aW9ucz1jbGFzc3BhdGg6L21hcHBlci8qKi8qLnhtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWRkMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsODEgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbW1lbnRzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcnM7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuQ29tbWVudFNlcnZpY2U7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnV0aWxzLlJlc3VsdDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKK2ltcG9ydCBvcmcubW9ja2l0by4qOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOworCitjbGFzcyBDb21tZW50Q29udHJvbGxlclRlc3QgeworCisgICAgQEluamVjdE1vY2tzCisgICAgcHJpdmF0ZSBDb21tZW50Q29udHJvbGxlciBjb21tZW50Q29udHJvbGxlcjsKKyAgICBATW9jaworICAgIHByaXZhdGUgQ29tbWVudFNlcnZpY2UgY29tbWVudFNlcnZpY2U7CisKKyAgICBATW9jaworICAgIHByaXZhdGUgVXNlcnMgbW9ja1VzZXI7CisKKyAgICBAQmVmb3JlRWFjaAorICAgIHZvaWQgc2V0dXAoKSB7CisgICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7CisgICAgfQorCisgICAgLy8g5rWL6K+V5re75Yqg6K+E6K66CisgICAgQFRlc3QKKyAgICB2b2lkIGFkZENvbW1lbnRUZXN0KCkgeworICAgICAgICBMb25nIHBvc3RJZCA9IDFMOworICAgICAgICBDb21tZW50cyBjb21tZW50ID0gbmV3IENvbW1lbnRzKCk7CisgICAgICAgIGNvbW1lbnQuc2V0VXNlcklkKDFMKTsKKyAgICAgICAgY29tbWVudC5zZXRDb250ZW50KCJUaGlzIGlzIGEgY29tbWVudCIpOworICAgICAgICBjb21tZW50LnNldFBhcmVudENvbW1lbnQoMEwpOworICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKKyAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihjb21tZW50U2VydmljZSkuYWRkQ29tbWVudChlcShwb3N0SWQpLCBlcShjb21tZW50KSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCisgICAgICAgIFN0cmluZyByZXN1bHQgPSBjb21tZW50Q29udHJvbGxlci5hZGRDb21tZW50KHBvc3RJZCwgY29tbWVudCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygiQ29tbWVudCBhZGRlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKKworICAgICAgICAvLyDpqozor4HmnI3liqHmlrnms5XmmK/lkKbooqvosIPnlKgKKyAgICAgICAgdmVyaWZ5KGNvbW1lbnRTZXJ2aWNlLCB0aW1lcygxKSkuYWRkQ29tbWVudChlcShwb3N0SWQpLCBlcShjb21tZW50KSk7CisgICAgfQorCisgICAgLy8g5rWL6K+V6I635Y+W6K+E6K66CisgICAgQFRlc3QKKyAgICB2b2lkIGdldENvbW1lbnRzQnlQb3N0SWRUZXN0KCkgeworICAgICAgICBMb25nIHBvc3RJZCA9IDFMOworCisgICAgICAgIC8vIOaooeaLn+ivhOiuuuaVsOaNrgorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbW1lbnREYXRhID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbW1lbnRJZCIsIDFMKTsKKyAgICAgICAgY29tbWVudERhdGEucHV0KCJjb250ZW50IiwgIlRoaXMgaXMgYSBjb21tZW50Iik7CisgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidXNlcklkIiwgMUwpOworICAgICAgICBjb21tZW50RGF0YS5wdXQoIm5pY2tuYW1lIiwgInVzZXIxIik7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6CisgICAgICAgIHdoZW4oY29tbWVudFNlcnZpY2UuZ2V0Q29tbWVudHNCeVBvc3RJZChwb3N0SWQpKS50aGVuUmV0dXJuKExpc3Qub2YoY29tbWVudERhdGEpKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKKyAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBjb21tZW50cyA9IGNvbW1lbnRDb250cm9sbGVyLmdldENvbW1lbnRzQnlQb3N0SWQocG9zdElkKTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTor4TorrrmlbDmja4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbW1lbnRzLnNpemUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiVGhpcyBpcyBhIGNvbW1lbnQiLCBjb21tZW50cy5nZXQoMCkuZ2V0KCJjb250ZW50IikpOworICAgICAgICBhc3NlcnRFcXVhbHMoInVzZXIxIiwgY29tbWVudHMuZ2V0KDApLmdldCgibmlja25hbWUiKSk7CisKKyAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5pa55rOV5piv5ZCm6KKr6LCD55SoCisgICAgICAgIHZlcmlmeShjb21tZW50U2VydmljZSwgdGltZXMoMSkpLmdldENvbW1lbnRzQnlQb3N0SWQocG9zdElkKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzkyMTYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLkR5bmFtaWNDb250cm9sbGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkR5bmFtaWNTZXJ2aWNlOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7CitpbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOworCitjbGFzcyBEeW5hbWljQ29udHJvbGxlclRlc3QgeworCisgICAgQEluamVjdE1vY2tzCisgICAgcHJpdmF0ZSBEeW5hbWljQ29udHJvbGxlciBkeW5hbWljQ29udHJvbGxlcjsKKworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBEeW5hbWljU2VydmljZSBkeW5hbWljU2VydmljZTsKKworICAgIEBCZWZvcmVFYWNoCisgICAgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5XliJvlu7rliqjmgIHmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdENyZWF0ZUR5bmFtaWMoKSB7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisgICAgICAgIFN0cmluZyBjb250ZW50ID0gIlRoaXMgaXMgYSB0ZXN0IGR5bmFtaWMiOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgiZHluYW1pY0lkIiwgMTIzTCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Yqo5oCB5Yib5bu65oiQ5YqfIik7CisKKyAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmNyZWF0ZUR5bmFtaWMg6L+U5ZueCisgICAgICAgIHdoZW4oZHluYW1pY1NlcnZpY2UuY3JlYXRlRHluYW1pYyh1c2VySWQsIG51bGwsIGNvbnRlbnQsIG51bGwpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2VNYXAgPSBkeW5hbWljQ29udHJvbGxlci5jcmVhdGVEeW5hbWljKHVzZXJJZCwgbnVsbCwgY29udGVudCwgbnVsbCk7CisgICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlRW50aXR5ID0gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2VNYXApOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZUVudGl0eS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5Yqo5oCB5Yib5bu65oiQ5YqfIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEyM0wsIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoImR5bmFtaWNJZCIpKTsKKyAgICB9CisKKworICAgIC8vIOa1i+ivleWIoOmZpOWKqOaAgeaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0RGVsZXRlRHluYW1pYygpIHsKKyAgICAgICAgTG9uZyBkeW5hbWljSWQgPSAxTDsKKyAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmRlbGV0ZUR5bmFtaWMg5pa55rOV6KGM5Li6CisgICAgICAgIGRvTm90aGluZygpLndoZW4oZHluYW1pY1NlcnZpY2UpLmRlbGV0ZUR5bmFtaWMoZHluYW1pY0lkKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8U3RyaW5nPiByZXNwb25zZSA9IGR5bmFtaWNDb250cm9sbGVyLmRlbGV0ZUR5bmFtaWMoZHluYW1pY0lkKTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIuWKqOaAgeWIoOmZpOaIkOWKnyIsIHJlc3BvbnNlLmdldEJvZHkoKSk7CisgICAgfQorCisgICAgLy8g5rWL6K+V5re75Yqg6K+E6K665o6l5Y+jCisgICAgQFRlc3QKKyAgICB2b2lkIHRlc3RBZGRDb21tZW50KCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBMb25nIGR5bmFtaWNJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGNvbW1lbnRDb250ZW50ID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBjb21tZW50Q29udGVudC5wdXQoImNvbnRlbnQiLCAiVGhpcyBpcyBhIHRlc3QgY29tbWVudCIpOworCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjb21tZW50X2lkIiwgMTAxTCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6K+E6K665oiQ5YqfIik7CisKKyAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmFkZENvbW1lbnQg6L+U5ZueCisgICAgICAgIHdoZW4oZHluYW1pY1NlcnZpY2UuYWRkQ29tbWVudCh1c2VySWQsIGR5bmFtaWNJZCwgIlRoaXMgaXMgYSB0ZXN0IGNvbW1lbnQiKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZSA9IGR5bmFtaWNDb250cm9sbGVyLmFkZENvbW1lbnQodXNlcklkLCBkeW5hbWljSWQsIGNvbW1lbnRDb250ZW50KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIuivhOiuuuaIkOWKnyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoIm1lc3NhZ2UiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxMDFMLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJjb21tZW50X2lkIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleiOt+WPlueUqOaIt+WKqOaAgeaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0R2V0QWxsVXNlckR5bmFtaWNzKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgiZHluYW1pYyIsICJtb2NrX2R5bmFtaWNfZGF0YSIpOworCisgICAgICAgIC8vIOaooeaLnyBkeW5hbWljU2VydmljZS5nZXRBbGxVc2VyRHluYW1pY3Mg6L+U5ZueCisgICAgICAgIHdoZW4oZHluYW1pY1NlcnZpY2UuZ2V0QWxsVXNlckR5bmFtaWNzKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBkeW5hbWljQ29udHJvbGxlci5nZXRBbGxVc2VyRHluYW1pY3ModXNlcklkKTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwocmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgiZHluYW1pYyIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xojrflj5bmiYDmnInlpb3lj4vliqjmgIHmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdEdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3MoKSB7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJkeW5hbWljIiwgIm1vY2tfZnJpZW5kX2R5bmFtaWNfZGF0YSIpOworCisgICAgICAgIC8vIOaooeaLnyBkeW5hbWljU2VydmljZS5nZXRBbGxVc2VyQW5kRnJpZW5kc0R5bmFtaWNzIOi/lOWbngorICAgICAgICB3aGVuKGR5bmFtaWNTZXJ2aWNlLmdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3MoYW55TGlzdCgpKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZSA9IGR5bmFtaWNDb250cm9sbGVyLmdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3ModXNlcklkKTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwocmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgiZHluYW1pYyIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5XngrnotZ7liqjmgIHmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdExpa2VEeW5hbWljKCkgeworICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXF1ZXN0LnB1dCgidXNlcklkIiwgMUwpOworICAgICAgICByZXF1ZXN0LnB1dCgiZHluYW1pY0lkIiwgMUwpOworCisgICAgICAgIC8vIOaooeaLnyBkeW5hbWljU2VydmljZS5saWtlRHluYW1pYyDov5Tlm54KKyAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS5saWtlRHluYW1pYygxTCwgMUwpKS50aGVuUmV0dXJuKHRydWUpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBSZXNwb25zZUVudGl0eTxTdHJpbmc+IHJlc3BvbnNlID0gZHluYW1pY0NvbnRyb2xsZXIubGlrZUR5bmFtaWMocmVxdWVzdCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJMaWtlIHN1Y2Nlc3NmdWwiLCByZXNwb25zZS5nZXRCb2R5KCkpOworICAgIH0KKworICAgIC8vIOa1i+ivleWPlua2iOeCuei1nuaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0VW5saWtlRHluYW1pYygpIHsKKyAgICAgICAgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJJZCIsIDFMKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoImR5bmFtaWNJZCIsIDFMKTsKKworICAgICAgICAvLyDmqKHmi58gZHluYW1pY1NlcnZpY2UudW5saWtlRHluYW1pYyDov5Tlm54KKyAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS51bmxpa2VEeW5hbWljKDFMLCAxTCkpLnRoZW5SZXR1cm4odHJ1ZSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIFJlc3BvbnNlRW50aXR5PFN0cmluZz4gcmVzcG9uc2UgPSBkeW5hbWljQ29udHJvbGxlci51bmxpa2VEeW5hbWljKHJlcXVlc3QpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiVW5saWtlIHN1Y2Nlc3NmdWwiLCByZXNwb25zZS5nZXRCb2R5KCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjOGMyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuR3JvdXBDb250cm9sbGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuR3JvdXA7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cENvbW1lbnRzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkdyb3VwU2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QudXRpbHMuUmVzdWx0OworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7CitpbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOworCisKK2NsYXNzIEdyb3VwQ29udHJvbGxlclRlc3QgeworCisgICAgQEluamVjdE1vY2tzCisgICAgcHJpdmF0ZSBHcm91cENvbnRyb2xsZXIgZ3JvdXBDb250cm9sbGVyOworCisgICAgQE1vY2sKKyAgICBwcml2YXRlIEdyb3VwU2VydmljZSBncm91cFNlcnZpY2U7CisKKyAgICBAQmVmb3JlRWFjaAorICAgIHZvaWQgc2V0dXAoKSB7CisgICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7CisgICAgfQorCisgICAgLy8g5rWL6K+V5Yib5bu65bCP57uECisKKyAgICBAVGVzdAorICAgIHZvaWQgY3JlYXRlR3JvdXBUZXN0KCkgeworICAgICAgICBHcm91cCBncm91cFJlcXVlc3QgPSBuZXcgR3JvdXAoKTsKKyAgICAgICAgZ3JvdXBSZXF1ZXN0LnNldEdyb3VwTmFtZSgiVGVzdCBHcm91cCIpOworICAgICAgICBncm91cFJlcXVlc3Quc2V0RGVzY3JpcHRpb24oIlRoaXMgaXMgYSB0ZXN0IGdyb3VwIik7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJncm91cF9pZCIsIDFMKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlhbTotqPlsI/nu4TliJvlu7rmiJDlip8iKTsKKworICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBtb2NrUmVzcG9uc2VFbnRpdHkgPSBSZXNwb25zZUVudGl0eS5vayhtb2NrUmVzcG9uc2UpOworICAgICAgICB3aGVuKGdyb3VwU2VydmljZS5jcmVhdGVHcm91cChncm91cFJlcXVlc3QpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZUVudGl0eSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCisgICAgICAgIFJlc3BvbnNlRW50aXR5PD8+IHJlc3BvbnNlRW50aXR5ID0gZ3JvdXBDb250cm9sbGVyLmNyZWF0ZUdyb3VwKGdyb3VwUmVxdWVzdCk7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKTsKKyAgICAgICAgUmVzdWx0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3VsdCA9IFJlc3VsdC5zdWNjZXNzKHJlc3VsdE1hcCwgIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIsIHJlc3VsdC5nZXRNc2coKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxTCwgcmVzdWx0LmdldERhdGEoKS5nZXQoImdyb3VwX2lkIikpOworICAgIH0KKworCisgICAgLy8g5rWL6K+V5Yqg5YWl5bCP57uE5o6l5Y+jCisgICAgQFRlc3QKKyAgICB2b2lkIHRlc3RKb2luR3JvdXAoKSB7CisgICAgICAgIExvbmcgZ3JvdXBJZCA9IDFMOworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworCisgICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmiJDlip/liqDlhaXlsI/nu4QiKTsKKyAgICAgICAgd2hlbihncm91cFNlcnZpY2Uuam9pbkdyb3VwKGdyb3VwSWQsIHVzZXJJZCkpLnRoZW5SZXR1cm4oUmVzcG9uc2VFbnRpdHkub2sobW9ja1Jlc3BvbnNlKSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5ID0gTWFwLm9mKCJ1c2VyX2lkIiwgdXNlcklkKTsKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBncm91cENvbnRyb2xsZXIuam9pbkdyb3VwKGdyb3VwSWQsIHJlcXVlc3RCb2R5KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5oiQ5Yqf5Yqg5YWl5bCP57uEIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5XpgIDlh7rlsI/nu4TmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdExlYXZlR3JvdXAoKSB7CisgICAgICAgIExvbmcgZ3JvdXBJZCA9IDFMOworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworCisgICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmiJDlip/pgIDlh7rlsI/nu4QiKTsKKyAgICAgICAgd2hlbihncm91cFNlcnZpY2UubGVhdmVHcm91cChncm91cElkLCB1c2VySWQpKS50aGVuUmV0dXJuKFJlc3BvbnNlRW50aXR5Lm9rKG1vY2tSZXNwb25zZSkpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IE1hcC5vZigidXNlcl9pZCIsIHVzZXJJZCk7CisgICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gZ3JvdXBDb250cm9sbGVyLmxlYXZlR3JvdXAoZ3JvdXBJZCwgcmVxdWVzdEJvZHkpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLmiJDlip/pgIDlh7rlsI/nu4QiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleiOt+WPluWwj+e7hOaIkOWRmOaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0R2V0R3JvdXBNZW1iZXJzKCkgeworICAgICAgICBMb25nIGdyb3VwSWQgPSAxTDsKKworICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lbWJlcnMiLCAibW9ja19tZW1iZXJzIik7CisgICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLmdldEdyb3VwTWVtYmVycyhncm91cElkKSkudGhlblJldHVybihSZXNwb25zZUVudGl0eS5vayhtb2NrUmVzcG9uc2UpKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBncm91cENvbnRyb2xsZXIuZ2V0R3JvdXBNZW1iZXJzKGdyb3VwSWQpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZW1iZXJzIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleWPkeW4g+W4luWtkAorICAgIEBUZXN0CisgICAgdm9pZCBjcmVhdGVQb3N0VGVzdCgpIHsKKyAgICAgICAgTG9uZyBncm91cElkID0gMUw7CisgICAgICAgIExvbmcgdXNlcklkID0gMkw7CisgICAgICAgIFN0cmluZyBwb3N0Q29udGVudCA9ICJUZXN0IHBvc3QgY29udGVudCI7CisgICAgICAgIFN0cmluZyB0aXRsZSA9ICJUZXN0IHBvc3QgdGl0bGUiOworCisgICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgicG9zdF9pZCIsIDFMKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLluJblrZDliJvlu7rmiJDlip8iKTsKKworICAgICAgICB3aGVuKGdyb3VwU2VydmljZS5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBudWxsKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdCA9IGdyb3VwQ29udHJvbGxlci5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBudWxsKS5nZXRCb2R5KCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygi5biW5a2Q5Yib5bu65oiQ5YqfIiwgcmVzdWx0LmdldCgibWVzc2FnZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCByZXN1bHQuZ2V0KCJwb3N0X2lkIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleeCuei1nuW4luWtkAorICAgIEBUZXN0CisgICAgdm9pZCBsaWtlUG9zdFRlc3QoKSB7CisgICAgICAgIExvbmcgcG9zdElkID0gMUw7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueCuei1nuaIkOWKnyIpOworCisgICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLmxpa2VQb3N0KHBvc3RJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSBncm91cENvbnRyb2xsZXIubGlrZVBvc3QocG9zdElkKS5nZXRCb2R5KCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygi54K56LWe5oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibWVzc2FnZSIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xlj5bmtojngrnotZ4KKyAgICBAVGVzdAorICAgIHZvaWQgdW5saWtlUG9zdFRlc3QoKSB7CisgICAgICAgIExvbmcgcG9zdElkID0gMUw7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWPlua2iOeCuei1nuaIkOWKnyIpOworCisgICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLnVubGlrZVBvc3QocG9zdElkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IGdyb3VwQ29udHJvbGxlci51bmxpa2VQb3N0KHBvc3RJZCkuZ2V0Qm9keSgpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoIuWPlua2iOeCuei1nuaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1lc3NhZ2UiKSk7CisgICAgfQorCisgICAgLy8g5rWL6K+V5re75Yqg6K+E6K66CisgICAgQFRlc3QKKyAgICB2b2lkIGFkZENvbW1lbnRUZXN0KCkgeworICAgICAgICBMb25nIHBvc3RJZCA9IDFMOworICAgICAgICBHcm91cENvbW1lbnRzIGNvbW1lbnQgPSBuZXcgR3JvdXBDb21tZW50cygpOworICAgICAgICBjb21tZW50LnNldFVzZXJJZCgyTCk7CisgICAgICAgIGNvbW1lbnQuc2V0Q29udGVudCgiVGhpcyBpcyBhIGNvbW1lbnQiKTsKKworICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6K+E6K665oiQ5YqfIik7CisKKyAgICAgICAgd2hlbihncm91cFNlcnZpY2UuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gZ3JvdXBDb250cm9sbGVyLmFkZENvbW1lbnQocG9zdElkLCBjb21tZW50KS5nZXRCb2R5KCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygi6K+E6K665oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibWVzc2FnZSIpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0xldmVsQ29udHJvbGxlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZDc3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0xldmVsQ29udHJvbGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLkxldmVsQ29udHJvbGxlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5MZXZlbFNlcnZpY2U7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CitpbXBvcnQgb3JnLm1vY2tpdG8uSW5qZWN0TW9ja3M7CitpbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKK2ltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CisKK2NsYXNzIExldmVsQ29udHJvbGxlclRlc3QgeworCisgICAgQEluamVjdE1vY2tzCisgICAgcHJpdmF0ZSBMZXZlbENvbnRyb2xsZXIgbGV2ZWxDb250cm9sbGVyOworCisgICAgQE1vY2sKKyAgICBwcml2YXRlIExldmVsU2VydmljZSBsZXZlbFNlcnZpY2U7CisKKyAgICBAQmVmb3JlRWFjaAorICAgIHZvaWQgc2V0dXAoKSB7CisgICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7CisgICAgfQorCisgICAgLy8g5rWL6K+V6I635Y+W55So5oi357uP6aqM5o6l5Y+jCisgICAgQFRlc3QKKyAgICB2b2lkIHRlc3RHZXRFeHBlcmllbmNlKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgiY3VycmVudF9leHBlcmllbmNlIiwgMTUwMCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImxldmVsIiwgIkludGVybWVkaWF0ZSIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJuZXh0X2xldmVsX2V4cGVyaWVuY2UiLCAyMDAwKTsKKworICAgICAgICAvLyDmqKHmi58gbGV2ZWxTZXJ2aWNlLmdldFVzZXJFeHBlcmllbmNlIOi/lOWbngorICAgICAgICB3aGVuKGxldmVsU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBsZXZlbENvbnRyb2xsZXIuZ2V0RXhwZXJpZW5jZSh1c2VySWQpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoMTUwMCwgcmVzcG9uc2UuZ2V0KCJjdXJyZW50X2V4cGVyaWVuY2UiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiSW50ZXJtZWRpYXRlIiwgcmVzcG9uc2UuZ2V0KCJsZXZlbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDAsIHJlc3BvbnNlLmdldCgibmV4dF9sZXZlbF9leHBlcmllbmNlIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleabtOaWsOeUqOaIt+e7j+mqjOaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0VXBkYXRlRXhwZXJpZW5jZSgpIHsKKyAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKKyAgICAgICAgSW50ZWdlciBleHBlcmllbmNlID0gNTAwOworICAgICAgICBTdHJpbmcgc291cmNlID0gIlF1ZXN0IjsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi57uP6aqM5pu05paw5oiQ5YqfIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIDIwMDApOworCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1zID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBwYXJhbXMucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKKyAgICAgICAgcGFyYW1zLnB1dCgiZXhwZXJpZW5jZSIsIGV4cGVyaWVuY2UpOworICAgICAgICBwYXJhbXMucHV0KCJzb3VyY2UiLCBzb3VyY2UpOworCisgICAgICAgIC8vIOaooeaLnyBsZXZlbFNlcnZpY2UudXBkYXRlRXhwZXJpZW5jZSDov5Tlm54KKyAgICAgICAgd2hlbihsZXZlbFNlcnZpY2UudXBkYXRlRXhwZXJpZW5jZSh1c2VySWQsIGV4cGVyaWVuY2UsIHNvdXJjZSkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGxldmVsQ29udHJvbGxlci51cGRhdGVFeHBlcmllbmNlKHBhcmFtcyk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldCgic3RhdHVzIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoIue7j+mqjOabtOaWsOaIkOWKnyIsIHJlc3BvbnNlLmdldCgibWVzc2FnZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDAsIHJlc3BvbnNlLmdldCgiY3VycmVudF9leHBlcmllbmNlIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleajgOafpeeUqOaIt+WNh+e6p+adoeS7tuaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0Q2hlY2tVcGdyYWRlKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgiY2FuX3VwZ3JhZGUiLCB0cnVlKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibmV4dF9sZXZlbF9leHBlcmllbmNlIiwgMjAwMCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIDE1MDApOworCisgICAgICAgIC8vIOaooeaLnyBsZXZlbFNlcnZpY2UuY2hlY2tVcGdyYWRlIOi/lOWbngorICAgICAgICB3aGVuKGxldmVsU2VydmljZS5jaGVja1VwZ3JhZGUodXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbGV2ZWxDb250cm9sbGVyLmNoZWNrVXBncmFkZSh1c2VySWQpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRUcnVlKChCb29sZWFuKSByZXNwb25zZS5nZXQoImNhbl91cGdyYWRlIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoMjAwMCwgcmVzcG9uc2UuZ2V0KCJuZXh0X2xldmVsX2V4cGVyaWVuY2UiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxNTAwLCByZXNwb25zZS5nZXQoImN1cnJlbnRfZXhwZXJpZW5jZSIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5XljYfnuqfnlKjmiLfnrYnnuqfmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdFVwZ3JhZGVVc2VyTGV2ZWwoKSB7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisgICAgICAgIEJvb2xlYW4gY2FuVXBncmFkZSA9IHRydWU7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWNh+e6p+aIkOWKnyIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJuZXdfbGV2ZWwiLCAiQWR2YW5jZWQiKTsKKworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoImNhbl91cGdyYWRlIiwgY2FuVXBncmFkZSk7CisKKyAgICAgICAgLy8g5qih5oufIGxldmVsU2VydmljZS51cGdyYWRlVXNlckxldmVsIOi/lOWbngorICAgICAgICB3aGVuKGxldmVsU2VydmljZS51cGdyYWRlVXNlckxldmVsKHVzZXJJZCwgY2FuVXBncmFkZSkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGxldmVsQ29udHJvbGxlci51cGdyYWRlVXNlckxldmVsKHJlcXVlc3QpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXQoInN0YXR1cyIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLljYfnuqfmiJDlip8iLCByZXNwb25zZS5nZXQoIm1lc3NhZ2UiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiQWR2YW5jZWQiLCByZXNwb25zZS5nZXQoIm5ld19sZXZlbCIpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Bvc3RDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWVlZGRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUG9zdDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Qb3N0U2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QudXRpbHMuUmVzdWx0OworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworaW1wb3J0IG9yZy5tb2NraXRvLio7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOworCitjbGFzcyBQb3N0Q29udHJvbGxlclRlc3QgeworCisgICAgQEluamVjdE1vY2tzCisgICAgcHJpdmF0ZSBQb3N0Q29udHJvbGxlciBwb3N0Q29udHJvbGxlcjsKKworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBQb3N0U2VydmljZSBwb3N0U2VydmljZTsKKworICAgIEBCZWZvcmVFYWNoCisgICAgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5XliJvlu7rluJblrZAKKyAgICB2b2lkIGNyZWF0ZVBvc3RUZXN0KCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBTdHJpbmcgcG9zdENvbnRlbnQgPSAiVGVzdCBQb3N0IENvbnRlbnQiOworICAgICAgICBTdHJpbmcgdGl0bGUgPSAiVGVzdCBQb3N0IFRpdGxlIjsKKyAgICAgICAgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMgPSBuZXcgTXVsdGlwYXJ0RmlsZVswXTsgIC8vIEVtcHR5IGFycmF5IGZvciBzaW1wbGljaXR5CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2VNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlc3BvbnNlTWFwLnB1dCgicG9zdE5vIiwgMTIzTCk7CisgICAgICAgIHJlc3BvbnNlTWFwLnB1dCgibWVzc2FnZSIsICLluJblrZDliJvlu7rmiJDlip8iKTsKKworICAgICAgICB3aGVuKHBvc3RTZXJ2aWNlLmNyZWF0ZVBvc3QodXNlcklkLCBwb3N0Q29udGVudCwgdGl0bGUsIGltYWdlRmlsZXMpKS50aGVuUmV0dXJuKHJlc3BvbnNlTWFwKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSBwb3N0Q29udHJvbGxlci5jcmVhdGVQb3N0KHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBpbWFnZUZpbGVzKTsKKworICAgICAgICAvLyDmiYvliqjlsIYgTWFwPFN0cmluZywgT2JqZWN0PiDljIXoo4XliLAgUmVzdWx0LnN1Y2Nlc3MoKQorICAgICAgICBSZXN1bHQ8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzdWx0ID0gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0TWFwLCAi5biW5a2Q5Yib5bu65oiQ5YqfIik7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygiMjAwIiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5biW5a2Q5Yib5bu65oiQ5YqfIiwgcmVzdWx0LmdldE1zZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEyM0wsIHJlc3VsdC5nZXREYXRhKCkuZ2V0KCJwb3N0Tm8iKSk7CisgICAgfQorCisgICAgLy8g5rWL6K+V57yW6L6R5biW5a2QCisgICAgQFRlc3QKKyAgICB2b2lkIHVwZGF0ZVBvc3RUZXN0KCkgeworICAgICAgICBMb25nIHBvc3RJZCA9IDFMOworICAgICAgICBQb3N0IHBvc3QgPSBuZXcgUG9zdCgpOworICAgICAgICBwb3N0LnNldFBvc3RObyhwb3N0SWQpOworICAgICAgICBwb3N0LnNldFRpdGxlKCJVcGRhdGVkIFRpdGxlIik7CisgICAgICAgIHBvc3Quc2V0UG9zdENvbnRlbnQoIlVwZGF0ZWQgQ29udGVudCIpOworCisgICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugorICAgICAgICBkb05vdGhpbmcoKS53aGVuKHBvc3RTZXJ2aWNlKS51cGRhdGVQb3N0KHBvc3RJZCwgcG9zdCk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCisgICAgICAgIFN0cmluZyByZXN1bHQgPSBwb3N0Q29udHJvbGxlci51cGRhdGVQb3N0KHBvc3RJZCwgcG9zdCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygiUG9zdCB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOworICAgIH0KKworICAgIC8vIOa1i+ivleWIoOmZpOW4luWtkAorICAgIEBUZXN0CisgICAgdm9pZCBkZWxldGVQb3N0VGVzdCgpIHsKKyAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKKworICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKKyAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihwb3N0U2VydmljZSkuZGVsZXRlUG9zdChwb3N0SWQpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIuZGVsZXRlUG9zdChwb3N0SWQpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoIlBvc3QgZGVsZXRlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyDmtYvor5XngrnotZ7luJblrZAKKyAgICBAVGVzdAorICAgIHZvaWQgbGlrZVBvc3RUZXN0KCkgeworICAgICAgICBMb25nIHBvc3RJZCA9IDFMOworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworCisgICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugorICAgICAgICBkb05vdGhpbmcoKS53aGVuKHBvc3RTZXJ2aWNlKS5saWtlUG9zdChwb3N0SWQsIHVzZXJJZCk7CisKKyAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCisgICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5ID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXF1ZXN0Qm9keS5wdXQoInVzZXJfaWQiLCB1c2VySWQpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIubGlrZVBvc3QocG9zdElkLCByZXF1ZXN0Qm9keSk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygiUG9zdCBsaWtlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xlj5bmtojngrnotZ7luJblrZAKKyAgICBAVGVzdAorICAgIHZvaWQgdW5saWtlUG9zdFRlc3QoKSB7CisgICAgICAgIExvbmcgcG9zdElkID0gMUw7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6CisgICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLnVubGlrZVBvc3QocG9zdElkLCB1c2VySWQpOworCisgICAgICAgIC8vIOWIm+W7uuivt+axguS9kworICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdEJvZHkucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLnVubGlrZVBvc3QocG9zdElkLCByZXF1ZXN0Qm9keSk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygiUG9zdCB1bmxpa2VkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOworICAgIH0KKworICAgIC8vIOa1i+ivleaUtuiXj+W4luWtkAorICAgIEBUZXN0CisgICAgdm9pZCBjb2xsZWN0UG9zdFRlc3QoKSB7CisgICAgICAgIExvbmcgcG9zdElkID0gMUw7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6CisgICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLmNvbGxlY3RQb3N0KHBvc3RJZCwgdXNlcklkKTsKKworICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKKyAgICAgICAgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdEJvZHkgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlcXVlc3RCb2R5LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCisgICAgICAgIFN0cmluZyByZXN1bHQgPSBwb3N0Q29udHJvbGxlci5jb2xsZWN0UG9zdChwb3N0SWQsIHJlcXVlc3RCb2R5KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJQb3N0IGNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xlj5bmtojmlLbol4/luJblrZAKKyAgICBAVGVzdAorICAgIHZvaWQgdW5jb2xsZWN0UG9zdFRlc3QoKSB7CisgICAgICAgIExvbmcgcG9zdElkID0gMUw7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6CisgICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLnVuY29sbGVjdFBvc3QocG9zdElkLCB1c2VySWQpOworCisgICAgICAgIC8vIOWIm+W7uuivt+axguS9kworICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdEJvZHkucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLnVuY29sbGVjdFBvc3QocG9zdElkLCByZXF1ZXN0Qm9keSk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygiUG9zdCB1bmNvbGxlY3RlZCBzdWNjZXNzZnVsbHkhIiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xojrflj5bmiYDmnInluJblrZAKKyAgICBAVGVzdAorICAgIHZvaWQgZ2V0QWxsUG9zdHNUZXN0KCkgeworICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJ0b3RhbCIsIDUpOworICAgICAgICByZXNwb25zZU1hcC5wdXQoInBvc3RzIiwgbmV3IEFycmF5TGlzdDw+KCkpOworCisgICAgICAgIHdoZW4ocG9zdFNlcnZpY2UuZ2V0QWxsUG9zdHMoKSkudGhlblJldHVybihyZXNwb25zZU1hcCk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIuZ2V0QWxsUG9zdHMoKTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHJlc3VsdC5nZXQoInRvdGFsIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleagueaNruW4luWtkElE6I635Y+W5biW5a2QCisgICAgQFRlc3QKKyAgICB2b2lkIGdldFBvc3RCeUlkVGVzdCgpIHsKKyAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJwb3N0Tm8iLCAxMjNMKTsKKyAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJtZXNzYWdlIiwgIlBvc3QgZGV0YWlscyIpOworCisgICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugorICAgICAgICB3aGVuKHBvc3RTZXJ2aWNlLmdldFBvc3RCeUlkKHBvc3RJZCkpLnRoZW5SZXR1cm4ocmVzcG9uc2VNYXApOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLmdldFBvc3RCeUlkKHBvc3RJZCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygiUG9zdCBkZXRhaWxzIiwgcmVzdWx0LmdldCgibWVzc2FnZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEyM0wsIHJlc3VsdC5nZXQoInBvc3RObyIpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDc2MDlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDIwNSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLlRhc2tDb250cm9sbGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlRhc2tTZXJ2aWNlOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7CitpbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOworCitjbGFzcyBUYXNrQ29udHJvbGxlclRlc3QgeworCisgICAgQEluamVjdE1vY2tzCisgICAgcHJpdmF0ZSBUYXNrQ29udHJvbGxlciB0YXNrQ29udHJvbGxlcjsKKworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBUYXNrU2VydmljZSB0YXNrU2VydmljZTsKKworICAgIEBCZWZvcmVFYWNoCisgICAgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xojrflj5blvZPliY3nlKjmiLfnmoTmlrDmiYvku7vliqHliJfooajmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdEdldEFsbFRhc2tzKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgidGFza3MiLCAibW9ja190YXNrcyIpOworCisgICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS5nZXRBbGxUYXNrc0ZvclVzZXIg6L+U5ZueCisgICAgICAgIHdoZW4odGFza1NlcnZpY2UuZ2V0QWxsVGFza3NGb3JVc2VyKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB0YXNrQ29udHJvbGxlci5nZXRBbGxUYXNrcyhyZXF1ZXN0KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrX3Rhc2tzIiwgcmVzcG9uc2UuZ2V0KCJ0YXNrcyIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xmm7TmlrDku7vliqHnirbmgIHmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdFVwZGF0ZVRhc2tTdGF0dXMoKSB7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisgICAgICAgIFN0cmluZyB0YXNrSWQgPSAidGFza18xMjMiOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHnirbmgIHlt7Lmm7TmlrAiKTsKKworICAgICAgICAvLyDmqKHmi58gdGFza1NlcnZpY2UudXBkYXRlVGFza1N0YXR1cyDov5Tlm54KKyAgICAgICAgd2hlbih0YXNrU2VydmljZS51cGRhdGVUYXNrU3RhdHVzKHVzZXJJZCwgdGFza0lkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOWIm+W7uuivt+axguS9kworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInRhc2tfaWQiLCB0YXNrSWQpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIudXBkYXRlVGFza1N0YXR1cyhyZXF1ZXN0KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5Lu75Yqh54q25oCB5bey5pu05pawIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleiOt+WPluW9k+WJjee7j+mqjOWSjOS7u+WKoeWlluWKseaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0R2V0RXhwZXJpZW5jZSgpIHsKKyAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIDE1MDApOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJsZXZlbCIsICJJbnRlcm1lZGlhdGUiKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgicmV3YXJkIiwgTWFwLm9mKCJleHBlcmllbmNlIiwgMTAwMCwgInBvaW50cyIsIDIwMCkpOworCisgICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSDov5Tlm54KKyAgICAgICAgd2hlbih0YXNrU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCB1c2VySWQpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIuZ2V0RXhwZXJpZW5jZShyZXF1ZXN0KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDE1MDAsIHJlc3BvbnNlLmdldCgiY3VycmVudF9leHBlcmllbmNlIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkludGVybWVkaWF0ZSIsIHJlc3BvbnNlLmdldCgibGV2ZWwiKSk7CisgICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuY29udGFpbnNLZXkoInJld2FyZCIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xojrflj5blvZPliY3nmoTmjIflvJXmraXpqqTmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdEdldE5ld1N0ZXAoKSB7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjdXJyZW50X3N0ZXAiLCAic3RlcF8xIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInRvdGFsX3N0ZXBzIiwgNSk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0ZXBfZGVzY3JpcHRpb24iLCAiQ29tcGxldGUgdGhlIGludHJvZHVjdGlvbiB0YXNrIik7CisKKyAgICAgICAgLy8g5qih5oufIHRhc2tTZXJ2aWNlLmdldE5ld1N0ZXAg6L+U5ZueCisgICAgICAgIHdoZW4odGFza1NlcnZpY2UuZ2V0TmV3U3RlcCh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCB1c2VySWQpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIuZ2V0TmV3U3RlcChyZXF1ZXN0KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwXzEiLCByZXNwb25zZS5nZXQoImN1cnJlbnRfc3RlcCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHJlc3BvbnNlLmdldCgidG90YWxfc3RlcHMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiQ29tcGxldGUgdGhlIGludHJvZHVjdGlvbiB0YXNrIiwgcmVzcG9uc2UuZ2V0KCJzdGVwX2Rlc2NyaXB0aW9uIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleabtOaWsOi/m+W6puaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0VXBkYXRlUHJvZ3Jlc3MoKSB7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisgICAgICAgIFN0cmluZyB0YXNrSWQgPSAidGFza18xMjMiOworICAgICAgICBJbnRlZ2VyIHByb2dyZXNzID0gNTA7CisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIui/m+W6puW3suabtOaWsCIpOworCisgICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS51cGRhdGVUYXNrUHJvZ3Jlc3Mg6L+U5ZueCisgICAgICAgIHdoZW4odGFza1NlcnZpY2UudXBkYXRlVGFza1Byb2dyZXNzKHVzZXJJZCwgdGFza0lkLCBwcm9ncmVzcykpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7CisgICAgICAgIHJlcXVlc3QucHV0KCJ0YXNrX2lkIiwgdGFza0lkKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInByb2dyZXNzIiwgcHJvZ3Jlc3MpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIudXBkYXRlUHJvZ3Jlc3MocmVxdWVzdCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldCgic3RhdHVzIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoIui/m+W6puW3suabtOaWsCIsIHJlc3BvbnNlLmdldCgibWVzc2FnZSIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xpooblj5bku7vliqHlpZblirHmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdFJld2FyZENsYWltKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBTdHJpbmcgdGFza0lkID0gInRhc2tfMTIzIjsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5aWW5Yqx5bey6aKG5Y+WIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInJld2FyZCIsIE1hcC5vZigiZXhwZXJpZW5jZSIsIDEwMDAsICJwb2ludHMiLCAyMDApKTsKKworICAgICAgICAvLyDmqKHmi58gdGFza1NlcnZpY2UuY2xhaW1SZXdhcmQg6L+U5ZueCisgICAgICAgIHdoZW4odGFza1NlcnZpY2UuY2xhaW1SZXdhcmQodXNlcklkLCB0YXNrSWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCB1c2VySWQpOworICAgICAgICByZXF1ZXN0LnB1dCgidGFza19pZCIsIHRhc2tJZCk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB0YXNrQ29udHJvbGxlci5yZXdhcmRDbGFpbShyZXF1ZXN0KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5aWW5Yqx5bey6aKG5Y+WIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOworICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmNvbnRhaW5zS2V5KCJyZXdhcmQiKSk7CisgICAgfQorCisgICAgLy8g5rWL6K+V5qOA5p+l5Lu75Yqh5aWW5Yqx54q25oCB5o6l5Y+jCisgICAgQFRlc3QKKyAgICB2b2lkIHRlc3RSZXdhcmRSZXZpZXcoKSB7CisgICAgICAgIExvbmcgdXNlcklkID0gMUw7CisgICAgICAgIFN0cmluZyB0YXNrSWQgPSAidGFza18xMjMiOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInJld2FyZF9ub3RfaXNzdWVkIik7CisgICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh5aWW5Yqx5pyq6KKr6aKG5Y+WIik7CisKKyAgICAgICAgLy8g5qih5oufIHRhc2tTZXJ2aWNlLmNoZWNrUmV3YXJkU3RhdHVzIOi/lOWbngorICAgICAgICB3aGVuKHRhc2tTZXJ2aWNlLmNoZWNrUmV3YXJkU3RhdHVzKHVzZXJJZCwgdGFza0lkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOWIm+W7uuivt+axguS9kworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInRhc2tfaWQiLCB0YXNrSWQpOworCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIucmV3YXJkUmV2aWV3KHJlcXVlc3QpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoInJld2FyZF9ub3RfaXNzdWVkIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5Lu75Yqh5aWW5Yqx5pyq6KKr6aKG5Y+WIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhCmluZGV4IGQzMzJmMzEuLmE5N2UxNjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuamF2YQpAQCAtMSwxNjIgKzEsMjM0IEBACiBwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwogCi1pbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUuY29uZGl0aW9ucy5xdWVyeS5RdWVyeVdyYXBwZXI7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkVtYWlsU2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJTZXJ2aWNlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlZlcmlmaWNhdGlvblRva2VuTWFwcGVyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5SZXN1bHQ7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CiBpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5BdXRoZW50aWNhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkF1dGhlbnRpY2F0aW9uOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5BdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcubW9ja2l0by5JbmplY3RNb2NrczsKK2ltcG9ydCBvcmcubW9ja2l0by5Nb2NrOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG9Bbm5vdGF0aW9uczsKIAotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOworCiBpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKIAogY2xhc3MgVXNlckNvbnRyb2xsZXJUZXN0IHsKIAorICAgIEBNb2NrCisgICAgcHJpdmF0ZSBVc2VyU2VydmljZSB1c2VyU2VydmljZTsKKworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKKwogICAgIEBJbmplY3RNb2NrcwogICAgIHByaXZhdGUgVXNlckNvbnRyb2xsZXIgdXNlckNvbnRyb2xsZXI7CiAKLSAgICBATW9jawotICAgIHByaXZhdGUgVXNlclNlcnZpY2UgdXNlclNlcnZpY2U7Ci0gICAgQE1vY2sKLSAgICBwcml2YXRlIFVzZXJNYXBwZXIgdXNlck1hcHBlcjsKLSAgICBATW9jawotICAgIHByaXZhdGUgRW1haWxTZXJ2aWNlIGVtYWlsU2VydmljZTsKLSAgICBATW9jawotICAgIHByaXZhdGUgQXV0aGVudGljYXRpb25NYW5hZ2VyIGF1dGhlbnRpY2F0aW9uTWFuYWdlcjsKLSAgICBATW9jawotICAgIHByaXZhdGUgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7Ci0KICAgICBAQmVmb3JlRWFjaAotICAgIHZvaWQgc2V0dXAoKSB7CisgICAgdm9pZCBzZXRVcCgpIHsKKyAgICAgICAgLy8g5Yid5aeL5YyW5qih5ouf5a+56LGhCiAgICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7CiAgICAgfQogCisgICAgLy8g5rWL6K+V55Sf5oiQ6YKA6K+356CB5o6l5Y+jCiAgICAgQFRlc3QKLSAgICB2b2lkIGxvZ2luQ29udHJvbGxlcl9zdWNjZXNzKCkgewotICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAidGVzdHVzZXIiOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAidGVzdHBhc3MiOwotICAgICAgICBVc2VyIG1vY2tVc2VyID0gbmV3IFVzZXIoKTsKLSAgICAgICAgbW9ja1VzZXIuc2V0VXNlcm5hbWUodXNlcm5hbWUpOworICAgIHZvaWQgdGVzdEdlbmVyYXRlSW52aXRlQ29kZSgpIHsKKyAgICAgICAgLy8g6K6+572u6L6T5YWl5pWw5o2uCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCAxTCk7CiAKLSAgICAgICAgQXV0aGVudGljYXRpb24gbW9ja0F1dGggPSBtb2NrKEF1dGhlbnRpY2F0aW9uLmNsYXNzKTsKLSAgICAgICAgd2hlbihhdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKGFueSgpKSkudGhlblJldHVybihtb2NrQXV0aCk7Ci0gICAgICAgIHdoZW4odXNlck1hcHBlci5zZWxlY3RPbmUoYW55KFF1ZXJ5V3JhcHBlci5jbGFzcykpKS50aGVuUmV0dXJuKG1vY2tVc2VyKTsKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5ZueCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2VNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlc3BvbnNlTWFwLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJtZXNzYWdlIiwgIumCgOivt+eggeeUn+aIkOaIkOWKnyIpOworICAgICAgICByZXNwb25zZU1hcC5wdXQoImludml0ZV9jb2RlIiwgIkFCQzEyM1hZWiIpOwogCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5sb2dpbkNvbnRyb2xsZXIodXNlcm5hbWUsIHBhc3N3b3JkKTsKKyAgICAgICAgd2hlbih1c2VyU2VydmljZS5nZW5lcmF0ZUludml0ZUNvZGUoMUwpKS50aGVuUmV0dXJuKHJlc3BvbnNlTWFwKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobW9ja1VzZXIsIHJlc3VsdC5nZXREYXRhKCkpOworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSB1c2VyQ29udHJvbGxlci5nZW5lcmF0ZUludml0ZUNvZGUocmVxdWVzdCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3VsdE1hcC5nZXQoInN0YXR1cyIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLpgoDor7fnoIHnlJ/miJDmiJDlip8iLCByZXN1bHRNYXAuZ2V0KCJtZXNzYWdlIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkFCQzEyM1hZWiIsIHJlc3VsdE1hcC5nZXQoImludml0ZV9jb2RlIikpOworCisgICAgICAgIC8vIOmqjOivgeacjeWKoeWxguaWueazleaYr+WQpuiiq+iwg+eUqAorICAgICAgICB2ZXJpZnkodXNlclNlcnZpY2UsIHRpbWVzKDEpKS5nZW5lcmF0ZUludml0ZUNvZGUoMUwpOwogICAgIH0KIAotCisgICAgLy8g5rWL6K+V55So5oi35L+u5pS55a+G56CB5o6l5Y+jCiAgICAgQFRlc3QKLSAgICB2b2lkIGxvZ2luQ29udHJvbGxlcl9mYWlsdXJlKCkgewotICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAidXNlciI7Ci0gICAgICAgIFN0cmluZyBwYXNzd29yZCA9ICJ3cm9uZ3Bhc3MiOworICAgIHZvaWQgdGVzdENoYW5nZVBhc3N3b3JkKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoIm9sZF9wYXNzd29yZCIsICJvbGRQYXNzd29yZCIpOworICAgICAgICByZXF1ZXN0LnB1dCgibmV3X3Bhc3N3b3JkIiwgIm5ld1Bhc3N3b3JkIik7CisgICAgICAgIHJlcXVlc3QucHV0KCJjb25maXJtX3Bhc3N3b3JkIiwgIm5ld1Bhc3N3b3JkIik7CiAKLSAgICAgICAgLy8g5qih5ouf6K6k6K+B5aSx6LSl77yM5oqb5Ye6IEJhZCBjcmVkZW50aWFscyDlvILluLgKLSAgICAgICAgd2hlbihhdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKGFueSgpKSkKLSAgICAgICAgICAgICAgICAudGhlblRocm93KG5ldyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbigiQmFkIGNyZWRlbnRpYWxzIikge30pOworICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm54KKyAgICAgICAgU3RyaW5nIHJlc3VsdE1lc3NhZ2UgPSAi5a+G56CB5L+u5pS55oiQ5YqfIjsKKyAgICAgICAgd2hlbih1c2VyU2VydmljZS5jaGFuZ2VQYXNzd29yZCh1c2VySWQsICJvbGRQYXNzd29yZCIsICJuZXdQYXNzd29yZCIsICJuZXdQYXNzd29yZCIpKQorICAgICAgICAgICAgICAgIC50aGVuUmV0dXJuKHJlc3VsdE1lc3NhZ2UpOwogCisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IHVzZXJDb250cm9sbGVyLmNoYW5nZVBhc3N3b3JkKHJlcXVlc3QpOwogCi0gICAgICAgIC8vIOiwg+eUqOeZu+W9leaOpeWPowotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gdXNlckNvbnRyb2xsZXIubG9naW5Db250cm9sbGVyKHVzZXJuYW1lLCBwYXNzd29yZCk7CisgICAgICAgIC8vIOmqjOivgei/lOWbnue7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoIuWvhueggeS/ruaUueaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1lc3NhZ2UiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3VsdE1hcC5nZXQoInN0YXR1cyIpKTsKIAotICAgICAgICAvLyDmlq3oqIDov5Tlm57nmoTnirbmgIHnoIHlkozmtojmga8KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCI0MDEiLCByZXN1bHQuZ2V0Q29kZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuZ2V0TXNnKCkuY29udGFpbnMoIueZu+W9leWksei0pSIpKTsKKyAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCisgICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLmNoYW5nZVBhc3N3b3JkKHVzZXJJZCwgIm9sZFBhc3N3b3JkIiwgIm5ld1Bhc3N3b3JkIiwgIm5ld1Bhc3N3b3JkIik7CisgICAgfQorCisgICAgLy8g5rWL6K+V55So5oi35rOo5YaM5o6l5Y+jCisgICAgQFRlc3QKKyAgICB2b2lkIHRlc3RSZWdpc3RlcigpIHsKKyAgICAgICAgLy8g6K6+572u6L6T5YWl5pWw5o2uCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJuYW1lIiwgInRlc3RVc2VyIik7CisgICAgICAgIHJlcXVlc3QucHV0KCJlbWFpbCIsICJ0ZXN0QGV4YW1wbGUuY29tIik7CisgICAgICAgIHJlcXVlc3QucHV0KCJwYXNzd29yZCIsICJwYXNzd29yZCIpOworICAgICAgICByZXF1ZXN0LnB1dCgicm9sZSIsICJVU0VSIik7CisgICAgICAgIHJlcXVlc3QucHV0KCJpbnZpdGVDb2RlIiwgIjEyMzQ1Iik7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5ZueCisgICAgICAgIFN0cmluZyByZXN1bHRNZXNzYWdlID0gIueUqOaIt+azqOWGjOaIkOWKnyI7CisgICAgICAgIHdoZW4odXNlclNlcnZpY2UucmVnaXN0ZXJVc2VyKCJ0ZXN0VXNlciIsICJ0ZXN0QGV4YW1wbGUuY29tIiwgInBhc3N3b3JkIiwgIlVTRVIiLCAiMTIzNDUiKSkKKyAgICAgICAgICAgICAgICAudGhlblJldHVybihyZXN1bHRNZXNzYWdlKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSB1c2VyQ29udHJvbGxlci5yZWdpc3RlcihyZXF1ZXN0KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLnlKjmiLfms6jlhozmiJDlip8iLCByZXN1bHRNYXAuZ2V0KCJtc2ciKSk7CisKKyAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCisgICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLnJlZ2lzdGVyVXNlcigidGVzdFVzZXIiLCAidGVzdEBleGFtcGxlLmNvbSIsICJwYXNzd29yZCIsICJVU0VSIiwgIjEyMzQ1Iik7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICB2b2lkIHJlZ2lzdGVyQ29udHJvbGxlcl9lbWFpbEV4aXN0cygpIHsKLSAgICAgICAgVXNlciB1c2VyID0gbmV3IFVzZXIoKTsKKyAgICB2b2lkIHRlc3RMb2dpbigpIHsKKyAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gInRlc3RVc2VyIjsKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gInBhc3N3b3JkIjsKKworICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm54KKyAgICAgICAgU3RyaW5nIGxvZ2luTWVzc2FnZSA9ICLnmbvlvZXmiJDlip8iOworICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmxvZ2luVXNlcigidGVzdFVzZXIiLCAicGFzc3dvcmQiKSkudGhlblJldHVybihsb2dpbk1lc3NhZ2UpOworCisgICAgICAgIC8vIOaooeaLn+eUqOaIt+afpeivogorICAgICAgICBVc2VycyB1c2VyID0gbmV3IFVzZXJzKCk7CisgICAgICAgIHVzZXIuc2V0VXNlcklkKDFMKTsKKyAgICAgICAgdXNlci5zZXRVc2VybmFtZSgidGVzdFVzZXIiKTsKICAgICAgICAgdXNlci5zZXRFbWFpbCgidGVzdEBleGFtcGxlLmNvbSIpOworICAgICAgICB3aGVuKHVzZXJSZXBvc2l0b3J5LmZpbmRCeVVzZXJuYW1lKCJ0ZXN0VXNlciIpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHVzZXIpKTsKIAotICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmNoZWNrRW1haWxFeGlzdHModXNlci5nZXRFbWFpbCgpKSkudGhlblJldHVybih0cnVlKTsKKyAgICAgICAgLy8g6K6+572u6K+35rGC5pWw5o2uCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJuYW1lIiwgdXNlcm5hbWUpOworICAgICAgICByZXF1ZXN0LnB1dCgicGFzc3dvcmQiLCBwYXNzd29yZCk7CiAKLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLnJlZ2lzdGVyQ29udHJvbGxlcih1c2VyKTsKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gdXNlckNvbnRyb2xsZXIubG9naW4ocmVxdWVzdCk7CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLpgq7nrrHlhrLnqoEiLCByZXN1bHQuZ2V0Q29kZSgpKTsKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue57uT5p6cCisgICAgICAgIGFzc2VydEVxdWFscygi55m75b2V5oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibXNnIikpOworCisgICAgICAgIC8vIOmqjOivgSB1c2VyIOS4jeaYryBNYXAg57G75Z6L77yM6ICM5pivIFVzZXJzIOWvueixoQorICAgICAgICBVc2VycyBsb2dnZWRJblVzZXIgPSAoVXNlcnMpIHJlc3VsdE1hcC5nZXQoInVzZXIiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChsb2dnZWRJblVzZXIpOworICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RVc2VyIiwgbG9nZ2VkSW5Vc2VyLmdldFVzZXJuYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RAZXhhbXBsZS5jb20iLCBsb2dnZWRJblVzZXIuZ2V0RW1haWwoKSk7CisKKyAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCisgICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLmxvZ2luVXNlcigidGVzdFVzZXIiLCAicGFzc3dvcmQiKTsKICAgICB9CiAKKworICAgIC8vIOa1i+ivleiOt+WPlueUqOaIt+S4quS6uui1hOaWmeaOpeWPowogICAgIEBUZXN0Ci0gICAgdm9pZCByZWdpc3RlckNvbnRyb2xsZXJfc3VjY2VzcygpIHsKLSAgICAgICAgVXNlciB1c2VyID0gbmV3IFVzZXIoKTsKKyAgICB2b2lkIHRlc3RHZXRQcm9maWxlKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworCisgICAgICAgIC8vIE1vY2sg55So5oi35pWw5o2uCisgICAgICAgIFVzZXJzIHVzZXIgPSBuZXcgVXNlcnMoKTsKKyAgICAgICAgdXNlci5zZXRVc2VySWQodXNlcklkKTsKKyAgICAgICAgdXNlci5zZXRVc2VybmFtZSgidGVzdFVzZXIiKTsKICAgICAgICAgdXNlci5zZXRFbWFpbCgidGVzdEBleGFtcGxlLmNvbSIpOworICAgICAgICB1c2VyLnNldEF2YXRhclVybCgiaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIuanBnIik7CiAKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5jaGVja0VtYWlsRXhpc3RzKHVzZXIuZ2V0RW1haWwoKSkpLnRoZW5SZXR1cm4oZmFsc2UpOwotICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLnByZVJlZ2lzdGVyVXNlcih1c2VyKSkudGhlblJldHVybih0cnVlKTsKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC6L+U5ZueCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcHJvZmlsZURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiYXZhdGFyVXJsIiwgdXNlci5nZXRBdmF0YXJVcmwoKSk7CisgICAgICAgIHByb2ZpbGVEYXRhLnB1dCgidXNlcm5hbWUiLCB1c2VyLmdldFVzZXJuYW1lKCkpOworICAgICAgICBwcm9maWxlRGF0YS5wdXQoImVtYWlsIiwgdXNlci5nZXRFbWFpbCgpKTsKKyAgICAgICAgd2hlbih1c2VyU2VydmljZS5nZXRQcm9maWxlKHVzZXJJZCkpLnRoZW5SZXR1cm4ocHJvZmlsZURhdGEpOwogCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5yZWdpc3RlckNvbnRyb2xsZXIodXNlcik7CisgICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IHVzZXJDb250cm9sbGVyLmdldFByb2ZpbGUodXNlcklkKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModXNlci5nZXRFbWFpbCgpLCAoKFVzZXIpIHJlc3VsdC5nZXREYXRhKCkpLmdldEVtYWlsKCkpOworICAgICAgICAvLyDpqozor4Hov5Tlm57nu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0VXNlciIsIHJlc3VsdE1hcC5nZXQoInVzZXJuYW1lIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RAZXhhbXBsZS5jb20iLCByZXN1bHRNYXAuZ2V0KCJlbWFpbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciLCByZXN1bHRNYXAuZ2V0KCJhdmF0YXJVcmwiKSk7CisKKyAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCisgICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLmdldFByb2ZpbGUodXNlcklkKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xkv67mlLnnlKjmiLfkuKrkurrotYTmlpnmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdEVkaXRQcm9maWxlKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHByb2ZpbGVEYXRhID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBwcm9maWxlRGF0YS5wdXQoImF2YXRhclVybCIsICJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciKTsKKyAgICAgICAgcHJvZmlsZURhdGEucHV0KCJuaWNrbmFtZSIsICJuZXdOaWNrbmFtZSIpOworICAgICAgICBwcm9maWxlRGF0YS5wdXQoImdlbmRlciIsICJNYWxlIik7CisgICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiZGVzY3JpcHRpb24iLCAiVXBkYXRlZCBkZXNjcmlwdGlvbiIpOworICAgICAgICBwcm9maWxlRGF0YS5wdXQoImhvYmJpZXMiLCAiUmVhZGluZywgSGlraW5nIik7CisKKyAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5ZueCisgICAgICAgIHdoZW4odXNlclNlcnZpY2UuZWRpdFByb2ZpbGUodXNlcklkLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIuanBnIiwgIm5ld05pY2tuYW1lIiwgIk1hbGUiLCAiVXBkYXRlZCBkZXNjcmlwdGlvbiIsICJSZWFkaW5nLCBIaWtpbmciKSkKKyAgICAgICAgICAgICAgICAudGhlblJldHVybih0cnVlKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXN1bHRNYXAgPSB1c2VyQ29udHJvbGxlci5lZGl0UHJvZmlsZSh1c2VySWQsIHByb2ZpbGVEYXRhKTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLnlKjmiLfotYTmlpnmm7TmlrDmiJDlip8iLCByZXN1bHRNYXAuZ2V0KCJtZXNzYWdlIikpOworCisgICAgICAgIC8vIOmqjOivgeacjeWKoeWxguaWueazleaYr+WQpuiiq+iwg+eUqAorICAgICAgICB2ZXJpZnkodXNlclNlcnZpY2UsIHRpbWVzKDEpKS5lZGl0UHJvZmlsZSh1c2VySWQsICJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciLCAibmV3Tmlja25hbWUiLCAiTWFsZSIsICJVcGRhdGVkIGRlc2NyaXB0aW9uIiwgIlJlYWRpbmcsIEhpa2luZyIpOwogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgdm9pZCB2ZXJpZnlFbWFpbENvZGVfc3VjY2VzcygpIHsKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS52ZXJpZnlFbWFpbCgidGVzdEBleGFtcGxlLmNvbSIsICIxMjM0NTYiKSkudGhlblJldHVybih0cnVlKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRlU2hhcmVSYXRlKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwogCi0gICAgICAgIFVzZXJDb250cm9sbGVyLlZlcmlmaWNhdGlvblJlcXVlc3QgcmVxdWVzdCA9IG5ldyBVc2VyQ29udHJvbGxlci5WZXJpZmljYXRpb25SZXF1ZXN0KCk7Ci0gICAgICAgIHJlcXVlc3Quc2V0RW1haWwoInRlc3RAZXhhbXBsZS5jb20iKTsKLSAgICAgICAgcmVxdWVzdC5zZXRDb2RlKCIxMjM0NTYiKTsKKyAgICAgICAgLy8g5qih5oufIFVzZXJTZXJ2aWNlIOi/lOWbnueahOe7k+aenAorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGV4cGVjdGVkUmVzcG9uc2UgPSBNYXAub2YoCisgICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAibWVzc2FnZSIsICLliIbkuqvnjoforqHnrpfmiJDlip8iLAorICAgICAgICAgICAgICAgICJzaGFyZVJhdGUiLCAwLjVmCisgICAgICAgICk7CiAKLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLnZlcmlmeUVtYWlsQ29kZShyZXF1ZXN0KTsKKyAgICAgICAgLy8g6K6+572u55So5oi35pWw5o2uCisgICAgICAgIFVzZXJzIHVzZXIgPSBuZXcgVXNlcnMoKTsKKyAgICAgICAgdXNlci5zZXRVc2VySWQodXNlcklkKTsKKyAgICAgICAgdXNlci5zZXRVcGxvYWRDb3VudCg1MGYpOyAgLy8g5LiK5Lyg6YeP5Li6NTAKKyAgICAgICAgdXNlci5zZXREb3dubG9hZENvdW50KDEwMGYpOyAgLy8g5LiL6L296YeP5Li6MTAwCisgICAgICAgIHdoZW4odXNlclNlcnZpY2UuY2FsY3VsYXRlU2hhcmVSYXRlKHVzZXJJZCkpLnRoZW5SZXR1cm4oZXhwZWN0ZWRSZXNwb25zZSk7CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDAiLCByZXN1bHQuZ2V0Q29kZSgpKTsKLSAgICB9CisgICAgICAgIC8vIOiwg+eUqOaOpeWPoworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLmNhbGN1bGF0ZVNoYXJlUmF0ZSh1c2VySWQpOwogCi0gICAgQFRlc3QKLSAgICB2b2lkIHZlcmlmeUVtYWlsQ29kZV9mYWlsdXJlKCkgewotICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLnZlcmlmeUVtYWlsKCJ0ZXN0QGV4YW1wbGUuY29tIiwgIjAwMDAwMCIpKS50aGVuUmV0dXJuKGZhbHNlKTsKLQotICAgICAgICBVc2VyQ29udHJvbGxlci5WZXJpZmljYXRpb25SZXF1ZXN0IHJlcXVlc3QgPSBuZXcgVXNlckNvbnRyb2xsZXIuVmVyaWZpY2F0aW9uUmVxdWVzdCgpOwotICAgICAgICByZXF1ZXN0LnNldEVtYWlsKCJ0ZXN0QGV4YW1wbGUuY29tIik7Ci0gICAgICAgIHJlcXVlc3Quc2V0Q29kZSgiMDAwMDAwIik7Ci0KLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLnZlcmlmeUVtYWlsQ29kZShyZXF1ZXN0KTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIumqjOivgeWksei0pSIsIHJlc3VsdC5nZXRDb2RlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgdm9pZCBjaGVja1Bhc3N3b3JkX3N1Y2Nlc3MoKSB7Ci0gICAgICAgIHdoZW4odXNlclNlcnZpY2UuY2hlY2tQYXNzd29yZCgxTCwgImFiYzEyMyIpKS50aGVuUmV0dXJuKHRydWUpOwotCi0gICAgICAgIFJlc3VsdDxTdHJpbmc+IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLmNoZWNrUGFzc3dvcmQoMUwsICJhYmMxMjMiKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuWOn+Wni+Wvhueggei+k+WFpeato+ehriIsIHJlc3VsdC5nZXRNc2coKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICB2b2lkIGNoZWNrUGFzc3dvcmRfZmFpbHVyZSgpIHsKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5jaGVja1Bhc3N3b3JkKDFMLCAid3JvbmciKSkudGhlblJldHVybihmYWxzZSk7Ci0KLSAgICAgICAgUmVzdWx0PFN0cmluZz4gcmVzdWx0ID0gdXNlckNvbnRyb2xsZXIuY2hlY2tQYXNzd29yZCgxTCwgIndyb25nIik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIzMDUiLCByZXN1bHQuZ2V0Q29kZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLljp/lp4vlr4bnoIHovpPlhaXplJnor68iLCByZXN1bHQuZ2V0TXNnKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgdm9pZCBzZW5kVmVyaWZpY2F0aW9uRW1haWxfdXNlck5vdEZvdW5kKCkgewotICAgICAgICBVc2VyQ29udHJvbGxlci5FbWFpbFJlcXVlc3QgcmVxdWVzdCA9IG5ldyBVc2VyQ29udHJvbGxlci5FbWFpbFJlcXVlc3QoKTsKLSAgICAgICAgcmVxdWVzdC5zZXRFbWFpbCgibm90Zm91bmRAZXhhbXBsZS5jb20iKTsKLQotICAgICAgICB3aGVuKHVzZXJNYXBwZXIuc2VsZWN0T25lKGFueSgpKSkudGhlblJldHVybihudWxsKTsKLQotICAgICAgICBSZXNwb25zZUVudGl0eTxSZXN1bHQ+IHJlc3BvbnNlID0gdXNlckNvbnRyb2xsZXIuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHJlcXVlc3QpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyg0MDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIxIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldENvZGUoKSk7CisgICAgICAgIC8vIOmqjOivgee7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRSZXNwb25zZSwgcmVzdWx0KTsKKyAgICAgICAgdmVyaWZ5KHVzZXJTZXJ2aWNlLCB0aW1lcygxKSkuY2FsY3VsYXRlU2hhcmVSYXRlKHVzZXJJZCk7ICAvLyDpqozor4HmnI3liqHmlrnms5XmmK/lkKbooqvosIPnlKgKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWJmNDdmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLlVzZXJGb2xsb3dDb250cm9sbGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJGb2xsb3dTZXJ2aWNlOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7CitpbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOworCitjbGFzcyBVc2VyRm9sbG93Q29udHJvbGxlclRlc3QgeworCisgICAgQEluamVjdE1vY2tzCisgICAgcHJpdmF0ZSBVc2VyRm9sbG93Q29udHJvbGxlciB1c2VyRm9sbG93Q29udHJvbGxlcjsKKworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBVc2VyRm9sbG93U2VydmljZSB1c2VyRm9sbG93U2VydmljZTsKKworICAgIEBCZWZvcmVFYWNoCisgICAgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5XnlKjmiLflhbPms6jmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdEZvbGxvdygpIHsKKyAgICAgICAgTG9uZyBmb2xsb3dlcklkID0gMUw7CisgICAgICAgIExvbmcgZm9sbG93ZWRJZCA9IDJMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IE1hcC5vZigKKyAgICAgICAgICAgICAgICAic3RhdHVzIiwgInN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIiwgIuWFs+azqOaIkOWKnyIKKyAgICAgICAgKTsKKworICAgICAgICAvLyDmqKHmi58gdXNlckZvbGxvd1NlcnZpY2UuZm9sbG93KCkg6L+U5ZueCisgICAgICAgIHdoZW4odXNlckZvbGxvd1NlcnZpY2UuZm9sbG93KGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCisgICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QgPSBNYXAub2YoImZvbGxvd2VyX2lkIiwgZm9sbG93ZXJJZCk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlRW50aXR5ID0gdXNlckZvbGxvd0NvbnRyb2xsZXIuZm9sbG93KGZvbGxvd2VkSWQsIHJlcXVlc3QpOworCisgICAgICAgIC8vIOmqjOivgei/lOWbnueahOeKtuaAgeeggeWSjOWGheWuuQorICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZUVudGl0eS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLlhbPms6jmiJDlip8iLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOworICAgIH0KKworICAgIC8vIOa1i+ivleWPlua2iOWFs+azqOaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0VW5mb2xsb3coKSB7CisgICAgICAgIExvbmcgZm9sbG93ZXJJZCA9IDFMOworICAgICAgICBMb25nIGZvbGxvd2VkSWQgPSAyTDsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBNYXAub2YoCisgICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAibWVzc2FnZSIsICLlj5bmtojlhbPms6jmiJDlip8iCisgICAgICAgICk7CisKKyAgICAgICAgLy8g5qih5oufIHVzZXJGb2xsb3dTZXJ2aWNlLnVuZm9sbG93KCkg6L+U5ZueCisgICAgICAgIHdoZW4odXNlckZvbGxvd1NlcnZpY2UudW5mb2xsb3coZm9sbG93ZXJJZCwgZm9sbG93ZWRJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKKyAgICAgICAgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdCA9IE1hcC5vZigiZm9sbG93ZXJfaWQiLCBmb2xsb3dlcklkKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2VFbnRpdHkgPSB1c2VyRm9sbG93Q29udHJvbGxlci51bmZvbGxvdyhmb2xsb3dlZElkLCByZXF1ZXN0KTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnirbmgIHnoIHlkozlhoXlrrkKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2VFbnRpdHkuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5Y+W5raI5YWz5rOo5oiQ5YqfIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKKyAgICB9CisKKyAgICAvLyDmtYvor5Xojrflj5bmn5DkuKrnlKjmiLfnmoTnsonkuJ3liJfooajmjqXlj6MKKyAgICBAVGVzdAorICAgIHZvaWQgdGVzdEdldEZvbGxvd2VycygpIHsKKyAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBNYXAub2YoCisgICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAidG90YWwiLCAyLAorICAgICAgICAgICAgICAgICJmb2xsb3dlcnMiLCBMaXN0Lm9mKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJ1c2VyX2lkIiwgMkwsICJ1c2VybmFtZSIsICJ1c2VyMiIsICJhdmF0YXJfdXJsIiwgInVybDIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5vZigidXNlcl9pZCIsIDNMLCAidXNlcm5hbWUiLCAidXNlcjMiLCAiYXZhdGFyX3VybCIsICJ1cmwzIikKKyAgICAgICAgICAgICAgICApCisgICAgICAgICk7CisKKyAgICAgICAgLy8g5qih5oufIHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2VycygpIOi/lOWbngorICAgICAgICB3aGVuKHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2Vycyh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7CisKKyAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCisgICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlRW50aXR5ID0gdXNlckZvbGxvd0NvbnRyb2xsZXIuZ2V0Rm9sbG93ZXJzKHVzZXJJZCk7CisKKyAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE54q25oCB56CB5ZKM5YaF5a65CisgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlRW50aXR5LmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgic3RhdHVzIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgidG90YWwiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCAoKExpc3Q8Pz4pIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoImZvbGxvd2VycyIpKS5zaXplKCkpOworICAgIH0KKworICAgIC8vIOa1i+ivleiOt+WPluafkOS4queUqOaIt+eahOWFs+azqOWIl+ihqOaOpeWPoworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0R2V0Rm9sbG93aW5nKCkgeworICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IE1hcC5vZigKKyAgICAgICAgICAgICAgICAic3RhdHVzIiwgInN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICJ0b3RhbCIsIDIsCisgICAgICAgICAgICAgICAgImZvbGxvd2luZyIsIExpc3Qub2YoCisgICAgICAgICAgICAgICAgICAgICAgICBNYXAub2YoInVzZXJfaWQiLCAyTCwgInVzZXJuYW1lIiwgInVzZXIyIiwgImF2YXRhcl91cmwiLCAidXJsMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJ1c2VyX2lkIiwgM0wsICJ1c2VybmFtZSIsICJ1c2VyMyIsICJhdmF0YXJfdXJsIiwgInVybDMiKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgKTsKKworICAgICAgICAvLyDmqKHmi58gdXNlckZvbGxvd1NlcnZpY2UuZ2V0Rm9sbG93aW5nKCkg6L+U5ZueCisgICAgICAgIHdoZW4odXNlckZvbGxvd1NlcnZpY2UuZ2V0Rm9sbG93aW5nKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2VFbnRpdHkgPSB1c2VyRm9sbG93Q29udHJvbGxlci5nZXRGb2xsb3dpbmcodXNlcklkKTsKKworICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnirbmgIHnoIHlkozlhoXlrrkKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2VFbnRpdHkuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJ0b3RhbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsICgoTGlzdDw/PikgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgiZm9sbG93aW5nIikpLnNpemUoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmNiY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmphdmEKQEAgLTAsMCArMSw5NSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJNZXNzYWdlU2VydmljZTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKK2ltcG9ydCBvcmcubW9ja2l0by5JbmplY3RNb2NrczsKK2ltcG9ydCBvcmcubW9ja2l0by5Nb2NrOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG9Bbm5vdGF0aW9uczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by53aGVuOworCitjbGFzcyBVc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0IHsKKworICAgIEBJbmplY3RNb2NrcworICAgIHByaXZhdGUgVXNlck1lc3NhZ2VDb250cm9sbGVyIHVzZXJNZXNzYWdlQ29udHJvbGxlcjsKKworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBVc2VyTWVzc2FnZVNlcnZpY2UgdXNlck1lc3NhZ2VTZXJ2aWNlOworCisgICAgQEJlZm9yZUVhY2gKKyAgICB2b2lkIHNldHVwKCkgeworICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOworICAgIH0KKworICAgIEBUZXN0CisgICAgdm9pZCB0ZXN0U2VuZE1lc3NhZ2UoKSB7CisgICAgICAgIC8vIOWHhuWkh+a1i+ivleaVsOaNrgorICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgcGFyYW1zLnB1dCgic2VuZGVyX2lkIiwgMUwpOworICAgICAgICBwYXJhbXMucHV0KCJyZWNlaXZlcl9pZCIsIDJMKTsKKyAgICAgICAgcGFyYW1zLnB1dCgiY29udGVudCIsICLmtYvor5Xmtojmga8iKTsKKworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnp4Hkv6Hlj5HpgIHmiJDlip8iKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZV9pZCIsIDEwMEwpOworCisgICAgICAgIC8vIOaooeaLn1NlcnZpY2Xmlrnms5XosIPnlKgKKyAgICAgICAgd2hlbih1c2VyTWVzc2FnZVNlcnZpY2Uuc2VuZE1lc3NhZ2UoMUwsIDJMLCAi5rWL6K+V5raI5oGvIikpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDmiafooYzmtYvor5UKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSB1c2VyTWVzc2FnZUNvbnRyb2xsZXIuc2VuZE1lc3NhZ2UocGFyYW1zKTsKKworICAgICAgICAvLyDpqozor4Hnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi56eB5L+h5Y+R6YCB5oiQ5YqfIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMEwsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoIm1lc3NhZ2VfaWQiKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICB2b2lkIHRlc3RHZXRVc2VyTWVzc2FnZXMoKSB7CisgICAgICAgIC8vIOWHhuWkh+a1i+ivleaVsOaNrgorICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworCisgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOworICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlcyIsIG5ldyBIYXNoTWFwPD4oKSk7CisKKyAgICAgICAgLy8g5qih5oufU2VydmljZeaWueazleiwg+eUqAorICAgICAgICB3aGVuKHVzZXJNZXNzYWdlU2VydmljZS5nZXRVc2VyTWVzc2FnZXModXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOworCisgICAgICAgIC8vIOaJp+ihjOa1i+ivlQorICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZSA9IHVzZXJNZXNzYWdlQ29udHJvbGxlci5nZXRVc2VyTWVzc2FnZXModXNlcklkKTsKKworICAgICAgICAvLyDpqozor4Hnu5PmnpwKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICB2b2lkIHRlc3RHZXRNZXNzYWdlKCkgeworICAgICAgICAvLyDlh4blpIfmtYvor5XmlbDmja4KKyAgICAgICAgTG9uZyBtZXNzYWdlSWQgPSAxTDsKKworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKKyAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsIG5ldyBIYXNoTWFwPD4oKSk7CisKKyAgICAgICAgLy8g5qih5oufU2VydmljZeaWueazleiwg+eUqAorICAgICAgICB3aGVuKHVzZXJNZXNzYWdlU2VydmljZS5nZXRNZXNzYWdlKG1lc3NhZ2VJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKKworICAgICAgICAvLyDmiafooYzmtYvor5UKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSB1c2VyTWVzc2FnZUNvbnRyb2xsZXIuZ2V0TWVzc2FnZShtZXNzYWdlSWQpOworCisgICAgICAgIC8vIOmqjOivgee7k+aenAorICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyBiL3RhcmdldC9jbGFzc2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OTAzMzMuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLXNlcnZlci5wb3J0PTgwODAKLXNwcmluZy5kYXRhc291cmNlLnVybD1qZGJjOm15c3FsOi8vbG9jYWxob3N0OjMzMDYvcHQKLXNwcmluZy5kYXRhc291cmNlLnVzZXJuYW1lPXJvb3QKLXNwcmluZy5kYXRhc291cmNlLnBhc3N3b3JkPXJvb3QKLXNwcmluZy5kYXRhc291cmNlLmRyaXZlci1jbGFzcy1uYW1lPWNvbS5teXNxbC5jai5qZGJjLkRyaXZlcgotCi1teWJhdGlzLXBsdXMuY29uZmlndXJhdGlvbi5sb2ctaW1wbD1vcmcuYXBhY2hlLmliYXRpcy5sb2dnaW5nLnN0ZG91dC5TdGRPdXRJbXBsCi0KLQotIyBNYWlsIGNvbmZpZ3VyYXRpb24KLXNwcmluZy5tYWlsLnBhc3N3b3JkPXRsam5lYm9uaHpocWVjZGEKLXNwcmluZy5tYWlsLnVzZXJuYW1lPTIzNzA1MjM3MTZAcXEuY29tCi1zcHJpbmcubWFpbC5ob3N0PXNtdHAucXEuY29tCi1zcHJpbmcubWFpbC5wcm9wZXJ0aWVzLm1haWwuc210cC5zc2wuZW5hYmxlPXRydWUKLXNwcmluZy5tYWlsLnByb3BlcnRpZXMubWFpbC5zbXRwLmF1dGg9dHJ1ZQotc3ByaW5nLm1haWwucHJvcGVydGllcy5tYWlsLnNtdHAuc3RhcnR0bHMuZW5hYmxlPXRydWUKLQotCi1zcHJpbmcuanBhLmVuYWJsZWQ9ZmFsc2UKLXNwcmluZy5qcGEuaGliZXJuYXRlLmRkbC1hdXRvPW5vbmUKLXNwcmluZy5qcGEub3Blbi1pbi12aWV3PWZhbHNlCi0KLSMgdHJhY2tlcj8/Ci1wdC50cmFja2VyLnBvcnQ9Njk2OQotCi1wdC50cmFja2VyLnRvcnJlbnQtZGlyPSR7dXNlci5kaXJ9L2RhdGEvdG9ycmVudHMKLQotcHQudHJhY2tlci5hbGxvdy1mb3JlaWduPWZhbHNlCi1wdC50cmFja2VyLmFubm91bmNlLXVybD0vY3VzdG9tLWFubm91bmNlCi0KLW15YmF0aXMtcGx1cy5tYXBwZXItbG9jYXRpb25zPWNsYXNzcGF0aDovbWFwcGVyLyoqLyoueG1sCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MKaW5kZXggYTEyODFhOS4uMWViZDM0OSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDNhNDUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjA0NTIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxZjc3MwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjZTkxZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0xldmVsQ29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Bvc3RDb250cm9sbGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWM0NzIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDliODkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZmZkODUuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MjUwNWUuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuY2xhc3MKaW5kZXggY2QxYWIxMy4uNzdjMWE5YyAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuY2xhc3MKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjMwZTYwCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzI1OGMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db2xsZWN0aW9ucy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiMmMxYgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db21tZW50cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhZTYxZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljQ29tbWVudC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0NvbW1lbnQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjYjBiZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0NvbW1lbnQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNMaWtlcy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDhiMDEwCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FeHBlcmllbmNlSGlzdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRXhwZXJpZW5jZUhpc3RvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiMGU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRXhwZXJpZW5jZUhpc3RvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRnJpZW5kUmVsYXRpb24uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjZTJhZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRnJpZW5kUmVsYXRpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzMTMyZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNGM4OGYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwQ29tbWVudHMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwTWVtYmVycy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTczYjg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cFBvc3QuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwUG9zdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjRiNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cFBvc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MZXZlbC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGV2ZWwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiYzliNgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGV2ZWwuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MaWtlcy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGlrZXMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0N2Q3MgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGlrZXMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmN2IzNDYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Bvc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9UYXNrLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9UYXNrLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmZkOGEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Rhc2suY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckR5bmFtaWMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3OGZlZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckR5bmFtaWMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRm9sbG93LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRm9sbG93LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDIxZWYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJGb2xsb3cuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VySW52aXRlQ29kZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkNGQ2NwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyTWVzc2FnZXMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJNZXNzYWdlcy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTAxNGUxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyTWVzc2FnZXMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyVGFza1N0YXR1cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlMjk1OQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2Vycy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMzEyNQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjdjODYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db2xsZWN0aW9uc1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTM5ZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YWNlMzIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0xpa2VzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNMaWtlc1JlcG9zaXRvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwYjQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNMaWtlc1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNDMzMDcKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9FeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZmNlOTYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9GcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cENvbW1lbnRzUmVwb3NpdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjcxMjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwTWVtYmVyc1JlcG9zaXRvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmOGM4YwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwTWVtYmVyc1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBQb3N0UmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5NmY4YQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmYwMzgKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGV2ZWxSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGV2ZWxSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDE3ODIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MZXZlbFJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGlrZXNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGlrZXNSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YmI0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MaWtlc1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvUG9zdFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Qb3N0UmVwb3NpdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDBmZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvUG9zdFJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVGFza1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9UYXNrUmVwb3NpdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTY1NGFlCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVGFza1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDllZTUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRHluYW1pY1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckZvbGxvd1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRm9sbG93UmVwb3NpdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDAxNjgyCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckZvbGxvd1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiN2JiOWYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlck1lc3NhZ2VzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0OTk2YQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyUmVwb3NpdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTFiM2FkCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTg1YjEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Db21tZW50U2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGRmM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRHluYW1pY1NlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9EeW5hbWljU2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDJkZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRHluYW1pY1NlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTMwY2UKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Hcm91cFNlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvTGV2ZWxTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvTGV2ZWxTZXJ2aWNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDZkZGEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qb3N0U2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjcwMjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVGFza1NlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTllMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVGFza1NlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyRm9sbG93U2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQ1MTMyCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlck1lc3NhZ2VTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlck1lc3NhZ2VTZXJ2aWNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmFmODkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcwppbmRleCAyNDJiYjFjLi4wMDNlMDQyIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcworKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc0NzBlZC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlclNlcnZpY2VJbXBsLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlclNlcnZpY2VJbXBsLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDk3MTU4Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9SZXN1bHQuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YzVhYTAKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQgYi90YXJnZXQvY2xhc3Nlcy9maWxlcy9maWxlcy50b3JyZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQ5NzRmLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1kODphbm5vdW5jZTIyOmh0dHBzOi8vdHJhY2tlci5ieXIucHQxMDpjcmVhdGVkIGJ5MjE6cUJpdHRvcnJlbnQgdjQuNS4zLjEwMTM6Y3JlYXRpb24gZGF0ZWkxNzQ3NzE3OTAxZTQ6aW5mb2Q1OmZpbGVzbGQ2Omxlbmd0aGkxNzNlNDpwYXRobDEzOnZhbGlkLnRvcnJlbnRlZWU0Om5hbWU1OmZpbGVzMTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6L/Ht6EX0NeM88vsf7NWEn1GhlvtlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL21hcHBlci9GYXZvcml0ZU1hcHBlci54bWwgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvRmF2b3JpdGVNYXBwZXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDQ4ZWMyLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL21hcHBlci9GYXZvcml0ZU1hcHBlci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKLSAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgotPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuRmF2b3JpdGVNYXBwZXIiPgotIAotPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Qcm9tb3Rpb25NYXBwZXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmZmZDk1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL21hcHBlci9Qcm9tb3Rpb25NYXBwZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBtYXBwZXIgUFVCTElDICItLy9teWJhdGlzLm9yZy8vRFREIE1hcHBlciAzLjAvL0VOIgotICAgICAgICAiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Ci08bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Qcm9tb3Rpb25NYXBwZXIiPgotCi0gICAgPGluc2VydCBpZD0iaW5zZXJ0IiBwYXJhbWV0ZXJUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlByb21vdGlvbiI+Ci0gICAgICAgIElOU0VSVCBJTlRPIHByb21vdGlvbiAoCi0gICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLCBzdGFydF90aW1lLCBlbmRfdGltZSwgZGlzY291bnRfcGVyY2VudGFnZSwgYXBwbGljYWJsZV90b3JyZW50X2lkcwotICAgICAgICApIFZBTFVFUyAoCi0gICAgICAgICN7bmFtZX0sICN7ZGVzY3JpcHRpb259LCAje3N0YXJ0VGltZX0sICN7ZW5kVGltZX0sICN7ZGlzY291bnRQZXJjZW50YWdlfSwgI3thcHBsaWNhYmxlVG9ycmVudElkc30KLSAgICAgICAgKQotICAgIDwvaW5zZXJ0PgotCi08L21hcHBlcj4KZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL21hcHBlci9Ub3JyZW50TWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Ub3JyZW50TWFwcGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVmMDE4ZS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVG9ycmVudE1hcHBlci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBtYXBwZXIgUFVCTElDICItLy9teWJhdGlzLm9yZy8vRFREIE1hcHBlciAzLjAvL0VOIgotICAgICAgICAiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Ci0KLTxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlRvcnJlbnRNYXBwZXIiPgotICAgIDxyZXN1bHRNYXAgaWQ9IkJhc2VSZXN1bHRNYXAiIHR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVG9ycmVudEVudGl0eSI+Ci0gICAgICAgIDxpZCBjb2x1bW49ImluZm9faGFzaCIgcHJvcGVydHk9ImluZm9IYXNoIi8+Ci0gICAgICAgIDxyZXN1bHQgY29sdW1uPSJmaWxlX25hbWUiIHByb3BlcnR5PSJmaWxlTmFtZSIvPgotICAgICAgICA8cmVzdWx0IGNvbHVtbj0idXBsb2FkZXIiIHByb3BlcnR5PSJ1cGxvYWRlciIvPgotICAgICAgICA8cmVzdWx0IGNvbHVtbj0idXBsb2FkX3RpbWUiIHByb3BlcnR5PSJ1cGxvYWRUaW1lIi8+Ci0gICAgICAgIDxyZXN1bHQgY29sdW1uPSJzaXplIiBwcm9wZXJ0eT0ic2l6ZSIvPgotICAgICAgICA8cmVzdWx0IGNvbHVtbj0idGl0bGUiIHByb3BlcnR5PSJ0aXRsZSIvPgotICAgICAgICA8cmVzdWx0IGNvbHVtbj0iZGVzY3JpcHRpb24iIHByb3BlcnR5PSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8cmVzdWx0IGNvbHVtbj0iY2F0ZWdvcnkiIHByb3BlcnR5PSJjYXRlZ29yeSIvPgotICAgICAgICA8cmVzdWx0IGNvbHVtbj0iaW1hZ2VfdXJsIiBwcm9wZXJ0eT0iaW1hZ2VVcmwiLz4KLSAgICA8L3Jlc3VsdE1hcD4KLQotICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ5SW5mb0hhc2giIHJlc3VsdE1hcD0iQmFzZVJlc3VsdE1hcCI+Ci0gICAgICAgIFNFTEVDVCAqIEZST00gdG9ycmVudCBXSEVSRSBpbmZvX2hhc2ggPSAje2luZm9IYXNofQotICAgIDwvc2VsZWN0PgotICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ5U2VlZElkIiByZXN1bHRNYXA9IkJhc2VSZXN1bHRNYXAiPgotICAgICAgICBTRUxFQ1QgKiBGUk9NIHRvcnJlbnQgV0hFUkUgc2VlZF9pZCA9ICN7c2VlZElkfQotICAgIDwvc2VsZWN0PgotCi0KLQotCi0gICAgPHVwZGF0ZSBpZD0idXBkYXRlIiBwYXJhbWV0ZXJUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHkiPgotICAgICAgICBVUERBVEUgdG9ycmVudAotICAgICAgICBTRVQgZmlsZV9uYW1lID0gI3tmaWxlTmFtZX0sCi0gICAgICAgIHVwbG9hZGVyID0gI3t1cGxvYWRlcn0sCi0gICAgICAgIHVwbG9hZF90aW1lID0gI3t1cGxvYWRUaW1lfSwKLSAgICAgICAgc2l6ZSA9ICN7c2l6ZX0sCi0gICAgICAgIHRpdGxlID0gI3t0aXRsZX0sCi0gICAgICAgIGRlc2NyaXB0aW9uID0gI3tkZXNjcmlwdGlvbn0sCi0gICAgICAgIGNhdGVnb3J5ID0gI3tjYXRlZ29yeX0sCi0gICAgICAgIGltYWdlX3VybCA9ICN7aW1hZ2VVcmx9Ci0gICAgICAgIFdIRVJFIGluZm9faGFzaCA9ICN7aW5mb0hhc2h9Ci0gICAgPC91cGRhdGU+Ci0gICAgPHNlbGVjdCBpZD0ic2VhcmNoIiByZXN1bHRUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHkiPgotICAgICAgICBTRUxFQ1QgKiBGUk9NIHRvcnJlbnQKLSAgICAgICAgPHdoZXJlPgotICAgICAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmNhdGVnb3J5ICE9IG51bGwiPgotICAgICAgICAgICAgICAgIEFORCBjYXRlZ29yeSA9ICN7cGFyYW0uY2F0ZWdvcnl9Ci0gICAgICAgICAgICA8L2lmPgotCi0gICAgICAgICAgICA8IS0tICAgICAgICA8aWYgdGVzdD0icGFyYW0uZnJlZSAhPSBudWxsIGFuZCBwYXJhbS5mcmVlICE9ICcnIj4tLT4KLSAgICAgICAgICAgIDwhLS0gICAgICAgICAgICBBTkQgZnJlZSA9ICN7cGFyYW0uZnJlZX0tLT4KLSAgICAgICAgICAgIDwhLS0gICAgICAgIDwvaWY+LS0+Ci0gICAgICAgICAgICA8aWYgdGVzdD0icGFyYW0uZnJlZSAhPSBudWxsIj4KLSAgICAgICAgICAgIDxjaG9vc2U+Ci0gICAgICAgICAgICAgICAgPCEtLSDnrZvpgInigJzmraPlnKjkv4PplIDkuK3igJ3nmoTnp43lrZAgLS0+Ci0gICAgICAgICAgICAgICAgPHdoZW4gdGVzdD0icGFyYW0uZnJlZSA9PSB0cnVlIj4KLSAgICAgICAgICAgICAgICAgICAgQU5EIEVYSVNUUyAoCi0gICAgICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcHJvbW90aW9uIHAKLSAgICAgICAgICAgICAgICAgICAgV0hFUkUKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9DT05UQUlOUyhwLmFwcGxpY2FibGVfdG9ycmVudF9pZHMsIEpTT05fQVJSQVkodC5pZCkpCi0gICAgICAgICAgICAgICAgICAgIEFORCBOT1coKSBCRVRXRUVOIHAuc3RhcnRfdGltZSBBTkQgcC5lbmRfdGltZQotICAgICAgICAgICAgICAgICAgICBBTkQgcC5pc19kZWxldGVkID0gMAotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgPC93aGVuPgotICAgICAgICAgICAgICAgIDwhLS0g562b6YCJ4oCc5pyq5Zyo5L+D6ZSA5Lit4oCd55qE56eN5a2QIC0tPgotICAgICAgICAgICAgICAgIDxvdGhlcndpc2U+Ci0gICAgICAgICAgICAgICAgICAgIEFORCBOT1QgRVhJU1RTICgKLSAgICAgICAgICAgICAgICAgICAgU0VMRUNUIDEgRlJPTSBwcm9tb3Rpb24gcAotICAgICAgICAgICAgICAgICAgICBXSEVSRQotICAgICAgICAgICAgICAgICAgICBKU09OX0NPTlRBSU5TKHAuYXBwbGljYWJsZV90b3JyZW50X2lkcywgSlNPTl9BUlJBWSh0LmlkKSkKLSAgICAgICAgICAgICAgICAgICAgQU5EIE5PVygpIEJFVFdFRU4gcC5zdGFydF90aW1lIEFORCBwLmVuZF90aW1lCi0gICAgICAgICAgICAgICAgICAgIEFORCBwLmlzX2RlbGV0ZWQgPSAwCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICA8L290aGVyd2lzZT4KLSAgICAgICAgICAgIDwvY2hvb3NlPgotICAgICAgICAgICAgPC9pZj4KLQotICAgICAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmxpa2VFeHByZXNzaW9ucyAhPSBudWxsIGFuZCBwYXJhbS5saWtlRXhwcmVzc2lvbnMuc2l6ZSA+IDAiPgotICAgICAgICAgICAgICAgIEFORCAoCi0gICAgICAgICAgICAgICAgPGZvcmVhY2ggY29sbGVjdGlvbj0icGFyYW0ubGlrZUV4cHJlc3Npb25zIiBpdGVtPSJpdGVtIiBvcGVuPSIoIiBzZXBhcmF0b3I9IiBBTkQgIiBjbG9zZT0iKSI+Ci0KLSAgICAgICAgICAgICAgICAgICAgKCB0aXRsZSBMSUtFIENPTkNBVCgnJScsICN7aXRlbX0sICclJykgKSBvciAoIGRlc2NyaXB0aW9uIExJS0UgQ09OQ0FUKCclJywgI3tpdGVtfSwgJyUnKSApIG9yICggdGFncyBMSUtFIENPTkNBVCgnJScsICN7aXRlbX0sICclJykgKQotICAgICAgICAgICAgICAgIDwvZm9yZWFjaD4KLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICA8L2lmPgotICAgICAgICA8L3doZXJlPgotCi0gICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5wcm9wICE9IG51bGwgYW5kIHBhcmFtLnNvcnQgIT0gbnVsbCI+Ci0gICAgICAgICAgICBPUkRFUiBCWSAke3BhcmFtLnByb3B9ICR7cGFyYW0uc29ydH0KLSAgICAgICAgPC9pZj4KLSAgICA8L3NlbGVjdD4KLSAgICA8c2VsZWN0IGlkPSJjaGVja0Zhdm9yaXRlIiByZXN1bHRUeXBlPSJib29sZWFuIj4KLSAgICAgICAgU0VMRUNUIENPVU5UKCopID4gMAotICAgICAgICBGUk9NIGZhdm9yaXRlCi0gICAgICAgIFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0gQU5EIHVzZXJfaWQgPSAje3VzZXJJZH0KLSAgICA8L3NlbGVjdD4KLSAgICA8aW5zZXJ0IGlkPSJhZGRGYXZvcml0ZSI+Ci0gICAgICAgIElOU0VSVCBJTlRPIGZhdm9yaXRlIChzZWVkX2lkLCB1c2VyX2lkKQotICAgICAgICBWQUxVRVMgKCN7c2VlZElkfSwgI3t1c2VySWR9KQotICAgIDwvaW5zZXJ0PgotICAgIDxkZWxldGUgaWQ9InJlbW92ZUZhdm9yaXRlIj4KLSAgICAgICAgREVMRVRFIEZST00gZmF2b3JpdGUKLSAgICAgICAgV0hFUkUgc2VlZF9pZCA9ICN7c2VlZElkfSBBTkQgdXNlcl9pZCA9ICN7dXNlcklkfQotICAgIDwvZGVsZXRlPgotCi0KLTwvbWFwcGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAzYWIwYS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVXNlck1hcHBlci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCi0gICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KLTxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXIiPgotICAgIDwhLS0g5qC55o2u55So5oi35ZCN5p+l5om+55So5oi3IC0tPgotICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ5VXNlcm5hbWUiIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KLSAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0KLSAgICA8L3NlbGVjdD4KLSAgICA8IS0tIOagueaNrueUqOaIt+WQjeWSjOWvhueggeafpeaJvueUqOaItyAtLT4KLSAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVVzZXJuYW1lQW5kUGFzc3dvcmQiIHBhcmFtZXRlclR5cGU9Im1hcCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KLSAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0gQU5EIHBhc3N3b3JkID0gI3twYXNzd29yZH0KLSAgICA8L3NlbGVjdD4KLSAgICA8IS0tIOagueaNrumCrueuseafpeaJvueUqOaItyAtLT4KLSAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUVtYWlsIiBwYXJhbWV0ZXJUeXBlPSJzdHJpbmciIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlciI+Ci0gICAgICAgIFNFTEVDVCAqIEZST00gdXNlciBXSEVSRSBlbWFpbCA9ICN7ZW1haWx9Ci0gICAgPC9zZWxlY3Q+Ci0gICAgPCEtLSDmoLnmja7nlKjmiLflkI3ljIXlkKvmn6Xmib7nlKjmiLcgLS0+Ci0gICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlVc2VybmFtZUNvbnRhaW5pbmciIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KLSAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lIExJS0UgQ09OQ0FUKCclJywgI3tuYW1lfSwgJyUnKQotICAgIDwvc2VsZWN0PgotPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiMTlhNS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKLSAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgotPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIiPgotICAgIDwhLS0g6YCa6L+HIHRva2VuIOWSjCBlbWFpbCDmn6Xor6IgVmVyaWZpY2F0aW9uVG9rZW4gLS0+Ci0gICAgPHNlbGVjdCBpZD0iZmluZEJ5VG9rZW5BbmRFbWFpbCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5WZXJpZmljYXRpb25Ub2tlbiI+Ci0gICAgICAgIFNFTEVDVCAqIEZST00gdmVyaWZpY2F0aW9uX3Rva2VuCi0gICAgICAgIFdIRVJFIHRva2VuID0gI3t0b2tlbn0gQU5EIGVtYWlsID0gI3tlbWFpbH0KLSAgICA8L3NlbGVjdD4KLTwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvb3V0cHV0L3ZhbGlkLnRvcnJlbnQgYi90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE5MGU1Mi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWQxMDpjcmVhdGVkIGJ5MTg6cUJpdHRvcnJlbnQgdjUuMS4wMTM6Y3JlYXRpb24gZGF0ZWkxNzQ1OTQ4OTk1ZTQ6aW5mb2Q2Omxlbmd0aGkyMmU0Om5hbWUxNTpleGFtcGxlLnRvcnJlbnQxMjpwaWVjZSBsZW5ndGhpMTYzODRlNjpwaWVjZXMyMDpGbh7wthop+jzHCY4G5sJoFKN0bDc6cHJpdmF0ZWkxZWVlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyCmluZGV4IDJhZTk3OWEuLjIyNjcxYzYgMTAwNjQ0Ci0tLSBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphcgorKysgYi90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyLm9yaWdpbmFsIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyLm9yaWdpbmFsCmluZGV4IDRmZDgwMTQuLmU5ZWJiOWUgMTAwNjQ0Ci0tLSBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbAorKysgYi90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIub3JpZ2luYWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdCBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QKaW5kZXggODk5NGQwYS4uNTcxMWNhMiAxMDA2NDQKLS0tIGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdAorKysgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CkBAIC0xLDU4ICsxLDEwNiBAQAorY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlck1lc3NhZ2VTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFRhc2suY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzJEZpbmlzaFN0YXR1cy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xNeU1ldGFPYmplY3RIYW5kbGVyLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFBvc3RSZXBvc2l0b3J5LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJGb2xsb3cuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcQ29sbGVjdGlvbnMuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHZvXFRvcnJlbnRWTy5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xQcm9tb3Rpb25DcmVhdGVEVE8uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlcnMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlclRhc2tTdGF0dXMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXENvbW1lbnRDb250cm9sbGVyLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUb3JyZW50Q29udHJvbGxlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcRHluYW1pY0NvbnRyb2xsZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXEdyb3VwQ29udHJvbGxlci5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlclNlcnZpY2UuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzJE9yZGVyLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJEZXRhaWxzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJJbnZpdGVDb2RlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyRm9sbG93Q29udHJvbGxlci5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc3VsdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQcm9tb3Rpb24uY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXNQYWdlLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFRvcnJlbnRNYXBwZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcU2VjdXJpdHlDb25maWcuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEludml0YXRpb25TZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUYXNrQ29udHJvbGxlci5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVG9ycmVudFNlcnZpY2VJbXBsLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFRvcnJlbnRFbnRpdHkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRW50aXR5QmFzZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50UGFyYW0uY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFVzZXJEZXRhaWxzU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRXhwZXJpZW5jZUhpc3RvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJNZXNzYWdlQ29udHJvbGxlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxGcmllbmRSZWxhdGlvbi5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlckRldGFpbHNTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XER5bmFtaWNMaWtlcy5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVG9ycmVudFNlcnZpY2UuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxJMThuTWVzc2FnZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVmVyaWZpY2F0aW9uVG9rZW4uY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcSW52aXRhdGlvbk1hcHBlci5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXE9yZGVyUGFnZVBhcmFtLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxJbnZpdGF0aW9uU2VydmljZUltcGwuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxVc2VyTWFwcGVyLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJGb2xsb3dTZXJ2aWNlLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFRyYWNrZXJDb25maWcuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcRmF2b3JpdGVNYXBwZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcUG9zdC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VVdGlsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxEeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXER5bmFtaWNTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxFbWFpbFNlcnZpY2VJbXBsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxQcm9tb3Rpb25TZXJ2aWNlSW1wbC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFN0YXR1cy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwUmVwb3NpdG9yeS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcVXNlckZvbGxvd1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFByb21vdGlvblNlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XENvbW1lbnRSZXBvc2l0b3J5LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBQb3N0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcTXlNZXRhT2JqZWN0SGFuZGxlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHV0aWxzXFJlc3VsdC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcTGV2ZWxDb250cm9sbGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxFeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFRhc2tSZXBvc2l0b3J5LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwQ29tbWVudHMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEdyb3VwU2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcVXNlclJlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFBvc3RDb250cm9sbGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XENvbW1lbnRzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxHcm91cFBvc3RSZXBvc2l0b3J5LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxMaWtlc1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlckRldGFpbHMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcUHJvbW90aW9uLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyRHluYW1pY1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXNQYWdlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxMZXZlbFNlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcU2VjdXJpdHlDb25maWcuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFRhc2tTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XExpa2VzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxGcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XExldmVsUmVwb3NpdG9yeS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcRHluYW1pY0xpa2VzUmVwb3NpdG9yeS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxWZXJpZmljYXRpb25Ub2tlbk1hcHBlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxFbnRpdHlCYXNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXFRvcnJlbnRQYXJhbS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxEeW5hbWljQ29tbWVudC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyTWVzc2FnZXMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFBvc3RTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxWZXJpZmljYXRpb25Ub2tlbi5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXE9yZGVyUGFnZVBhcmFtLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxDb21tZW50U2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxVc2VyTWFwcGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzJFNvdXJjZS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxSZXN1bHRTdGF0dXMuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cVG9ycmVudFVwZGF0ZURUTy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VVdGlsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwTWVtYmVycy5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xHbG9iYWxDb3JzQ29uZmlnJDEuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzJEFubm91bmNlLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbW1vblJlc3VsdFN0YXR1cy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcRW1haWxTZXJ2aWNlSW1wbC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxQcm9tb3Rpb25TZXJ2aWNlSW1wbC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFN0YXR1cy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxMZXZlbC5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VQYXJhbS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxQcm9tb3Rpb25NYXBwZXIuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cZXhjZXB0aW9uXFJvY2tldFBURXhjZXB0aW9uLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXIuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFx1dGlsc1xWZXJpZnlDb2RlLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXEludml0ZVBhcmFtLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXFRvcnJlbnRVcGxvYWRQYXJhbS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxJbnZpdGF0aW9uRW50aXR5LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxDb2xsZWN0aW9uc1JlcG9zaXRvcnkuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEVtYWlsU2VydmljZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcUHJvbW90aW9uU2VydmljZS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxGYXZvcml0ZUVudGl0eS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyRHluYW1pYy5jbGFzcwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdAppbmRleCAxNWYyODA3Li4xNTczMDkyIDEwMDY0NAotLS0gYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdAorKysgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdApAQCAtMSw1MiArMSwxMDIgQEAKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcSW52aXRhdGlvblNlcnZpY2VJbXBsLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb21tb25SZXN1bHRTdGF0dXMuamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFNlY3VyaXR5Q29uZmlnLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xUb3JyZW50VXBkYXRlRFRPLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxVc2VyTWFwcGVyLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VQYXJhbS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRW50aXR5QmFzZS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJEZXRhaWxzU2VydmljZS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cZXhjZXB0aW9uXFJvY2tldFBURXhjZXB0aW9uLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxGYXZvcml0ZU1hcHBlci5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9ccGFyYW1cVG9ycmVudFBhcmFtLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxQcm9tb3Rpb25NYXBwZXIuamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEZhdm9yaXRlRW50aXR5LmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxUb3JyZW50RW50aXR5LmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxWZXJpZmljYXRpb25Ub2tlbk1hcHBlci5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxJbnZpdGVQYXJhbS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxJMThuTWVzc2FnZS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9ccGFyYW1cVG9ycmVudFVwbG9hZFBhcmFtLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXE9yZGVyUGFnZVBhcmFtLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQcm9tb3Rpb24uamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEludml0YXRpb25FbnRpdHkuamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxJbnZpdGF0aW9uU2VydmljZS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFRvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cUmVzdWx0U3RhdHVzLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcRW1haWxTZXJ2aWNlSW1wbC5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xUcmFja2VyQ29uZmlnLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc1BhZ2UuamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxQcm9tb3Rpb25TZXJ2aWNlLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVXNlclNlcnZpY2VJbXBsLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEVtYWlsU2VydmljZS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxTdGF0dXMuamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcVmVyaWZ5Q29kZS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxNeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVG9ycmVudE1hcHBlci5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlckRldGFpbHMuamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyU2VydmljZS5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlci5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxQYWdlVXRpbC5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXN1bHQuamF2YQotRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHZvXFRvcnJlbnRWTy5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcSW52aXRhdGlvbk1hcHBlci5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFRvcnJlbnRTZXJ2aWNlLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xNeU1ldGFPYmplY3RIYW5kbGVyLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxWZXJpZmljYXRpb25Ub2tlbi5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFByb21vdGlvblNlcnZpY2VJbXBsLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcSW52aXRlQ29udHJvbGxlci5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZy5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cUHJvbW90aW9uQ3JlYXRlRFRPLmphdmEKLUQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVG9ycmVudENvbnRyb2xsZXIuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyVGFza1N0YXR1cy5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEV4cGVyaWVuY2VIaXN0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRmF2b3JpdGVFbnRpdHkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcUHJvbW90aW9uU2VydmljZS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXEdsb2JhbENvcnNDb25maWcuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xTZWN1cml0eUNvbmZpZy5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XENvbGxlY3Rpb25zLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlckludml0ZUNvZGUuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc1BhZ2UuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxGcmllbmRSZWxhdGlvbi5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyRm9sbG93U2VydmljZS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcQ29tbWVudFJlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxVc2VyTWFwcGVyLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXEdyb3VwQ29udHJvbGxlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxUYXNrU2VydmljZS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJEZXRhaWxzLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRHluYW1pY0NvbW1lbnQuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cUHJvbW90aW9uQ3JlYXRlRFRPLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcTGlrZXMuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxPcmRlclBhZ2VQYXJhbS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXEZhdm9yaXRlTWFwcGVyLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cdm9cVG9ycmVudFZPLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFRvcnJlbnRTZXJ2aWNlLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXENvbW1lbnRDb250cm9sbGVyLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVG9ycmVudE1hcHBlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxFbWFpbFNlcnZpY2VJbXBsLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XE15UHJvamVjdEFwcGxpY2F0aW9uLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJNZXNzYWdlQ29udHJvbGxlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxFeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFN0YXR1cy5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXE15TWV0YU9iamVjdEhhbmRsZXIuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxSZXN1bHRTdGF0dXMuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyRm9sbG93LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcUG9zdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxUYXNrUmVwb3NpdG9yeS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVV0aWwuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBSZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFBvc3RSZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXER5bmFtaWNDb250cm9sbGVyLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlck1lc3NhZ2VzLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXExldmVsU2VydmljZS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFRyYWNrZXJDb25maWcuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlckRldGFpbHNTZXJ2aWNlLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBDb21tZW50cy5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFZlcmlmaWNhdGlvblRva2VuLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cZXhjZXB0aW9uXFJvY2tldFBURXhjZXB0aW9uLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XExldmVsUmVwb3NpdG9yeS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxMaWtlc1JlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQcm9tb3Rpb24uamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckZvbGxvd0NvbnRyb2xsZXIuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcVXNlckR5bmFtaWNSZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxQcm9tb3Rpb25TZXJ2aWNlSW1wbC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUb3JyZW50Q29udHJvbGxlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEVudGl0eUJhc2UuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxWZXJpZmljYXRpb25Ub2tlbk1hcHBlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVG9ycmVudEVudGl0eS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VQYXJhbS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwTWVtYmVycy5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxQb3N0U2VydmljZS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUmVzdWx0LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXExldmVsQ29udHJvbGxlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcVmVyaWZ5Q29kZS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxEeW5hbWljTGlrZXNSZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJSZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwUG9zdFJlcG9zaXRvcnkuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xUb3JyZW50VXBkYXRlRFRPLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRHluYW1pY0xpa2VzLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVGFzay5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxDb21tZW50U2VydmljZS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyRm9sbG93UmVwb3NpdG9yeS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUYXNrQ29udHJvbGxlci5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XENvbW1lbnRzLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFBvc3RDb250cm9sbGVyLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XER5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcSTE4bk1lc3NhZ2UuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHV0aWxzXFJlc3VsdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEdyb3VwUG9zdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJEeW5hbWljLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcTGV2ZWwuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlcnMuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50UGFyYW0uamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxQcm9tb3Rpb25NYXBwZXIuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlck1lc3NhZ2VTZXJ2aWNlLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFRvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxHcm91cFNlcnZpY2UuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb21tb25SZXN1bHRTdGF0dXMuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcRHluYW1pY1NlcnZpY2UuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50VXBsb2FkUGFyYW0uamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcRW1haWxTZXJ2aWNlLmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdCBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdAppbmRleCBiYWMyMzViLi4xODFhNTZmIDEwMDY0NAotLS0gYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QKKysrIGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CkBAIC0xLDIgKzEsOCBAQAotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXJUZXN0JDEuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyVGVzdC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxHcm91cENvbnRyb2xsZXJUZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxMZXZlbENvbnRyb2xsZXJUZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxQb3N0Q29udHJvbGxlclRlc3QuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXENvbW1lbnRDb250cm9sbGVyVGVzdC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcRHluYW1pY0NvbnRyb2xsZXJUZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUYXNrQ29udHJvbGxlclRlc3QuY2xhc3MKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvaW5wdXRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0CmluZGV4IDE4OGRjZTguLjdjOTExOTUgMTAwNjQ0Ci0tLSBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvaW5wdXRGaWxlcy5sc3QKKysrIGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9pbnB1dEZpbGVzLmxzdApAQCAtMSwyICsxLDEwIEBACi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyVGVzdC5qYXZhCi1EOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyVGVzdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxHcm91cENvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXER5bmFtaWNDb250cm9sbGVyVGVzdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxMZXZlbENvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXENvbW1lbnRDb250cm9sbGVyVGVzdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxQb3N0Q29udHJvbGxlclRlc3QuamF2YQorRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVGFza0NvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XFBUXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhCitEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyRm9sbG93Q29udHJvbGxlclRlc3QuamF2YQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jbGFzc3BhdGguaW5kZXggYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NsYXNzcGF0aC5pbmRleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAwYWZmNi4uMDAwMDAwMAotLS0gYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NsYXNzcGF0aC5pbmRleAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlclRlc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhOGVlYwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjNmI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyVGVzdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQ3MmZjCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA3N2ViCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlclRlc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlNjFkNgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYmVlZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0JDEuY2xhc3MgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdCQxLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzI5NTRiLi4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0JDEuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCmluZGV4IDkyM2NhMDkuLjVlN2JlZjQgMTAwNjQ0Ci0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4MDc4NAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmM0OWIwCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS91cGxvYWRzL3Bvc3QvXDM0NVwyNzZcMjU2XDM0NFwyNzdcMjQxXDM0NVwyMzNcMjc2XDM0N1wyMTFcMjA3XzIwMjUwNDA4MTU0MDA3LmpwZyIgImIvdXBsb2Fkcy9wb3N0L1wzNDVcMjc2XDI1NlwzNDRcMjc3XDI0MVwzNDVcMjMzXDI3NlwzNDdcMjExXDIwN18yMDI1MDQwODE1NDAwNy5qcGciCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgImIvdXBsb2Fkcy9wb3N0L1wzNDVcMjc2XDI1NlwzNDRcMjc3XDI0MVwzNDVcMjMzXDI3NlwzNDdcMjExXDIwN18yMDI1MDQwODE1NDAwNy5qcGciCg==