oidc-lib
Version:
A library for creating OIDC Service Providers
1 lines • 214 kB
JSON
{"issuer":"client_api","oidc_lib_version":"^2.7.5","code":{"applications.json":"ew0KICAiYXBwX2xhdW5jaGVyIjogew0KICAgICJjb21wYW55X25hbWUiOiJBcHBsaWNhdGlvbiBMYXVuY2hlciIsDQogICAgImlucHV0X2lzc3VlciI6IjwtLUlTU1VFUl9IT1NULS0-L29oaXAiLA0KICAgICJpbnB1dF9jcmVkZW50aWFsX3R5cGUiOiI8LS1TTUFSVF9DUkVERU5USUFMX0hPU1QtLT4vc21hcnQtY3JlZGVudGlhbC9PbnRhcmlvLUhlYWx0aC1JbnN1cmFuY2UtUGxhbiIsDQogICAgImlucHV0X2NyZWRlbnRpYWxfbmFtZSI6IkRpZ2l0YWwgT0hJUCBDYXJkIiwNCiAgICAiaW5wdXRfY3JlZGVudGlhbF9yZWFzb24iOiJSZXF1aXJlZCB0byBhY2Nlc3MgT250YXJpbyBIZWFsdGggQXBwbGljYXRpb25zIiwNCiAgICAiZGVmYXVsdF93YWxsZXQiOiI8LS1XQUxMRVQtLT4vd2FsbGV0L3dhbGxldC5odG1sIiwNCiAgICAib3V0cHV0X2lzc3VlciI6IjwtLUlTU1VFUl9IT1NULS0-L29oaXBfc21hcnRoZWFsdGhjYXJkIiwNCiAgICAiYXBwbGljYXRpb25fdXJsIjogIjwtLUFQUF9MQVVOQ0hFUi0tPi9hcHBfbGF1bmNoZXIiLA0KICAgICJ2YWxpZF90YXJnZXRfbGlua191cmlzIjogWw0KICAgICAgICAiPC0tQVBQX0xBVU5DSEVSLS0-L2FwcF9sYXVuY2hlciINCiAgICBdDQogIH0sDQogICJvaGlwIjogew0KICAgICJjb21wYW55X25hbWUiOiAiRGlnaXRhbCBPSElQIENhcmQiLA0KICAgICJvdXRwdXRfY3JlZGVudGlhbF90eXBlIjogIjwtLVNNQVJUX0NSRURFTlRJQUxfSE9TVC0tPi9zbWFydC1jcmVkZW50aWFsL09udGFyaW8tSGVhbHRoLUluc3VyYW5jZS1QbGFuIiwNCiAgICAib3V0cHV0X2NyZWRlbnRpYWxfcmVhc29uIjogIkFjY2VzcyBPbnRhcmlvIEhlYWx0aCBBcHBsaWNhdGlvbnMiLA0KICAgICJ2YWxpZF90YXJnZXRfbGlua191cmlzIjogWw0KICAgICAgICAiPC0tSVNTVUVSX0hPU1QtLT4vY3JlZGVudGlhbC9hdXRoX3VzZXJhZ2VudF9yZXNwb25zZSINCiAgICBdDQogIH0sDQogICJvaGlwX2NvdmlkIjogew0KICAgICJjb21wYW55X25hbWUiOiAiT250YXJpbyBDT1ZJRCBUZXN0IExhYnMiLA0KICAgICJpbnB1dF9jcmVkZW50aWFsX3R5cGUiOiAiPC0tU01BUlRfQ1JFREVOVElBTF9IT1NULS0-L3NtYXJ0LWNyZWRlbnRpYWwvT250YXJpby1IZWFsdGgtSW5zdXJhbmNlLVBsYW4iLA0KICAgICJpbnB1dF9jcmVkZW50aWFsX3JlYXNvbiI6ICJPYnRhaW4gYSBDb3ZpZCBUZXN0IENhcmQiLA0KICAgICJ2YWxpZF90YXJnZXRfbGlua191cmlzIjogWw0KICAgICAgICAiPC0tQ0xJRU5UX0FQSS0tPi9vaGlwX2NvdmlkL2NpVUlSZXN1bHQiDQogICAgXQ0KICB9LA0KICAib2hpcF9zbWFydGhlYWx0aGNhcmQiOiB7DQogICAgImNvbXBhbnlfbmFtZSI6ICJPbnRhcmlvIENPVklEIFN0YXR1cyIsDQogICAgImRpc2FibGUtaW5wdXRfY3JlZGVudGlhbF90eXBlIjogIjwtLVNNQVJUX0NSRURFTlRJQUxfSE9TVC0tPi9zbWFydC1jcmVkZW50aWFsL09udGFyaW8tSGVhbHRoLUluc3VyYW5jZS1QbGFuIiwNCiAgICAiaW5wdXRfY3JlZGVudGlhbF9yZWFzb24iOiAiT2J0YWluIGFuIE9udGFyaW8gQ09WSUQgU21hcnQgSGVhbHRoY2FyZCIsDQogICAgInZhbGlkX3RhcmdldF9saW5rX3VyaXMiOiBbDQogICAgICAgICI8LS1DTElFTlRfQVBJLS0-L29oaXBfc21hcnRoZWFsdGhjYXJkL2NpVUlSZXN1bHQiDQogICAgXQ0KICB9LA0KICAiZ2F0ZXdheSI6IHsNCiAgICAiY29tcGFueV9uYW1lIjogIk9udGFyaW8gSGVhbHRoIE5ldHdvcmsgR2F0ZXdheSIsDQogICAgImNvbXBhbnlfbG9nbyI6ICIvd2ViL2ltZy91aG4uanBnIiwNCiAgICAiaW5wdXRfY3JlZGVudGlhbF90eXBlIjogIjwtLVNNQVJUX0NSRURFTlRJQUxfSE9TVC0tPi9zbWFydC1jcmVkZW50aWFsL09udGFyaW8tSGVhbHRoLUluc3VyYW5jZS1QbGFuIiwNCiAgICAiaW5wdXRfY3JlZGVudGlhbF9yZWFzb24iOiAiUmVxdWlyZWQgdG8gZW50ZXIgT250YXJpbyBIZWFsdGggTmV0d29yayBHYXRld2F5IiwNCiAgICAiYXBwbGljYXRpb25fdXJsIjogIjwtLUdBVEVXQVktLT4vZ2F0ZXdheSIsDQogICAgInZhbGlkX3RhcmdldF9saW5rX3VyaXMiOiBbDQogICAgICAgICI8LS1HQVRFV0FZLS0-L2dhdGV3YXkvYXV0aF91c2VyYWdlbnRfcmVzcG9uc2UiDQogICAgXSwNCiAgICAicmVzcG9uc2VfdHlwZSI6ICJpZF90b2tlbiINCiAgfSwgIA0KICAidWhuIjogew0KICAgICJjb21wYW55X25hbWUiOiAiVW5pdmVyc2l0eSBIZWFsdGggTmV0d29yayIsDQogICAgImNvbXBhbnlfbG9nbyI6ICJ1bmRlZmluZWQvd2ViL2ltZy91aG4ucG5nIiwNCiAgICAiaW5zdHJ1Y3Rpb25zIjogIlNjYW4gd2l0aCB5b3VyIE9udGFyaW8gSGVhbHRoIFdhbGxldCIsDQogICAgImlucHV0X2NyZWRlbnRpYWxfdHlwZSI6ICI8LS1TTUFSVF9DUkVERU5USUFMX0hPU1QtLT4vc21hcnQtY3JlZGVudGlhbC9PbnRhcmlvLUhlYWx0aC1JbnN1cmFuY2UtUGxhbiIsDQogICAgImlucHV0X2NyZWRlbnRpYWxfcmVhc29uIjogIlJlcXVpcmVkIHRvIGVudGVyIGEgVUhOIGhvcGl0YWwgZm9yIGV2ZXJ5b25lJ3MgcHJvdGVjdGlvbiBhbmQgdG8gc3R1ZHkgdHJhbnNtaXNzaW9uIHBhdHRlcm5zIiwNCiAgICAiYXBwbGljYXRpb25fdXJsIjogIjwtLVVITi0tPi91aG4iLA0KICAgICJ2YWxpZF90YXJnZXRfbGlua191cmlzIjogWw0KICAgICAgICAiPC0tVUhOLS0-L3Vobi9sYW5kaW5nX3BhZ2UiDQogICAgXQ0KICB9LA0KICAiYWlyY2FuYWRhIjogew0KICAgICJjb21wYW55X25hbWUiOiAiQWlyIENhbmFkYSIsDQogICAgImNvbXBhbnlfbG9nbyI6ICIvd2ViL2ltZy9sb2dvLnBuZyIsDQogICAgImluc3RydWN0aW9ucyI6ICJTY2FuIHdpdGggeW91ciBPbnRhcmlvIEhlYWx0aCBXYWxsZXQgdG8gRW50ZXIgQ09WSUQtU2FmZSBDYWJpbiIsDQogICAgImlucHV0X2NyZWRlbnRpYWxfdHlwZSI6ICI8LS1TTUFSVF9DUkVERU5USUFMX0hPU1QtLT4vc21hcnQtY3JlZGVudGlhbC9PSC1TbWFydEhlYWx0aENhcmQtUHJvb2YiLA0KICAgICJpbnB1dF9jcmVkZW50aWFsX3JlYXNvbiI6ICJSZXF1aXJlZCB0byBlbnRlciBhIENPVklELVNhZmUgQ2FiaW4iLA0KICAgICJhcHBsaWNhdGlvbl91cmwiOiAiPC0tREVOVElTVC0tPi9haXJjYW5hZGEiLA0KICAgICJ2YWxpZF90YXJnZXRfbGlua191cmlzIjogWw0KICAgICAgICAiPC0tREVOVElTVC0tPi9haXJjYW5hZGEvbGFuZGluZ19wYWdlIg0KICAgIF0NCiAgfSwNCiAgImRlbnRpc3QiOiB7DQogICAgImNvbXBhbnlfbmFtZSI6ICJIYXBweSBTbWlsZSBGYW1pbHkgRGVudGlzdHMiLA0KICAgICJjb21wYW55X2xvZ28iOiAiL3dlYi9pbWcvbG9nby5wbmciLA0KICAgICJpbnN0cnVjdGlvbnMiOiAiU2NhbiB3aXRoIHlvdXIgT250YXJpbyBDb3ZpZCBDYXJkIHRvIGJvb2sgYW4gYXBwb2ludG1lbnQiLA0KICAgICJpbnB1dF9jcmVkZW50aWFsX3R5cGUiOiAiPC0tU01BUlRfQ1JFREVOVElBTF9IT1NULS0-L3NtYXJ0LWNyZWRlbnRpYWwvT0gtU21hcnRIZWFsdGhDYXJkLVByb29mIiwNCiAgICAiaW5wdXRfY3JlZGVudGlhbF9yZWFzb24iOiAiUmVxdWlyZWQgdG8gYm9vayBhIHNhZmUgYXBwb2ludG1lbnQiLA0KICAgICJhcHBsaWNhdGlvbl91cmwiOiAiPC0tREVOVElTVC0tPi9kZW50aXN0IiwNCiAgICAidmFsaWRfdGFyZ2V0X2xpbmtfdXJpcyI6IFsNCiAgICAgICAgIjwtLURFTlRJU1QtLT4vZGVudGlzdC9sYW5kaW5nX3BhZ2UiDQogICAgXQ0KICB9LA0KICAibGl0dGxlX2xhdW5jaGVyIjogew0KICAgICJjb21wYW55X25hbWUiOiJMaXR0bGUgTGF1bmNoZXIgQ29ycG9yYXRpb24iLA0KICAgICJpbnB1dF9pc3N1ZXIiOiI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwIiwNCiAgICAiaW5wdXRfY3JlZGVudGlhbF90eXBlIjoiPC0tU01BUlRfQ1JFREVOVElBTF9IT1NULS0-L3NtYXJ0LWNyZWRlbnRpYWwvT250YXJpby1IZWFsdGgtSW5zdXJhbmNlLVBsYW4iLA0KICAgICJpbnB1dF9jcmVkZW50aWFsX25hbWUiOiJEaWdpdGFsIE9ISVAgQ2FyZCIsDQogICAgImlucHV0X2NyZWRlbnRpYWxfcmVhc29uIjoiUmVxdWlyZWQgdG8gYWNjZXNzIHRoZSBMaXR0bGUgTGF1bmNoZXIiLA0KICAgICJkZWZhdWx0X3dhbGxldCI6IjwtLVdBTExFVC0tPi93YWxsZXQvd2FsbGV0Lmh0bWwiLA0KICAgICJvdXRwdXRfaXNzdWVyIjoiPC0tSVNTVUVSX0hPU1QtLT4vb2hpcF9jb3ZpZCIsDQogICAgImFwcGxpY2F0aW9uX3VybCI6ICI8LS1BUFBfTEFVTkNIRVItLT4vYXBwX2xhdW5jaGVyL2xpdHRsZV9sYXVuY2hlci5odG1sIiwNCiAgICAidmFsaWRfdGFyZ2V0X2xpbmtfdXJpcyI6IFsNCiAgICAgICAgIjwtLUFQUF9MQVVOQ0hFUi0tPi9hcHBfbGF1bmNoZXIvbGl0dGxlX2xhdW5jaGVyLmh0bWwiLA0KICAgICAgICAiPC0tQVBQX0xBVU5DSEVSLS0-L2FwcF9sYXVuY2hlci9saXR0bGVfbGF1bmNoZXJfcG9zdF9kZWJ1Zy5qcyIsDQogICAgICAgICI8LS1BUFBfTEFVTkNIRVItLT4vYnVpbGQvaW5kZXguaHRtbCINCiAgICBdDQogIH0NCn0","client_api.js":"bW9kdWxlLmV4cG9ydHMgPSB7DQoJcmVnaXN0ZXJFbmRwb2ludHM6IHJlZ2lzdGVyRW5kcG9pbnRzDQp9DQoNCmNvbnN0IGNvbnRlbnRNb2R1bGVOYW1lID0gJ2NsaWVudF9hcGknOw0KdmFyIGNsaWVudF9hcGlfdXJsID0gJy8nICsgY29udGVudE1vZHVsZU5hbWU7DQoNCnZhciBwayA9IG51bGw7DQp2YXIgc2lvcF9jbGllbnRzID0ge307DQoNCmZ1bmN0aW9uIHJlZ2lzdGVyRW5kcG9pbnRzKHBrU291cmNlKSB7DQoJcGsgPSBwa1NvdXJjZTsNCg0KICBpbml0aWFsaXplQXBwQ29uZmlndXJhdGlvbnMoKTsNCg0KICB2YXIgZW5kcG9pbnQgPSBjbGllbnRfYXBpX3VybCArICcvcXJfY29kZS86Y2xpZW50JzsNCiAgcGsuYXBwLm9wdGlvbnMoZW5kcG9pbnQsIHBrLmNvcnMoKSk7DQogIHBrLmFwcC5nZXQoZW5kcG9pbnQsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgZnVuY3Rpb24ocmVxLCByZXMpew0KICAgIGdldF9jbGllbnRfcXJfY29kZV9hbmRfdXJsKHJlcSwgcmVzKTsNCiAgfSk7DQoNCiAgdmFyIGVuZHBvaW50ID0gY2xpZW50X2FwaV91cmwgKyAnL2lzc3Vlcl9xcl9jb2RlLzpjbGllbnQnOw0KICBway5hcHAub3B0aW9ucyhlbmRwb2ludCwgcGsuY29ycygpKTsNCiAgcGsuYXBwLmdldChlbmRwb2ludCwgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBmdW5jdGlvbihyZXEsIHJlcyl7DQogICAgZ2V0X2lzc3Vlcl9jcmVkZW50aWFsX3JlcXVlc3RfcXJjb2RlKHJlcSwgcmVzKTsNCiAgfSk7DQoNCiAgdmFyIGVuZHBvaW50ID0gY2xpZW50X2FwaV91cmwgKyAnL29pZGNfaW5pdC86Y2xpZW50JzsNCiAgcGsuYXBwLm9wdGlvbnMoZW5kcG9pbnQsIHBrLmNvcnMoKSkgDQogIHBrLmFwcC5nZXQoZW5kcG9pbnQsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgYXN5bmMgZnVuY3Rpb24ocmVxLHJlcyl7DQogICAgdmFyIHNpb3BfY2xpZW50ID0gZ2V0X3Npb3BfY2xpZW50KHJlcSwgcmVzKTsNCiAgICBhd2FpdCBzaW9wX2NsaWVudC5ycC5sb2dpbl9pbml0aWF0aW9uKHJlcSwgcmVzKTsNCiAgfSk7DQoNCiAgdmFyIGVuZHBvaW50ID0gY2xpZW50X2FwaV91cmwgKyAnL2F1dGhyZXNwLzpjbGllbnQnOw0KICBway5hcHAub3B0aW9ucyhlbmRwb2ludCwgcGsuY29ycygpKSANCiAgcGsuYXBwLmdldChlbmRwb2ludCwgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBmdW5jdGlvbihyZXEscmVzKXsNCiAgICB2YXIgc2lvcF9jbGllbnQgPSBnZXRfc2lvcF9jbGllbnQocmVxLCByZXMpOw0KICAgIHNpb3BfY2xpZW50LnJwLnByb2Nlc3NBdXRoUmVzcG9uc2UocmVxLCByZXMpOw0KICB9KTsNCiAgcGsuYXBwLnBvc3QoZW5kcG9pbnQsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgZnVuY3Rpb24ocmVxLCByZXMpew0KICAgIHZhciBzaW9wX2NsaWVudCA9IGdldF9zaW9wX2NsaWVudChyZXEsIHJlcyk7DQogICAgc2lvcF9jbGllbnQucnAucHJvY2Vzc0ltcGxpY2l0UG9zdChyZXEsIHJlcywgZmFsc2UpOw0KICB9KTsgDQoNCiAgdmFyIGVuZHBvaW50ID0gY2xpZW50X2FwaV91cmwgKyAnL2ltcGxpY2l0X3Bvc3QvOmNsaWVudCc7DQogIHBrLmFwcC5vcHRpb25zKGVuZHBvaW50LCBway5jb3JzKCkpIA0KICBway5hcHAucG9zdChlbmRwb2ludCwgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBmdW5jdGlvbihyZXEsIHJlcyl7DQogICAgdmFyIHNpb3BfY2xpZW50ID0gZ2V0X3Npb3BfY2xpZW50KHJlcSwgcmVzKTsNCiAgICBzaW9wX2NsaWVudC5ycC5wcm9jZXNzSW1wbGljaXRQb3N0KHJlcSwgcmVzLCB0cnVlKTsNCiAgfSk7IA0KDQogIHBrLmFwcC5nZXQoY2xpZW50X2FwaV91cmwgKyAnL3Rva2VuUmVzdWx0LzpjbGllbnQnLCBway51dGlsLmNvcnNPcHRpb25zKCksIGZ1bmN0aW9uKHJlcSwgcmVzKXsNCiAgICB2YXIgc2lvcF9jbGllbnQgPSBnZXRfc2lvcF9jbGllbnQocmVxLCByZXMpOw0KICAgIHNpb3BfY2xpZW50LnJwLnByb2Nlc3NUb2tlblJlc3VsdChyZXEsIHJlcyk7DQogIH0pOw0KDQogIHBrLmFwcC5nZXQoY2xpZW50X2FwaV91cmwgKyAnL2ludGVncmF0ZUNsYWltcy86Y2xpZW50JywgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBmdW5jdGlvbihyZXEscmVzKXsNCiAgICB2YXIgc2lvcF9jbGllbnQgPSBnZXRfc2lvcF9jbGllbnQocmVxLCByZXMpOw0KICAgIHBrLnV0aWwubG9nX3Byb3RvY29sKCdJTlRFR1JBVEUgQ0xBSU1TIC0gQXBpIFJlcXVlc3QnLCAnY2xpZW50X2FwaScsIHBrLnV0aWwuaW5ib3VuZF93aXJlX2NvbnRlbnQocmVxKSk7DQogICAgLy8gbm90IGNsZWFyIHdoeSB0aGlzIGlzIG5vdCBhIG5vLW9wIC0gVE9ETzogIGludmVzdGlnYXRlDQogICAgc2lvcF9jbGllbnQucnAuZ2V0SW50ZWdyYXRlZENsYWltcyhyZXEsIHJlcyk7DQogIH0pOw0KDQogIHBrLmFwcC5nZXQoY2xpZW50X2FwaV91cmwgKyAnL3JlbW90ZV93YWxsZXRfdG9rZW4vOmNsaWVudCcsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgYXN5bmMgZnVuY3Rpb24ocmVxLCByZXMpew0KICAgIHZhciBzaW9wX2NsaWVudCA9IGdldF9zaW9wX2NsaWVudChyZXEsIHJlcyk7DQogICAgc2lvcF9jbGllbnQucnAucHJvY2Vzc1JlbW90ZVdhbGxldFRva2VuKHJlcSwgcmVzKTsNCiAgfSk7DQoNCiAgcGsuYXBwLmdldChjbGllbnRfYXBpX3VybCArICcvYXBwX2NvbmZpZy86Y2xpZW50JywgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBhc3luYyBmdW5jdGlvbihyZXEsIHJlcyl7DQogICAgdmFyIHNpb3BfY2xpZW50ID0gZ2V0X3Npb3BfY2xpZW50KHJlcSwgcmVzKTsNCiAgICBzaW9wX2NsaWVudC5ycC5nZXRBcHBDb25maWcocmVxLCByZXMpOw0KICB9KTsNCg0KICBway5hcHAuZ2V0KGNsaWVudF9hcGlfdXJsICsgJy9lcnJvci86Y2xpZW50JywgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBmdW5jdGlvbihyZXEsIHJlcyl7DQogICAgdmFyIHNpb3BfY2xpZW50ID0gZ2V0X3Npb3BfY2xpZW50KHJlcSwgcmVzKTsNCiAgICBzaW9wX2NsaWVudC5ycC5kaXNwbGF5RXJyb3IocmVxLCByZXMpOw0KICB9KTsgIA0KfQ0KDQpmdW5jdGlvbiBnZXRfc2lvcF9jbGllbnQocmVxLCByZXMpew0KICB2YXIgY2xpZW50X25hbWUgPSByZXEucGFyYW1zLmNsaWVudDsNCiAgdmFyIHNpb3BfY2xpZW50ID0gc2lvcF9jbGllbnRzW2NsaWVudF9uYW1lXTsNCiAgaWYgKCFzaW9wX2NsaWVudCl7DQogICAgdGhyb3coJ1JlcXVlc3QgZm9yIHVucmVjb2duaXplZCBjbGllbnQ6ICgnICsgY2xpZW50X25hbWUgKyAnKScpOw0KICB9DQogIHJldHVybiBzaW9wX2NsaWVudDsNCn0NCg0KYXN5bmMgZnVuY3Rpb24gZ2V0X2NsaWVudF9xcl9jb2RlX2FuZF91cmwocmVxLCByZXMpIHsNCiAgcGsudXRpbC5sb2dfcHJvdG9jb2woJ0NMSUVOVCBRUiBDT0RFIEFORCBVUkwgLSBBcGkgUmVxdWVzdCcsIA0KICAgICdjbGllbnRfYXBpJywgDQogICAgeyBuYW1lOiAne1RSWUJFX09JREN9JywgdXJsOiAnI2NsaWVudF9xcl9jb2RlX2FuZF91cmwnIH0sDQogICAgcGsudXRpbC5pbmJvdW5kX3dpcmVfY29udGVudChyZXEpKTsNCg0KICB2YXIgY2xpZW50X25hbWUgPSByZXEucGFyYW1zLmNsaWVudDsNCiAgdmFyIHNpb3BfY2xpZW50ID0gc2lvcF9jbGllbnRzW2NsaWVudF9uYW1lXTsNCiAgaWYgKCFzaW9wX2NsaWVudCl7DQogICAgcGsudXRpbC5sb2dfZGV0YWlsKCJFcnJvcjogbm8gc2lvcF9jbGllbnQgbWF0Y2hlcyAiICsgY2xpZW50X25hbWUpOw0KICAgIHJlcy5zdGF0dXNDb2RlID0gNDAwOw0KICAgIHZhciBjb250ZW50ID0gew0KICAgICAgInN0YXR1c0NvZGUiOiA0MDAsDQogICAgICAiZXJyb3IiOiAicmVnaXN0cmF0aW9uX3JlcXVpcmVkIiwNCiAgICAgICJlcnJvcl9kZXNjcmlwdGlvbiI6ICJubyBzaW9wX2NsaWVudCBtYXRjaGVzIGNsaWVudF9uYW1lIg0KICAgIH07DQogICAgcmVzLmpzb24oY29udGVudCk7DQogICAgcGsudXRpbC5sb2dfcHJvdG9jb2woJ0NMSUVOVCBRUiBDT0RFIEFORCBVUkwgLSBBcGkgUmVzcG9uc2UnLCANCiAgICAgICdjbGllbnRfYXBpJywgDQogICAgICB7IG5hbWU6ICd7VFJZQkVfT0lEQ30nLCB1cmw6ICcjY2xpZW50X3FyX2NvZGVfYW5kX3VybCcgfSwNCiAgICAgIHBrLnV0aWwub3V0Ym91bmRfd2lyZV9jb250ZW50KHJlcywgY29udGVudCkpOw0KICAgIHJldHVybjsNCiAgfQ0KDQogIHZhciBpc3MgPSByZXEucXVlcnkuaXNzOw0KICB2YXIgdGFyZ2V0X2xpbmtfdXJpID0gcGsudXRpbC5mdWxseURlY29kZVVSSUNvbXBvbmVudChyZXEucXVlcnkudGFyZ2V0X2xpbmtfdXJpKTsNCiAgdmFyIHJlc3BvbnNlX21vZGUgPSByZXEucXVlcnkucmVzcG9uc2VfbW9kZTsNCiAgdmFyIGxpX3BhcmFtZXRlcnMgPSByZXEucXVlcnkubGlfcGFyYW1ldGVyczsNCiAgLy8gbGlfcGFyYW1ldGVycyBtdXN0IGJlIHJlaHlkcmF0ZWQgaWYgcHJlc2VudA0KICBpZiAobGlfcGFyYW1ldGVycyl7DQogICAgdmFyIGRlYyA9IHBrLmJhc2U2NHVybC5kZWNvZGUocGsuYmFzZTY0dXJsLmZyb21CYXNlNjQobGlfcGFyYW1ldGVycykpOw0KICAgIGxpX3BhcmFtZXRlcnMgPSBKU09OLnBhcnNlKGRlYyk7DQogIH0NCg0KICB2YXIgYXJ0aWZhY3RzID0gYXdhaXQgc2lvcF9jbGllbnQucnAuZ2V0X2NsaWVudF9xcl9jb2RlX2FuZF91cmwoY2xpZW50X25hbWUsIGlzcywgdGFyZ2V0X2xpbmtfdXJpLCByZXNwb25zZV9tb2RlLCBsaV9wYXJhbWV0ZXJzKTsNCiAgYXJ0aWZhY3RzWydtcXR0c19zZXJ2ZXInXSA9IHJlcS5xdWVyeS5tcXR0c19zZXJ2ZXI7DQogIGFydGlmYWN0c1snY2xpZW50X2FwaV91cmwnXSA9IHJlcS5xdWVyeS5jbGllbnRfYXBpX3VybDsNCiAgYXJ0aWZhY3RzWydyd2wnXSA9IHJlcS5xdWVyeS5yd2w7DQogIHJlcy5qc29uKGFydGlmYWN0cyk7DQogIHBrLnV0aWwubG9nX3Byb3RvY29sKCdDTElFTlQgUVIgQ09ERSBBTkQgVVJMIC0gQXBpIFJlc3BvbnNlJywgDQogICAgJ2NsaWVudF9hcGknLCANCiAgICB7IG5hbWU6ICd7VFJZQkVfT0lEQ30nLCB1cmw6ICcjY2xpZW50X3FyX2NvZGVfYW5kX3VybCcgfSwNCiAgICBway51dGlsLm91dGJvdW5kX3dpcmVfY29udGVudChyZXMsIGFydGlmYWN0cykpOw0KfQ0KDQphc3luYyBmdW5jdGlvbiBnZXRfaXNzdWVyX2NyZWRlbnRpYWxfcmVxdWVzdF9xcmNvZGUocmVxLCByZXMpIHsNCiAgcGsudXRpbC5sb2dfcHJvdG9jb2woJ0lTU1VFUiBDUkVERU5USUFMIFJFUVVFU1QgUVIgQ09ERSAtIEFwaSBSZXF1ZXN0JywgDQogICAgJ2NsaWVudF9hcGknLCANCiAgICB7IG5hbWU6ICd7VFJZQkVfT0lEQ30nLCB1cmw6ICcjZ2V0X2lzc3Vlcl9jcmVkZW50aWFsX3JlcXVlc3RfcXJjb2RlJyB9LA0KICAgIHBrLnV0aWwuaW5ib3VuZF93aXJlX2NvbnRlbnQocmVxKSk7DQoNCiAgdmFyIHNpb3BfY2xpZW50ID0gZ2V0X3Npb3BfY2xpZW50KHJlcSwgcmVzKTsNCg0KICB2YXIgaXNzdWVyID0gcmVxLnF1ZXJ5Lmlzc3VlcjsNCiAgaWYgKCFpc3N1ZXIpew0KICAgIHRocm93KCdObyBpc3N1ZXIgcGFyYW1ldGVyIGluIGdldF9pc3N1ZXJfY3JlZGVudGlhbF9yZXF1ZXN0X3FyY29kZScpOw0KICB9DQoNCiAgdmFyIG5leHRfc3RlcCA9IHJlcS5xdWVyeS5uZXh0X3N0ZXA7DQoNCiAgdmFyIHFyX2NvZGUgPSBhd2FpdCBzaW9wX2NsaWVudC5ycC5nZXRfaXNzdWVyX2NyZWRlbnRpYWxfcmVxdWVzdF9xcmNvZGUoaXNzdWVyLCBuZXh0X3N0ZXApOw0KICByZXMuanNvbihxcl9jb2RlKTsNCg0KICBway51dGlsLmxvZ19wcm90b2NvbCgnSVNTVUVSIENSRURFTlRJQUwgUkVRVUVTVCBRUiBDT0RFIC0gQXBpIFJlc3BvbnNlJywgDQogICAgJ2NsaWVudF9hcGknLCANCiAgICB7IG5hbWU6ICd7VFJZQkVfT0lEQ30nLCB1cmw6ICcjZ2V0X2lzc3Vlcl9jcmVkZW50aWFsX3JlcXVlc3RfcXJjb2RlJyB9LA0KICAgIHBrLnV0aWwub3V0Ym91bmRfd2lyZV9jb250ZW50KHJlcywgcXJfY29kZSkpOw0KfQ0KDQpmdW5jdGlvbiBzaW9wX2NsaWVudF9mYWN0b3J5KGNsaWVudF9uYW1lLCBjbGllbnRfYXV0aGVudGljYXRvciwgY29uZmlnKXsNCiAgaWYgKHNpb3BfY2xpZW50c1tjbGllbnRfbmFtZV0pew0KICAgIHRocm93ICgiQ2xpZW50ICIgKyBjbGllbnRfbmFtZSArICcgaXMgYWxyZWFkeSByZWdpc3RlcmVkLicpOw0KICB9DQoNCiAgdmFyIF9uYW1lID0gY2xpZW50X25hbWU7DQogIHZhciBfcnAgPSBway5jbGllbnQuaW5pdChwaywgY29udGVudE1vZHVsZU5hbWUsIGNsaWVudF9uYW1lLCBjb25maWcpOw0KICB2YXIgX2NvbmZpZyA9IGNvbmZpZzsNCiAgdmFyIF9zZXNzaW9uS2V5ID0gcGsudXRpbC5yYW5kb21Ub1VSTigpOw0KDQogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29uZmlnIiwgew0KICAgICAgZ2V0OiBmdW5jdGlvbigpIHsNCiAgICAgICAgICByZXR1cm4gX2NvbmZpZzsNCiAgICAgIH0sDQogICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKXsNCiAgICAgICAgX2NvbmZpZyA9IHZhbHVlOw0KICAgICAgfSwNCiAgICAgIGVudW1lcmFibGU6IHRydWUNCiAgICB9KTsNCg0KICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInJwIiwgew0KICAgICAgZ2V0OiBmdW5jdGlvbigpIHsNCiAgICAgICAgICByZXR1cm4gX3JwOw0KICAgICAgfSwNCiAgICAgIGVudW1lcmFibGU6IHRydWUNCiAgICB9KTsNCg0KICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlc3Npb25LZXkiLCB7DQogICAgICBnZXQ6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgIHJldHVybiBfc2Vzc2lvbktleTsNCiAgICAgIH0sDQogICAgICBlbnVtZXJhYmxlOiB0cnVlDQogICAgfSk7DQoNCiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzZXRDbGFpbSIsIHsNCiAgICB2YWx1ZTogZnVuY3Rpb24oY2xhaW1OYW1lLCB2YWx1ZSkgew0KICAgICAgX3NldENsYWltKGNsYWltTmFtZSwgdmFsdWUpOw0KICAgIH0gDQogIH0pOw0KfQ0KDQoNCi8vIFRPRE8gYWRkIHZhbGlkaXR5IGNoZWNrcw0KLy8gZm9yIGV4YW1wbGUsIHZhbGlkX3RhcmdldF9saW5rX3VyaSBtdXN0IGJlIHNldA0KYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcENvbmZpZ3VyYXRpb25zKCl7DQogIHZhciBwb3NzaWJsZV9lcnJvciA9ICdGYXRhbCBFcnJvciByZWFkaW5nIGNsaWVudF9hcGkgYXBwbGljYXRpb25zLmpzb24gZmlsZSc7DQogIHRyeXsNCiAgICB2YXIgYXBwbGljYXRpb25zU3RyaW5nID0gcGsuZnMucmVhZEZpbGVTeW5jKCdjbGllbnRfYXBpL2FwcGxpY2F0aW9ucy5qc29uJywgJ3V0Zi04Jyk7DQogICAgdmFyIHBvc3NpYmxlX2Vycm9yID0gIkZhdGFsIEVycm9yIHBhcnNpbmcgY2xpZW50X2FwaSBhcHBsaWNhdGlvbnMuanNvbiBmaWxlIjsNCiAgICB2YXIgYXBwbGljYXRpb25zID0gSlNPTi5wYXJzZShhcHBsaWNhdGlvbnNTdHJpbmcpOw0KICB9DQogIGNhdGNoKGVycil7DQogICAgcGsudXRpbC5sb2dfZXJyb3IocG9zc2libGVfZXJyb3IsIGVycik7DQogICAgcHJvY2Vzcy5leGl0KDEpOw0KICB9DQoNCiAgdmFyIHN5c3RlbV9hcHBfbGF1bmNoZXJfdXJsOw0KICB2YXIgYXBwX2xhdW5jaGVyX2NvbmZpZyA9IGFwcGxpY2F0aW9uc1snYXBwX2xhdW5jaGVyJ107DQogIGlmIChhcHBfbGF1bmNoZXJfY29uZmlnKXsNCiAgICBzeXN0ZW1fYXBwX2xhdW5jaGVyX3VybCA9IGFwcF9sYXVuY2hlcl9jb25maWcuYXBwbGljYXRpb25fdXJsOw0KICB9DQoNCiAgZm9yICh2YXIgY2xpZW50IGluIGFwcGxpY2F0aW9ucyl7DQogICAgdmFyIGFwcF9jb25maWcgPSBhcHBsaWNhdGlvbnNbY2xpZW50XTsNCiAgICBhcHBfY29uZmlnLmNsaWVudCA9IGNsaWVudDsNCiAgICBhcHBfY29uZmlnLmFwcGxpY2F0aW9uUGF0aCA9ICcvJyArIGNsaWVudDsNCiAgICBhcHBfY29uZmlnLmNsaWVudF9hcGlfdXJsID0gcGsudXRpbC5odHRwc1NlcnZlclVybHNbJ0NMSUVOVF9BUEknXS5ocmVmICsgY29udGVudE1vZHVsZU5hbWU7DQogICAgYXBwX2NvbmZpZy5tcXR0c19zZXJ2ZXIgPSBway51dGlsLmNvbmZpZy5jb250ZW50X21vZHVsZXNbY29udGVudE1vZHVsZU5hbWVdLmNvbmZpZy5tcXR0c19zZXJ2ZXI7DQogICAgaWYgKCFhcHBfY29uZmlnLnNjb3BlKXsNCiAgICAgIGFwcF9jb25maWcuc2NvcGUgPSAib3BlbmlkIjsNCiAgICB9DQoNCiAgICAvLyBzZXQgdXAgYW4gYXBwX2xhdW5jaGVyIHVybCBpZiBvbmUgaXMgbm90IHByZXNlbnQNCiAgICBpZiAoY2xpZW50ICE9LSAnYXBwX2xhdW5jaGVyJyl7DQogICAgICBpZiAoIWFwcF9jb25maWcuYXBwX2xhdW5jaGVyX3VybCl7DQogICAgICAgIGFwcF9jb25maWcuYXBwX2xhdW5jaGVyX3VybCA9IHN5c3RlbV9hcHBfbGF1bmNoZXJfdXJsOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHZhciBzaW9wX2NsaWVudCA9IG5ldyBzaW9wX2NsaWVudF9mYWN0b3J5KGNsaWVudCwgIiIsIGFwcF9jb25maWcpOw0KICAgIHNpb3BfY2xpZW50c1tjbGllbnRdID0gc2lvcF9jbGllbnQ7ICAgDQogICAgY29uc29sZS5sb2coY2xpZW50ICsgJyByZWdpc3RlcmVkIHdpdGggY2xpZW50X2FwaTogJyArIHNpb3BfY2xpZW50LnNlc3Npb25LZXkpOyANCiAgfQ0KfQ","oidc_config.json":"ew0KICAiY29uZmlnIjogew0KCQkiY2xpZW50IjogImNsaWVudF9hcGkiLA0KCQkibXF0dHNfc2VydmVyIjogIndzczovL2h1bWFucHJlc2VudC5jb206ODAwMCINCgl9LA0KICAiY29sbGVjdGlvbnMiOiB7DQogICAgInJ3bHF1ZXVlIjogew0KICAgICAgImtleVBhdGgiOiAiaWQiDQogICAgfQ0KICB9LA0KICAiY29uZmlnX2ZpbGVzIjogWyANCiAgCSIvY2xpZW50X2FwaS9vaWRjX2NvbmZpZy5qc29uIiwNCiAgCSIvY2xpZW50X2FwaS9hcHBsaWNhdGlvbnMuanNvbiINCiAgXQ0KfQ","views":{"auth_response.handlebars":"PGRpdj4NCjxoMT4gT0lEQ19SUCBBdXRoUmVzcG9uc2VsIFBhZ2U8L2gxPg0KPC9kaXY-","debug.handlebars":"PGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0ianVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4NCgk8aDQ-e3tpc3N1ZXJNZXNzYWdlfX08L2g0Pg0KCTx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtaG92ZXIiPg0KCQk8dGhlYWQ-DQoJCQk8dHI-DQoJCQkJPHRoPkNsYWltPC90aD4NCgkJCQk8dGg-VmFsdWU8L3RoPg0KCQkJPC90cj4NCgkJPC90aGVhZD4NCgkJPHRib2R5Pg0Ke3sjdG9rZW5Bc0FycmF5fX0gICAgICANCgkJCTx0cj4NCgkJCQk8dGQ-e3tuYW1lfX08L3RkPg0KCQkJCTx0ZD57e3t2YWx1ZX19fTwvdGQ-DQoJCQk8L3RyPg0Ke3svdG9rZW5Bc0FycmF5fX0gICAgICANCgkJPC90Ym9keT4NCgk8L3RhYmxlPg0KCTxicj4NCgl7e3tjb2RlTWVzc2FnZX19fQ0KCXt7e2FjY2Vzc190b2tlbk1lc3NhZ2V9fX0NCgl7e3t0b2tlblR5cGVNZXNzYWdlfX19DQo8L2Rpdj4NCg0KPHNjcmlwdCBzcmM9Ii9wZXJzb25hbC9qcy9qcXVlcnktMy4yLjEuc2xpbS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCmZ1bmN0aW9uIHZmZXRjaChhZGNfcGFyYW1zLCBkaXNwbGF5SWQpew0KCXZhciB1cmwgPSAiL3Rlc3Rlci9wcm9jZXNzX2NsYWltX3NvdXJjZT9hZGNfcGFyYW1zPSIgKyBhZGNfcGFyYW1zOw0KCQ0KCXZhciB4bWxodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CQ0KCXhtbGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7DQoJICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsNCgkgICAgCWlmICh0aGlzLnJlc3BvbnNlVGV4dCl7DQoJCSAgICAgICAgdmFyIHJlc3BvbnNlT2JqID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7DQoJCSAgICAgICAgaW5zZXJ0RGlzdHJpYnV0ZWRDbGFpbShyZXNwb25zZU9iaiwgZGlzcGxheUlkKTsJICAgIAkJDQoJICAgIAl9DQoJICAgIH0NCgl9Ow0KCXhtbGh0dHAub3BlbigiR0VUIiwgdXJsLCB0cnVlKTsNCgl4bWxodHRwLnNlbmQoKTsNCg0KCWZ1bmN0aW9uIGluc2VydERpc3RyaWJ1dGVkQ2xhaW0ocmVzcG9uc2VPYmosIGRpc3BsYXlJZCl7DQoJCXZhciBkaXNwbGF5SWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpc3BsYXlJZCk7DQoJCXZhciBpZF90b2tlbiA9IHJlc3BvbnNlT2JqLmlkX3Rva2VuOw0KCQl2YXIgcHJldHR5UmVzcG9uc2UgPSBKU09OLnN0cmluZ2lmeShpZF90b2tlbiwgbnVsbCwgMik7DQoJCXZhciBodG1sID0gJzxkaXYgIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOyBwYWRkaW5nOiAxNXB4OyI-JzsNCg0KCQl2YXIgaW5mbyA9IHJlc3BvbnNlT2JqLm5hbWVfYW5kX3NvdXJjZS5pbmZvOw0KCQlpZiAoaW5mbyAhPT0gdW5kZWZpbmVkKXsNCgkJCWh0bWwgKz0gJzxwPicgKyBpbmZvICsgJzwvcD4nOw0KCQl9DQoNCgkJaHRtbCArPSAnPHA-PGk-JyArIHJlc3BvbnNlT2JqLnN0YXR1cyArICc8L2k-PC9wPicNCgkJCSsgJzxwcmU-PGNvZGU-JyArIHByZXR0eVJlc3BvbnNlICsgJzwvY29kZT48L3ByZT4nOw0KCQl2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsNCgkJdmFyIG5ld0NvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7DQoJCW5ld0NvbC5pbm5lckhUTUwgPSBodG1sOw0KCQluZXdSb3cuYXBwZW5kQ2hpbGQobmV3Q29sKTsNCgkJaW5zZXJ0QWZ0ZXIobmV3Um93LCBkaXNwbGF5SWRFbCk7DQoJfQ0KDQoJZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkgew0KCSAgICByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpOw0KCX0NCn0NCjwvc2NyaXB0Pg0K","error_received.handlebars":"PGgyPnt7aW5mb319PC9oMj4NCjxici8-DQo8YnIvPg0KPGgzPk9JRENfUlA6IEVycm9yIE9jY3VyZWQ8L2gzPg0KPGg0PkVycm9yOiB7e2Vycm9yfX08L2gzPg0KPGg0PkRldGFpbDoge3tlcnJvcl9kZXNjcmlwdGlvbn19PC9oMz4NCg0K","foo":"Q29tcGFyaW5nIGZpbGVzIGltcGxpY2l0LmhhbmRsZWJhcnMgYW5kIElNUExJQ0lULk5FVy5IQU5ETEVCQVJTDQoqKioqKiBpbXBsaWNpdC5oYW5kbGViYXJzDQogIC8vIEZpcnN0LCBwYXJzZSB0aGUgcXVlcnkgc3RyaW5nDQogIHZhciBwYXJhbXMgPSB7fSwgcG9zdEJvZHkgPSBsb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSwNCiAgICAgIHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZywgbTsNCiAgd2hpbGUgKG0gPSByZWdleC5leGVjKHBvc3RCb2R5KSkgew0KICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pOw0KKioqKiogSU1QTElDSVQuTkVXLkhBTkRMRUJBUlMNCiAgLy8gRmlyc3QsIHBhcnNlIHRoZSBxdWVyeSBzdHJpbmcNCiAgdmFyIHBhcmFtcyA9IHt9Ow0KICB2YXIgaGFzaENvbnRlbnQgPSBsb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTsNCiAgVkFSIHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZywgbTsNCiAgd2hpbGUgKG0gPSByZWdleC5leGVjKGhhc2hDb250ZW50KSkgew0KICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pOw0KKioqKioNCg0KKioqKiogaW1wbGljaXQuaGFuZGxlYmFycw0KDQogIC8vIGRlYnVnZ2VyOw0KICANCiAgLy8gQW5kIHNlbmQgdGhlIHRva2VuIG92ZXIgdG8gdGhlIHNlcnZlcg0KKioqKiogSU1QTElDSVQuTkVXLkhBTkRMRUJBUlMNCg0KICB2YXIgcG9zdEJvZHkgPSAnJzsNCiAgZm9yICh2YXIga2V5IGluIHBhcmFtcyl7DQogICAgaWYgKHBvc3RCb2R5KXsNCiAgICAgIHBvc3RCb2R5ICs9ICcmJzsNCiAgICB9DQogICAgcG9zdEJvZHkgKz0ga2V5cyArICc9JyArIHBhcmFtc1trZXldOw0KICB9DQoNCiAgZGVidWdnZXI7DQoNCiAgdmFyIG5ld1BhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSggImF1dGhyZXNwIiwgImltcGxpY2l0X3Bvc3QiKTsNCg0KICAvLyBBbmQgc2VuZCB0aGUgdG9rZW4gb3ZlciB0byB0aGUgc2VydmVyDQoqKioqKg0KDQoqKioqKiBpbXBsaWNpdC5oYW5kbGViYXJzDQogIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsNCiAgLy8gdXNpbmcgUE9TVCBzbyBxdWVyeSBpc24ndCBsb2dnZWQNCiAgdmFyIG5ld1BhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgiYXV0aHJlc3AiLCANCiAgICAgICAgICAiaW1wbGljaXRfcG9zdCIpOw0KICByZXEub3BlbignUE9TVCcsICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIG5ld1BhdGgsIHRydWUpOw0KICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOw0KKioqKiogSU1QTElDSVQuTkVXLkhBTkRMRUJBUlMNCiAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOw0KICByZXEub3BlbignUE9TVCcsIG5ld1BhdGgsIHRydWUpOw0KICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOw0KKioqKioNCg0K","implicit.handlebars":"PGRpdiBpZD0icG9zdF9kaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4NCjwvZGl2Pg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI-DQpwcmVwYXJlSW1wbGljaXQoKTsNCg0KZnVuY3Rpb24gcHJlcGFyZUltcGxpY2l0KCl7DQogIC8vIGRlYnVnZ2VyOw0KDQogIHZhciBwb3N0Qm9keSA9IGxvY2F0aW9uLmhhc2guc3Vic3RyKDEpOw0KICANCiAgLy8gQW5kIHNlbmQgdGhlIHRva2VuIG92ZXIgdG8gdGhlIHNlcnZlcg0KICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQogIC8vIHVzaW5nIFBPU1Qgc28gcXVlcnkgaXNuJ3QgbG9nZ2VkDQogIHZhciBuZXdQYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoImF1dGhyZXNwIiwgDQogICAgICAgICAgImltcGxpY2l0X3Bvc3QiKTsNCiAgcmVxLm9wZW4oJ1BPU1QnLCAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyBuZXdQYXRoLCB0cnVlKTsNCiAgcmVxLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsNCiAgDQogIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoZSkgew0KICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PSA0KSB7DQogICAgICB2YXIgalJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTsNCiAgICAgIGlmIChyZXEuc3RhdHVzID09IDIwMCkgew0KICAgICAgICB2YXIgbmV3VXJsOw0KICAgICAgICB2YXIgalJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTsNCiAgICAgICAgc3dpdGNoKGpSZXNwb25zZS5yZXN1bHQpew0KICAgICAgICAgIGNhc2UgInRva2VuUmVzdWx0IjoNCiAgICAgICAgICAgIG5ld1VybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIA0KICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgiYXV0aHJlc3AiLCBqUmVzcG9uc2UucmVzdWx0KQ0KICAgICAgICAgICAgICArICI_bm9uY2U9IiArIGpSZXNwb25zZS5ub25jZTsNCiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gbmV3VXJsOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgY2FzZSAicmVkaXJlY3QiOg0KICAgICAgICAgICAgbmV3VXJsID0galJlc3BvbnNlLm5ld1VybDsNCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IG5ld1VybDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIGNhc2UgInBvc3QiOg0KICAgICAgICAgICAgdmFyIGZvcm1FbCA9IGNyZWF0ZVBvc3RGb3JtKA0KICAgICAgICAgICAgICBqUmVzcG9uc2UubmV3VXJsLCANCiAgICAgICAgICAgICAgalJlc3BvbnNlLmlkX3Rva2VuLCANCiAgICAgICAgICAgICAgalJlc3BvbnNlLmVycm9yLCANCiAgICAgICAgICAgICAgalJlc3BvbnNlLmVycm9yX2Rlc2NyaXB0aW9uLCANCiAgICAgICAgICAgICAgalJlc3BvbnNlLnN0YXR1c0NvZGUsDQogICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGpSZXNwb25zZS5saV9wYXJhbWV0ZXJzKSk7DQogICAgICAgICAgICBmb3JtRWwuc3VibWl0KCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIC8vIGlmIHRoZSBPQXV0aCByZXNwb25zZSBpcyBpbnZhbGlkLCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlDQogICAgICBlbHNlIHsNCiAgICAgICAgdmFyIGVycjsNCiAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT0gNDAwKSB7DQogICAgICAgICAgZXJyID0galJlc3BvbnNlOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGVyciA9IHsgZXJyb3I6ICdUaGVyZSB3YXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgdG9rZW4uJyB9Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICB2YXIgZXJyVXJsID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoImF1dGhyZXNwIiwgImVycm9yIik7DQogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGVyclVybCArICI_ZXJyb3I9IiArIGVyci5lcnJvciArICImZXJyb3JfZGVzY3JpcHRpb249IiArIGVyci5lcnJvcl9kZXNjcmlwdGlvbjsNCiAgICAgIH0NCiAgICB9DQogIH0NCg0KICByZXEuc2VuZChwb3N0Qm9keSk7DQp9DQoNCmZ1bmN0aW9uIGNyZWF0ZVBvc3RGb3JtKGFjdGlvbiwgaWRfdG9rZW4sIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiwgc3RhdHVzQ29kZSwgbGlfcGFyYW1ldGVycyl7DQogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIik7IA0KICAgIGZvcm0uc2V0QXR0cmlidXRlKCJtZXRob2QiLCAicG9zdCIpOyANCiAgICBmb3JtLnNldEF0dHJpYnV0ZSgiYWN0aW9uIiwgYWN0aW9uKTsgDQoNCiAgICBpZiAoaWRfdG9rZW4peyAgDQogICAgICBhZGRJbnB1dChmb3JtLCAiaWRfdG9rZW4iLCBpZF90b2tlbik7DQogICAgfQ0KDQogICAgaWYgKGVycm9yKXsgIA0KICAgICAgYWRkSW5wdXQoZm9ybSwgImVycm9yIiwgZXJyb3IpOw0KICAgIH0NCg0KICAgIGlmIChlcnJvcl9kZXNjcmlwdGlvbil7ICANCiAgICAgIGFkZElucHV0KGZvcm0sICJlcnJvcl9kZXNjcmlwdGlvbiIsIGVycm9yX2Rlc2NyaXB0aW9uKTsNCiAgICB9DQoNCiAgICBpZiAoc3RhdHVzQ29kZSl7ICANCiAgICAgIGFkZElucHV0KGZvcm0sICJzdGF0dXNDb2RlIiwgc3RhdHVzQ29kZSk7DQogICAgfQ0KDQogICAgaWYgKGxpX3BhcmFtZXRlcnMpeyAgDQogICAgICBhZGRJbnB1dChmb3JtLCAibGlfcGFyYW1ldGVycyIsIGxpX3BhcmFtZXRlcnMpOw0KICAgIH0NCg0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3N0X2RpdiIpLmFwcGVuZENoaWxkKGZvcm0pOw0KICAgIHJldHVybiBmb3JtOw0KDQogICAgZnVuY3Rpb24gYWRkSW5wdXQoZm9ybSwgbmFtZSwgdmFsdWUpew0KICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsgDQogICAgICBlbC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOyANCiAgICAgIGVsLnNldEF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOyANCiAgICAgIGVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZSk7IA0KICAgICAgZm9ybS5hcHBlbmRDaGlsZChlbCk7ICANCiAgICB9DQp9DQoNCjwvc2NyaXB0Pg0K","implicit.new.handlebars":"PGRpdiBpZD0icG9zdF9kaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4NCjwvZGl2Pg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI-DQpwcmVwYXJlSW1wbGljaXQoKTsNCg0KZnVuY3Rpb24gcHJlcGFyZUltcGxpY2l0KCl7DQoNCiAgLy8gRmlyc3QsIHBhcnNlIHRoZSBxdWVyeSBzdHJpbmcNCiAgdmFyIHBhcmFtcyA9IHt9Ow0KICB2YXIgaGFzaENvbnRlbnQgPSBsb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTsNCiAgVkFSIHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZywgbTsNCiAgd2hpbGUgKG0gPSByZWdleC5leGVjKGhhc2hDb250ZW50KSkgew0KICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pOw0KICB9DQoNCiAgdmFyIHBvc3RCb2R5ID0gJyc7DQogIGZvciAodmFyIGtleSBpbiBwYXJhbXMpew0KICAgIGlmIChwb3N0Qm9keSl7DQogICAgICBwb3N0Qm9keSArPSAnJic7DQogICAgfQ0KICAgIHBvc3RCb2R5ICs9IGtleXMgKyAnPScgKyBwYXJhbXNba2V5XTsNCiAgfQ0KDQogIGRlYnVnZ2VyOw0KDQogIHZhciBuZXdQYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoICJhdXRocmVzcCIsICJpbXBsaWNpdF9wb3N0Iik7DQoNCiAgLy8gQW5kIHNlbmQgdGhlIHRva2VuIG92ZXIgdG8gdGhlIHNlcnZlcg0KICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQogIHJlcS5vcGVuKCdQT1NUJywgbmV3UGF0aCwgdHJ1ZSk7DQogIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7DQogIA0KICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKGUpIHsNCiAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkgew0KICAgICAgaWYgKHJlcS5zdGF0dXMgPT0gMjAwKSB7DQogICAgICAgIHZhciBuZXdVcmw7DQogICAgICAgIHZhciBqUmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpOw0KICAgICAgICBzd2l0Y2goalJlc3BvbnNlLnJlc3VsdCl7DQogICAgICAgICAgY2FzZSAidG9rZW5SZXN1bHQiOg0KICAgICAgICAgICAgbmV3VXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgDQogICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKCJhdXRocmVzcCIsIGpSZXNwb25zZS5yZXN1bHQpDQogICAgICAgICAgICAgICsgIj9ub25jZT0iICsgalJlc3BvbnNlLm5vbmNlOw0KICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBuZXdVcmw7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICBjYXNlICJyZWRpcmVjdCI6DQogICAgICAgICAgICBuZXdVcmwgPSBqUmVzcG9uc2UubmV3VXJsOw0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gbmV3VXJsOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgY2FzZSAicG9zdCI6DQogICAgICAgICAgICB2YXIgZm9ybUVsID0gY3JlYXRlUG9zdEZvcm0oalJlc3BvbnNlLm5ld1VybCwgalJlc3BvbnNlLmlkX3Rva2VuLCBqUmVzcG9uc2UuZXJyb3IsIGpSZXNwb25zZS5lcnJvcl9kZXNjcmlwdGlvbiwgalJlc3BvbnNlLnN0YXR1c0NvZGUpOw0KICAgICAgICAgICAgZm9ybUVsLnN1Ym1pdCgpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICAvLyBpZiB0aGUgT0F1dGggcmVzcG9uc2UgaXMgaW52YWxpZCwgZ2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZQ0KICAgICAgZWxzZSB7DQogICAgICAgIHZhciBlcnI7DQogICAgICAgIGlmIChyZXEuc3RhdHVzID09IDQwMCkgew0KICAgICAgICAgIGVyciA9IHsgZXJyb3I6ICdTdGF0dXMgNDAwOiBUaGUgbGlua191cmkgaXMgbm90IHZhbGlkJyB9Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGVyciA9IHsgZXJyb3I6ICdUaGVyZSB3YXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgdG9rZW4uJyB9Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICB2YXIgZXJyVXJsID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoImF1dGhyZXNwIiwgImVycm9yIik7DQogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGVyclVybCArICI_ZXJyb3I9IiArIEpTT04uc3RyaW5naWZ5KGVycik7DQogICAgICB9DQogICAgfQ0KICB9DQoNCiAgcmVxLnNlbmQocG9zdEJvZHkpOw0KfQ0KDQpmdW5jdGlvbiBjcmVhdGVQb3N0Rm9ybShhY3Rpb24sIGlkX3Rva2VuLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIHN0YXR1c0NvZGUpew0KICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpOyANCiAgICBmb3JtLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwgInBvc3QiKTsgDQogICAgZm9ybS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsIGFjdGlvbik7IA0KDQogICAgaWYgKGlkX3Rva2VuKXsgIA0KICAgICAgYWRkSW5wdXQoZm9ybSwgImlkX3Rva2VuIiwgaWRfdG9rZW4pOw0KICAgIH0NCg0KICAgIGlmIChlcnJvcil7ICANCiAgICAgIGFkZElucHV0KGZvcm0sICJlcnJvciIsIGVycm9yKTsNCiAgICB9DQoNCiAgICBpZiAoZXJyb3JfZGVzY3JpcHRpb24peyAgDQogICAgICBhZGRJbnB1dChmb3JtLCAiZXJyb3JfZGVzY3JpcHRpb24iLCBlcnJvcl9kZXNjcmlwdGlvbik7DQogICAgfQ0KDQogICAgaWYgKHN0YXR1c0NvZGUpeyAgDQogICAgICBhZGRJbnB1dChmb3JtLCAic3RhdHVzQ29kZSIsIHN0YXR1c0NvZGUpOw0KICAgIH0NCg0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3N0X2RpdiIpLmFwcGVuZENoaWxkKGZvcm0pOw0KICAgIHJldHVybiBmb3JtOw0KDQogICAgZnVuY3Rpb24gYWRkSW5wdXQoZm9ybSwgbmFtZSwgdmFsdWUpew0KICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsgDQogICAgICBlbC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOyANCiAgICAgIGVsLnNldEF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOyANCiAgICAgIGVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZSk7IA0KICAgICAgZm9ybS5hcHBlbmRDaGlsZChlbCk7ICANCiAgICB9DQp9DQo8L3NjcmlwdD4NCg","main_personal.handlebars":"PCFET0NUWVBFIGh0bWw-DQo8aHRtbCBsYW5nPSJlbiI-DQogIDxoZWFkPg0KICAgIDwhLS0gUmVxdWlyZWQgbWV0YSB0YWdzIC0tPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm8iPg0KDQogICAgPCEtLSBCb290c3RyYXAgQ1NTIC0tPg0KICAgIDxsaW5rIGhyZWY9Ii9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5jc3MiIHJlbD0ic3R5bGVzaGVldCI-DQogICAgPGxpbmsgaHJlZj0iL3N0YXRpYy9jc3MvZm9ybS12YWxpZGF0aW9uLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8bGluayBocmVmPSIvc3RhdGljL2Nzcy9ib290c3RyYXAtZm9ybWhlbHBlcnMuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxsaW5rIGhyZWY9Ii9zdGF0aWMvY3NzL3BlcnNvbmFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8dGl0bGU-e3t0aXRsZX19PC90aXRsZT4NCg0KICA8L2hlYWQ-DQogIDxib2R5IGNsYXNzPSJiZy1saWdodCI-DQogICAge3t7Ym9keX19fQ0KDQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvanF1ZXJ5LnNsaW0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9wb3BwZXIubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ib290c3RyYXAtZm9ybWhlbHBlcnMuanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2Jvb3RzdHJhcC1mb3JtaGVscGVycy1waG9uZS5qcyI-PC9zY3JpcHQ-DQogIDwvYm9keT4NCjwvaHRtbD4","post_itoken.handlebars":"PGRpdiBzdHlsZT0iZGlzcGxheTogbm9uZSI-DQoJPGZvcm0gaWQ9InBvc3RfaXRva2VuIiBhY3Rpb249Int7e2FjdGlvbn19fSIgbWV0aG9kPSJwb3N0Ij4NCgkgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpdG9rZW4iIHZhbHVlPSJ7e3tpdG9rZW59fX0iPg0KCTwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdD4NCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpew0KICBkb2N1bWVudC5mb3Jtc1sncG9zdF9pdG9rZW4nXS5zdWJtaXQoKTsNCn0NCjwvc2NyaXB0Pg","post_to_application.handlebars":"PGRpdiBpZD0icG9zdF9kaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4NCjxoMT5Qb3N0IFRvIEFwcGxpY2F0aW9uPC9oMT4NCjwvZGl2Pg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI-DQovLyBkZWJ1Z2dlcjsNCnBvc3RUb0FwcGxpY2F0aW9uKCk7DQoNCmZ1bmN0aW9uIHBvc3RUb0FwcGxpY2F0aW9uKCl7DQogIHZhciBuZXdVcmwgPSAne3t7bmV3VXJsfX19JzsNCiAgdmFyIGlkX3Rva2VuID0gJ3t7e2lkX3Rva2VufX19JzsNCiAgdmFyIGxpX3BhcmFtZXRlcnMgPSAne3tsaV9wYXJhbWV0ZXJzfX0nOw0KDQogIHZhciBmb3JtRWwgPSBjcmVhdGVQb3N0Rm9ybSgNCiAgICBuZXdVcmwsIA0KICAgIGlkX3Rva2VuKTsNCiAgZm9ybUVsLnN1Ym1pdCgpOw0KfQ0KDQpmdW5jdGlvbiBjcmVhdGVQb3N0Rm9ybShhY3Rpb24sIGlkX3Rva2VuKXsNCiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKTsgDQogICAgZm9ybS5zZXRBdHRyaWJ1dGUoIm1ldGhvZCIsICJwb3N0Iik7IA0KICAgIGZvcm0uc2V0QXR0cmlidXRlKCJhY3Rpb24iLCBhY3Rpb24pOyANCg0KICAgIGlmIChpZF90b2tlbil7ICANCiAgICAgIGFkZElucHV0KGZvcm0sICJpZF90b2tlbiIsIGlkX3Rva2VuKTsNCiAgICB9DQoNCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9zdF9kaXYiKS5hcHBlbmRDaGlsZChmb3JtKTsNCiAgICByZXR1cm4gZm9ybTsNCg0KICAgIGZ1bmN0aW9uIGFkZElucHV0KGZvcm0sIG5hbWUsIHZhbHVlKXsNCiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7IA0KICAgICAgZWwuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQiKTsgDQogICAgICBlbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsgDQogICAgICBlbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOyANCiAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZWwpOyAgDQogICAgfQ0KfQ0KDQo8L3NjcmlwdD4NCg","redirect.handlebars":"PHNjcmlwdD4NCgl3aW5kb3cubG9jYXRpb24gPSAie3t7bG9naW5SZWRpcmVjdH19fSI7CQ0KPC9zY3JpcHQ-DQo","rwl.handlebars":"DQo8c2NyaXB0Pg0KcHJvY2VlZCgpOw0KDQpmdW5jdGlvbiBwcm9jZWVkKCl7DQogIHZhciB1cmwgPSAne3t7dGFyZ2V0X2xpbmtfdXJpfX19JzsNCiAgdmFyIGlkVG9rZW4gPSAne3t7aWRUb2tlblN0cmluZ319fSc7DQogIHZhciBlcnJvciA9ICd7e2Vycm9yfX0nOw0KICB2YXIgZm9ybUVsID0gY3JlYXRlUG9zdEZvcm0odXJsLCBpZFRva2VuKTsNCiAgZm9ybUVsLnN1Ym1pdCgpOw0KfQ0KDQpmdW5jdGlvbiBjcmVhdGVQb3N0Rm9ybShhY3Rpb24sIGlkX3Rva2VuLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIHN0YXR1c0NvZGUpew0KICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpOyANCiAgICBmb3JtLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwgInBvc3QiKTsgDQogICAgZm9ybS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsIGFjdGlvbik7IA0KDQogICAgaWYgKGlkX3Rva2VuKXsgIA0KICAgICAgYWRkSW5wdXQoZm9ybSwgImlkX3Rva2VuIiwgaWRfdG9rZW4pOw0KICAgIH0NCg0KICAgIGlmIChlcnJvcil7ICANCiAgICAgIGFkZElucHV0KGZvcm0sICJlcnJvciIsIGVycm9yKTsNCiAgICB9DQoNCiAgICBpZiAoZXJyb3JfZGVzY3JpcHRpb24peyAgDQogICAgICBhZGRJbnB1dChmb3JtLCAiZXJyb3JfZGVzY3JpcHRpb24iLCBlcnJvcl9kZXNjcmlwdGlvbik7DQogICAgfQ0KDQogICAgaWYgKHN0YXR1c0NvZGUpeyAgDQogICAgICBhZGRJbnB1dChmb3JtLCAic3RhdHVzQ29kZSIsIHN0YXR1c0NvZGUpOw0KICAgIH0NCg0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0gDQogICAgICAgICAgICAgICAuYXBwZW5kQ2hpbGQoZm9ybSk7DQoNCiAgICByZXR1cm4gZm9ybTsNCg0KICAgIGZ1bmN0aW9uIGFkZElucHV0KGZvcm0sIG5hbWUsIHZhbHVlKXsNCiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7IA0KICAgICAgZWwuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQiKTsgDQogICAgICBlbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsgDQogICAgICBlbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOyANCiAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZWwpOyAgDQogICAgfQ0KfQ0KPC9zY3JpcHQ-DQo","tokenResult.handlebars":"PGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0ianVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4NCgk8aDQ-e3tpc3N1ZXJNZXNzYWdlfX08L2g0Pg0KCTx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtaG92ZXIiPg0KCQk8dGhlYWQ-DQoJCQk8dHI-DQoJCQkJPHRoPkNsYWltPC90aD4NCgkJCQk8dGg-VmFsdWU8L3RoPg0KCQkJPC90cj4NCgkJPC90aGVhZD4NCgkJPHRib2R5Pg0Ke3sjdG9rZW5Bc0FycmF5fX0gICAgICANCgkJCTx0cj4NCgkJCQk8dGQ-e3tuYW1lfX08L3RkPg0KCQkJCTx0ZD57e3t2YWx1ZX19fTwvdGQ-DQoJCQk8L3RyPg0Ke3svdG9rZW5Bc0FycmF5fX0gICAgICANCgkJPC90Ym9keT4NCgk8L3RhYmxlPg0KCTxicj4NCgl7e3tjb2RlTWVzc2FnZX19fQ0KCXt7e2FjY2Vzc190b2tlbk1lc3NhZ2V9fX0NCgl7e3t0b2tlblR5cGVNZXNzYWdlfX19DQo8L2Rpdj4NCg0KPHNjcmlwdCBzcmM9Ii9wZXJzb25hbC9qcy9qcXVlcnktMy4yLjEuc2xpbS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCmZ1bmN0aW9uIHZmZXRjaChhZGNfcGFyYW1zLCBkaXNwbGF5SWQpew0KCXZhciBuZXdQYXRoID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgIi8vIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoInRva2VuUmVzdWx0IiwgDQoJICAgICAgICAgICJwcm9jZXNzX2NsYWltX3NvdXJjZSIpOw0KDQoJdmFyIHVybCA9IG5ld1BhdGggKyAiP2FkY19wYXJhbXM9IiArIGFkY19wYXJhbXM7DQoJDQoJdmFyIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsJDQoJeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsNCgkgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgew0KCSAgICAJaWYgKHRoaXMucmVzcG9uc2VUZXh0KXsNCgkJICAgICAgICB2YXIgcmVzcG9uc2VPYmogPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTsNCgkJICAgICAgICBpbnNlcnREaXN0cmlidXRlZENsYWltKHJlc3BvbnNlT2JqLCBkaXNwbGF5SWQpOwkgICAgCQkNCgkgICAgCX0NCgkgICAgfQ0KCX07DQoJeG1saHR0cC5vcGVuKCJHRVQiLCB1cmwsIHRydWUpOw0KCXhtbGh0dHAuc2VuZCgpOw0KDQoJZnVuY3Rpb24gaW5zZXJ0RGlzdHJpYnV0ZWRDbGFpbShyZXNwb25zZU9iaiwgZGlzcGxheUlkKXsNCgkJdmFyIGRpc3BsYXlJZEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGlzcGxheUlkKTsNCgkJdmFyIHZjX3Rva2VuID0gcmVzcG9uc2VPYmoudmNfdG9rZW47DQoJCXZhciBwcmV0dHlSZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHZjX3Rva2VuLCBudWxsLCAyKTsNCgkJdmFyIGh0bWwgPSAnPGRpdiAgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7IHBhZGRpbmc6IDE1cHg7Ij4nOw0KDQoJCXZhciBpbmZvID0gcmVzcG9uc2VPYmouZGlzdHJpYnV0ZWRDbGFpbXMuaW5mbzsNCgkJaWYgKGluZm8gIT09IHVuZGVmaW5lZCl7DQoJCQlodG1sICs9ICc8cD4nICsgaW5mbyArICc8L3A-JzsNCgkJfQ0KDQoJCWh0bWwgKz0gJzxwPjxpPicgKyByZXNwb25zZU9iai5zdGF0dXMgKyAnPC9pPjwvcD4nDQoJCQkrICc8cHJlPjxjb2RlPicgKyBwcmV0dHlSZXNwb25zZSArICc8L2NvZGU-PC9wcmU-JzsNCgkJdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7DQoJCXZhciBuZXdDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOw0KCQluZXdDb2wuaW5uZXJIVE1MID0gaHRtbDsNCgkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7DQoJCWluc2VydEFmdGVyKG5ld1JvdywgZGlzcGxheUlkRWwpOw0KCX0NCg0KCWZ1bmN0aW9uIGluc2VydEFmdGVyKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHsNCgkgICAgcmVmZXJlbmNlTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCByZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nKTsNCgl9DQp9DQo8L3NjcmlwdD4NCg"}},"web/client_api":{"mqttws31.js":"LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAxMyBJQk0gQ29ycC4NCiAqDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAqIGFuZCBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW55IHRoaXMgZGlzdHJpYnV0aW9uLg0KICoNCiAqIFRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIGlzIGF2YWlsYWJsZSBhdA0KICogICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCiAqIGFuZCB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSBpcyBhdmFpbGFibGUgYXQNCiAqICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLg0KICoNCiAqIENvbnRyaWJ1dG9yczoNCiAqICAgIEFuZHJldyBCYW5rcyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBhbmQgaW5pdGlhbCBkb2N1bWVudGF0aW9uDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KDQovLyBPbmx5IGV4cG9zZSBhIHNpbmdsZSBvYmplY3QgbmFtZSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4NCi8vIEV2ZXJ5dGhpbmcgbXVzdCBnbyB0aHJvdWdoIHRoaXMgbW9kdWxlLiBHbG9iYWwgTWVzc2FnaW5nIG1vZHVsZQ0KLy8gb25seSBoYXMgYSBzaW5nbGUgcHVibGljIGZ1bmN0aW9uLCBjbGllbnQsIHdoaWNoIHJldHVybnMNCi8vIGEgTWVzc2FnaW5nIGNsaWVudCBvYmplY3QgZ2l2ZW4gY29ubmVjdGlvbiBkZXRhaWxzLg0KDQovKioNCiAqIEBuYW1lc3BhY2UgTWVzc2FnaW5nDQogKiBTZW5kIGFuZCByZWNlaXZlIG1lc3NhZ2VzIHVzaW5nIHdlYiBicm93c2Vycy4NCiAqIDxwPg0KICogVGhpcyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgbGV0cyBhIEphdmFTY3JpcHQgY2xpZW50IGFwcGxpY2F0aW9uIHVzZSB0aGUgTVFUVCBWMy4xIHByb3RvY29sIHRvDQogKiBjb25uZWN0IHRvIGFuIE1RVFQtc3VwcG9ydGluZyBtZXNzYWdpbmcgc2VydmVyLg0KICoNCiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0ZWQgaW5jbHVkZXM6DQogKiA8b2w-DQogKiA8bGk-Q29ubmVjdGluZyB0byBhbmQgZGlzY29ubmVjdGluZyBmcm9tIGEgc2VydmVyLiBUaGUgc2VydmVyIGlzIGlkZW50aWZpZWQgYnkgaXRzIGhvc3QgbmFtZSBhbmQgcG9ydCBudW1iZXIuDQogKiA8bGk-U3BlY2lmeWluZyBvcHRpb25zIHRoYXQgcmVsYXRlIHRvIHRoZSBjb21tdW5pY2F0aW9ucyBsaW5rIHdpdGggdGhlIHNlcnZlciwNCiAqIGZvciBleGFtcGxlIHRoZSBmcmVxdWVuY3kgb2Yga2VlcC1hbGl2ZSBoZWFydGJlYXRzLCBhbmQgd2hldGhlciBTU0wvVExTIGlzIHJlcXVpcmVkLg0KICogPGxpPlN1YnNjcmliaW5nIHRvIGFuZCByZWNlaXZpbmcgbWVzc2FnZXMgZnJvbSBNUVRUIFRvcGljcy4NCiAqIDxsaT5QdWJsaXNoaW5nIG1lc3NhZ2VzIHRvIE1RVFQgVG9waWNzLg0KICogPC9vbD4NCiAqIDxwPg0KICogPGgyPlRoZSBBUEkgY29uc2lzdHMgb2YgdHdvIG1haW4gb2JqZWN0czo8L2gyPg0KICogVGhlIDxiPk1lc3NhZ2luZy5DbGllbnQ8L2I-IG9iamVjdC4gVGhpcyBjb250YWlucyBtZXRob2RzIHRoYXQgcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgQVBJLA0KICogaW5jbHVkaW5nIHByb3Zpc2lvbiBvZiBjYWxsYmFja3MgdGhhdCBub3RpZnkgdGhlIGFwcGxpY2F0aW9uIHdoZW4gYSBtZXNzYWdlIGFycml2ZXMgZnJvbSBvciBpcyBkZWxpdmVyZWQgdG8gdGhlIG1lc3NhZ2luZyBzZXJ2ZXIsDQogKiBvciB3aGVuIHRoZSBzdGF0dXMgb2YgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG1lc3NhZ2luZyBzZXJ2ZXIgY2hhbmdlcy4NCiAqIDxwPg0KICogVGhlIDxiPk1lc3NhZ2luZy5NZXNzYWdlPC9iPiBvYmplY3QuIFRoaXMgZW5jYXBzdWxhdGVzIHRoZSBwYXlsb2FkIG9mIHRoZSBtZXNzYWdlIGFsb25nIHdpdGggdmFyaW91cyBhdHRyaWJ1dGVzDQogKiBhc3NvY2lhdGVkIHdpdGggaXRzIGRlbGl2ZXJ5LCBpbiBwYXJ0aWN1bGFyIHRoZSBkZXN0aW5hdGlvbiB0byB3aGljaCBpdCBoYXMgYmVlbiAob3IgaXMgYWJvdXQgdG8gYmUpIHNlbnQuDQogKiA8cD4NCiAqIFRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdmFsaWRhdGVzIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGl0LCBhbmQgd2lsbCB0aHJvdyBhbiBFcnJvciBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UNCiAqIGludGVuZGVkIGZvciBkZXZlbG9wZXIgdXNlLCBpZiBpdCBkZXRlY3RzIGFuIGVycm9yIHdpdGggYW55IHBhcmFtZXRlci4NCiAqIDxwPg0KICogRXhhbXBsZToNCiAqDQogKiA8Y29kZT48cHJlPg0KIGNsaWVudCA9IG5ldyBNZXNzYWdpbmcuQ2xpZW50KGxvY2F0aW9uLmhvc3RuYW1lLCBOdW1iZXIobG9jYXRpb24ucG9ydCksICJjbGllbnRJZCIpOw0KIGNsaWVudC5vbkNvbm5lY3Rpb25Mb3N0ID0gb25Db25uZWN0aW9uTG9zdDsNCiBjbGllbnQub25NZXNzYWdlQXJyaXZlZCA9IG9uTWVzc2FnZUFycml2ZWQ7DQogY2xpZW50LmNvbm5lY3Qoe29uU3VjY2VzczpvbkNvbm5lY3R9KTsNCg0KIGZ1bmN0aW9uIG9uQ29ubmVjdCgpIHsNCiAgLy8gT25jZSBhIGNvbm5lY3Rpb24gaGFzIGJlZW4gbWFkZSwgbWFrZSBhIHN1YnNjcmlwdGlvbiBhbmQgc2VuZCBhIG1lc3NhZ2UuDQogIGNvbnNvbGUubG9nKCJvbkNvbm5lY3QiKTsNCiAgY2xpZW50LnN1YnNjcmliZSgiL1dvcmxkIik7DQogIG1lc3NhZ2UgPSBuZXcgTWVzc2FnaW5nLk1lc3NhZ2UoIkhlbGxvIik7DQogIG1lc3NhZ2UuZGVzdGluYXRpb25OYW1lID0gIi9Xb3JsZCI7DQogIGNsaWVudC5zZW5kKG1lc3NhZ2UpOyANCn07DQogZnVuY3Rpb24gb25Db25uZWN0aW9uTG9zdChyZXNwb25zZU9iamVjdCkgew0KICBpZiAocmVzcG9uc2VPYmplY3QuZXJyb3JDb2RlICE9PSAwKQ0KICAgIGNvbnNvbGUubG9nKCJvbkNvbm5lY3Rpb25Mb3N0OiIrcmVzcG9uc2VPYmplY3QuZXJyb3JNZXNzYWdlKTsNCn07DQogZnVuY3Rpb24gb25NZXNzYWdlQXJyaXZlZChtZXNzYWdlKSB7DQogIGNvbnNvbGUubG9nKCJvbk1lc3NhZ2VBcnJpdmVkOiIrbWVzc2FnZS5wYXlsb2FkU3RyaW5nKTsNCiAgY2xpZW50LmRpc2Nvbm5lY3QoKTsgDQp9Ow0KICogPC9wcmU-PC9jb2RlPg0KICogPHA-DQogKiBPdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMsDQogKiA8YSBocmVmPSIvY2xpZW50cy9qYXZhL2RvYy9qYXZhZG9jL2luZGV4Lmh0bWwiPjxiaWc-SmF2YTwvYmlnPjwvYT4sDQogKiA8YSBocmVmPSIvY2xpZW50cy9jL2RvYy9odG1sL2luZGV4Lmh0bWwiPjxiaWc-QzwvYmlnPjwvYT4uDQogKi8NCk1lc3NhZ2luZyA9IChmdW5jdGlvbiAoZ2xvYmFsKSB7DQoNCiAgICAvLyBQcml2YXRlIHZhcmlhYmxlcyBiZWxvdywgdGhlc2UgYXJlIG9ubHkgdmlzaWJsZSBpbnNpZGUgdGhlIGZ1bmN0aW9uIGNsb3N1cmUNCiAgICAvLyB3aGljaCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgbW9kdWxlLiANCg0KICAgIHZhciB2ZXJzaW9uID0gIjAuMC4wLjAiOw0KICAgIHZhciBidWlsZExldmVsID0gIkBCVUlMRExFVkVMQCI7DQoNCiAgICAvKioNCiAgICAgKiBVbmlxdWUgbWVzc2FnZSB0eXBlIGlkZW50aWZpZXJzLCB3aXRoIGFzc29jaWF0ZWQNCiAgICAgKiBhc3NvY2lhdGVkIGludGVnZXIgdmFsdWVzLg0KICAgICAqIEBwcml2YXRlDQogICAgICovDQogICAgdmFyIE1FU1NBR0VfVFlQRSA9IHsNCiAgICAgICAgQ09OTkVDVDogMSwNCiAgICAgICAgQ09OTkFDSzogMiwNCiAgICAgICAgUFVCTElTSDogMywNCiAgICAgICAgUFVCQUNLOiA0LA0KICAgICAgICBQVUJSRUM6IDUsDQogICAgICAgIFBVQlJFTDogNiwNCiAgICAgICAgUFVCQ09NUDogNywNCiAgICAgICAgU1VCU0NSSUJFOiA4LA0KICAgICAgICBTVUJBQ0s6IDksDQogICAgICAgIFVOU1VCU0NSSUJFOiAxMCwNCiAgICAgICAgVU5TVUJBQ0s6IDExLA0KICAgICAgICBQSU5HUkVROiAxMiwNCiAgICAgICAgUElOR1JFU1A6IDEzLA0KICAgICAgICBESVNDT05ORUNUOiAxNA0KICAgIH07DQoNCiAgICAvLyBDb2xsZWN0aW9uIG9mIHV0aWxpdHkgbWV0aG9kcyB1c2VkIHRvIHNpbXBsaWZ5IG1vZHVsZSBjb2RlIA0KICAgIC8vIGFuZCBwcm9tb3RlIHRoZSBEUlkgcGF0dGVybi4gIA0KDQogICAgLyoqDQogICAgICogVmFsaWRhdGUgYW4gb2JqZWN0J3MgcGFyYW1ldGVyIG5hbWVzIHRvIGVuc3VyZSB0aGV5DQogICAgICogbWF0Y2ggYSBsaXN0IG9mIGV4cGVjdGVkIHZhcmlhYmxlcyBuYW1lIGZvciB0aGlzIG9wdGlvbg0KICAgICAqIHR5cGUuIFVzZWQgdG8gZW5zdXJlIG9wdGlvbiBvYmplY3QgcGFzc2VkIGludG8gdGhlIEFQSSBkb24ndA0KICAgICAqIGNvbnRhaW4gZXJyb25lb3VzIHBhcmFtZXRlcnMuDQogICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBVc2VyIG9wdGlvbnMgb2JqZWN0DQogICAgICogQHBhcmFtIHtrZXk6dHlwZSwga2V5Mjp0eXBlLCAuLi59IHZhbGlkIGtleXMgYW5kIHR5cGVzIHRoYXQgbWF5IGV4aXN0IGluIG9iai4NCiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBvcHRpb24gcGFyYW1ldGVyIGZvdW5kLg0KICAgICAqIEBwcml2YXRlDQogICAgICovDQogICAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKG9iaiwga2V5cykgew0KICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsNCiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgew0KICAgICAgICAgICAgICAgIGlmIChrZXlzLmhhc093blByb3BlcnR5KGtleSkpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSAhPT0ga2V5c1trZXldKQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdChFUlJPUi5JTlZBTElEX1RZUEUsIFt0eXBlb2Ygb2JqW2tleV0sIGtleV0pKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JTdHIgPSAiVW5rbm93biBwcm9wZXJ0eSwgIiArIGtleSArICIuIFZhbGlkIHByb3BlcnRpZXMgYXJlOiI7DQogICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGtleXMpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yU3RyID0gZXJyb3JTdHIgKyAiICIgKyBrZXk7DQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvclN0cik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfTsNCg0KICAgIC8qKg0KICAgICAqIFJldHVybiBhIG5ldyBmdW5jdGlvbiB3aGljaCBydW5zIHRoZSB1c2VyIGZ1bmN0aW9uIGJvdW5kDQogICAgICogdG8gYSBmaXhlZCBzY29wZS4NCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBVc2VyIGZ1bmN0aW9uDQogICAgICogQHBhcmFtIHtvYmplY3R9IEZ1bmN0aW9uIHNjb3BlDQogICAgICogQHJldHVybiB7ZnVuY3Rpb259IFVzZXIgZnVuY3Rpb24gYm91bmQgdG8gYW5vdGhlciBzY29wZQ0KICAgICAqIEBwcml2YXRlDQogICAgICovDQogICAgdmFyIHNjb3BlID0gZnVuY3Rpb24gKGYsIHNjb3BlKSB7DQogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gZi5hcHBseShzY29wZSwgYXJndW1lbnRzKTsNCiAgICAgICAgfTsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogVW5pcXVlIG1lc3NhZ2UgdHlwZSBpZGVudGlmaWVycywgd2l0aCBhc3NvY2lhdGVkDQogICAgICogYXNzb2NpYXRlZCBpbnRlZ2VyIHZhbHVlcy4NCiAgICAgKiBAcHJpdmF0ZQ0KICAgICAqLw0KICAgIHZhciBFUlJPUiA9IHsNCiAgICAgICAgT0s6IHtjb2RlOiAwLCB0ZXh0OiAiQU1RSlNDMDAwMEkgT0suIn0sDQogICAgICAgIENPTk5FQ1RfVElNRU9VVDoge2NvZGU6IDEsIHRleHQ6ICJBTVFKU0MwMDAxRSBDb25uZWN0IHRpbWVkIG91dC4ifSwNCiAgICAgICAgU1VCU0NSSUJFX1RJTUVPVVQ6IHtjb2RlOiAyLCB0ZXh0OiAiQU1RSlMwMDAyRSBTdWJzY3JpYmUgdGltZWQgb3V0LiJ9LA0KICAgICAgICBVTlNVQlNDUklCRV9USU1FT1VUOiB7Y29kZTogMywgdGV4dDogIkFNUUpTMDAwM0UgVW5zdWJzY3JpYmUgdGltZWQgb3V0LiJ9LA0KICAgICAgICBQSU5HX1RJTUVPVVQ6IHtjb2RlOiA0LCB0ZXh0OiAiQU1RSlMwMDA0RSBQaW5nIHRpbWVkIG91dC4ifSwNCiAgICAgICAgSU5URVJOQUxfRVJST1I6IHtjb2RlOiA1LCB0ZXh0OiAiQU1RSlMwMDA1RSBJbnRlcm5hbCBlcnJvci4ifSwNCiAgICAgICAgQ09OTkFDS19SRVRVUk5DT0RFOiB7Y29kZTogNiwgdGV4dDogIkFNUUpTMDAwNkUgQmFkIENvbm5hY2sgcmV0dXJuIGNvZGU6ezB9IHsxfS4ifSwNCiAgICAgICAgU09DS0VUX0VSUk9SOiB7Y29kZTogNywgdGV4dDogIkFNUUpTMDAwN0UgU29ja2V0IGVycm9yOnswfS4ifSwNCiAgICAgICAgU09DS0VUX0NMT1NFOiB7Y29kZTogOCwgdGV4dDogIkFNUUpTMDAwOEkgU29ja2V0IGNsb3NlZC4ifSwNCiAgICAgICAgTUFMRk9STUVEX1VURjoge2NvZGU6IDksIHRleHQ6ICJBTVFKUzAwMDlFIE1hbGZvcm1lZCBVVEYgZGF0YTp7MH0gezF9IHsyfS4ifSwNCiAgICAgICAgVU5TVVBQT1JURUQ6IHtjb2RlOiAxMCwgdGV4dDogIkFNUUpTMDAxMEUgezB9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLiJ9LA0KICAgICAgICBJTlZBTElEX1NUQVRFOiB7Y29kZTogMTEsIHRleHQ6ICJBTVFKUzAwMTFFIEludmFsaWQgc3RhdGUgezB9LiJ9LA0KICAgICAgICBJTlZBTElEX1RZUEU6IHtjb2RlOiAxMiwgdGV4dDogIkFNUUpTMDAxMkUgSW52YWxpZCB0eXBlIHswfSBmb3IgezF9LiJ9LA0KICAgICAgICBJTlZBTElEX0FSR1VNRU5UOiB7Y29kZTogMTMsIHRleHQ6ICJBTVFKUzAwMTNFIEludmFsaWQgYXJndW1lbnQgezB9IGZvciB7MX0uIn0sDQogICAgICAgIFVOU1VQUE9SVEVEX09QRVJBVElPTjoge2NvZGU6IDE0LCB0ZXh0OiAiQU1RSlMwMDE0RSBVbnN1cHBvcnRlZCBvcGVyYXRpb24uIn0sDQogICAgICAgIElOVkFMSURfU1RPUkVEX0RBVEE6IHtjb2RlOiAxNSwgdGV4dDogIkFNUUpTMDAxNUUgSW52YWxpZCBkYXRhIGluIGxvY2FsIHN0b3JhZ2Uga2V5PXswfSB2YWx1ZT17MX0uIn0sDQogICAgICAgIElOVkFMSURfTVFUVF9NRVNTQUdFX1RZUEU6IHtjb2RlOiAxNiwgdGV4dDogIkFNUUpTMDAxNkUgSW52YWxpZCBNUVRUIG1lc3NhZ2UgdHlwZSB7MH0uIn0sDQogICAgICAgIE1BTEZPUk1FRF9VTklDT0RFOiB7Y29kZTogMTcsIHRleHQ6ICJBTVFKUzAwMTdFIE1hbGZvcm1lZCBVbmljb2RlIHN0cmluZzp7MH0gezF9LiJ9LA0KICAgIH07DQoNCiAgICAvKiogQ09OTkFDSyBSQyBNZWFuaW5nLiAqLw0KICAgIHZhciBDT05OQUNLX1JDID0gew0KICAgICAgICAwOiAiQ29ubmVjdGlvbiBBY2NlcHRlZCIsDQogICAgICAgIDE6ICJDb25uZWN0aW9uIFJlZnVzZWQ6IHVuYWNjZXB0YWJsZSBwcm90b2NvbCB2ZXJzaW9uIiwNCiAgICAgICAgMjogIkNvbm5lY3Rpb24gUmVmdXNlZDogaWRlbnRpZmllciByZWplY3RlZCIsDQogICAgICAgIDM6ICJDb25uZWN0aW9uIFJlZnVzZWQ6IHNlcnZlciB1bmF2YWlsYWJsZSIsDQogICAgICAgIDQ6ICJDb25uZWN0aW9uIFJlZnVzZWQ6IGJhZCB1c2VyIG5hbWUgb3IgcGFzc3dvcmQiLA0KICAgICAgICA1OiAiQ29ubmVjdGlvbiBSZWZ1c2VkOiBub3QgYXV0aG9yaXplZCINCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogRm9ybWF0IGFuIGVycm9yIG1lc3NhZ2UgdGV4dC4NCiAgICAgKiBAcHJpdmF0ZQ0KICAgICAqIEBwYXJhbSB7ZXJyb3J9IEVSUk9SLktFWSB2YWx1ZSBhYm92ZS4NCiAgICAgKiBAcGFyYW0ge3N1YnN0aXR1dGlvbnN9IFthcnJheV0gc3Vic3RpdHV0ZWQgaW50byB0aGUgdGV4dC4NCiAgICAgKiBAcmV0dXJuIHRoZSB0ZXh0IHdpdGggdGhlIHN1YnN0aXR1dGlvbnMgbWFkZS4NCiAgICAgKi8NCiAgICB2YXIgZm9ybWF0ID0gZnVuY3Rpb24gKGVycm9yLCBzdWJzdGl0dXRpb25zKSB7DQogICAgICAgIHZhciB0ZXh0ID0gZXJyb3IudGV4dDsNCiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnMpIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vic3RpdHV0aW9ucy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGZpZWxkID0gInsiICsgaSArICJ9IjsNCiAgICAgICAgICAgICAgICBzdGFydCA9IHRleHQuaW5kZXhPZihmaWVsZCk7DQogICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gMCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgcGFydDEgPSB0ZXh0LnN1YnN0cmluZygwLCBzdGFydCk7DQogICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0MiA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0ICsgZmllbGQubGVuZ3RoKTsNCiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhcnQxICsgc3Vic3RpdHV0aW9uc1tpXSArIHBhcnQyOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGV4dDsNCiAgICB9Ow0KDQogICAgLy9NUVRUIHByb3RvY29s